El producto de mi empresa es esencialmente una caja de Linux (Ubuntu) ubicada en la red de otra persona que ejecuta nuestro software. Hasta ahora teníamos menos de 25 cajas en la naturaleza y usamos TeamViewer para administrarlas.
Ahora estamos a punto de enviar 1000 de estas cajas y TeamViewer ya no es una opción. Mi trabajo es encontrar una forma de acceder a estos cuadros y actualizar el software en ellos . Esta solución debería poder atravesar firewalls y lo que tenga.
He considerado:
1. Solución local (por ejemplo, un servicio de Linux) que establece un túnel inverso SSH a un servidor en la nube y otro servicio en la nube que realiza un seguimiento de esos y le permite conectarse a ellos.
Obviamente, esto requiere mucha mano de obra y, francamente, se siente como reinventar la rueda, ya que muchas otras empresas ya deben haberse encontrado con este problema. Aun así, no estoy seguro de que haremos un gran trabajo.
2. Herramientas como títeres, chef o OpenVPN
Traté de leer lo más posible, pero parece que no puedo penetrar lo suficiente a través del discurso de marketing para comprender la elección obvia.
Nadie más, excepto nosotros, necesita conectarse a estas cajas. ¿Hay alguien con experiencia relevante que me pueda dar algunos consejos?
fuente
Respuestas:
Obtenga actualizaciones, no presione
A medida que escala, será inviable realizar actualizaciones automáticas para todos sus productos.
En su lugar, haga que sus productos "actualicen" sus actualizaciones periódicamente, y luego puede agregar capacidad adicional en el lado del servidor a medida que crece.
¿Cómo?
Este problema ya se ha resuelto, como sugirió. Aquí hay varios enfoques en los que puedo pensar.
rsync
/scp
los archivos requeridos.descarga sin procesar + verificación de firma :
ansible : Ansible es una gran herramienta para administrar las configuraciones del sistema. Está en el ámbito de la marioneta / chef, pero no tiene agente (usa python) y está diseñado para ser idempotente. Si la implementación de su software requiere un script bash complicado, usaría una herramienta como esta para que sea menos complicado realizar sus actualizaciones.
Por supuesto, hay otras formas de hacer esto ... Pero me lleva a un punto importante.
¡Firma / valida tus actualizaciones!
No importa lo que haga, es imperativo que tenga un mecanismo para garantizar que su actualización no haya sido alterada. Un usuario malintencionado podría hacerse pasar por su servidor de actualizaciones en cualquiera de las configuraciones anteriores. Si no valida su actualización, su caja es mucho más fácil de hackear y entrar.
Una buena forma de hacerlo es firmar sus archivos de actualización. Tendrá que mantener un certificado (o pagarle a alguien para que lo haga), pero podrá instalar su huella digital en cada uno de sus dispositivos antes de enviarlos para que puedan rechazar las actualizaciones que han sido manipuladas.
Seguridad física
Por supuesto, si alguien tiene acceso físico a la implementación del cliente, fácilmente podría hacerse cargo del servidor. ¡Pero al menos no pueden atacar los otros despliegues! La seguridad física es probablemente la responsabilidad de su cliente.
Seguridad
Hagas lo que hagas, la seguridad debe incorporarse desde el principio. No cortes las esquinas aquí: si lo haces, te arrepentirás al final.
Asegurar completamente este sistema de actualización está fuera del alcance de esta publicación, y recomiendo contratar a un consultor si usted o alguien de su equipo no tiene conocimiento en esta área. Vale la pena cada centavo.
fuente
fpm
yaptly
son dos excelentes herramientas que hacen que sea mucho más fácil construir y alojar sus propios paquetes. Acabo de pasar por este proceso recientemente, y fue bastante agradable.¿Realmente necesitas acceder a ellos?
O simplemente actualizarlos? Debido a que puede hacer que se actualicen ellos mismos, de manera similar a cómo apt actualiza en sí mismo sin supervisión.
Si necesita iniciar sesión
¿Por qué no un demonio OpenSSH escuchando a través del reenvío de puertos? Cada cliente puede tener una clave separada para la seguridad y solo se conectaría cuando sea necesario.
Hasta sus clientes
También debe tener en cuenta lo que el cliente está dispuesto a aceptar. Es posible que no se sientan cómodos con ningún acceso remoto a su red, o solo se sientan cómodos con tecnologías / configuraciones específicas.
fuente
Sugiero una herramienta de orquestación como Puppet o Salt .
Salt es una cola de mensajes y puede hacer una conexión saliente persistente desde su dispositivo a un servidor maestro. Puede usar esto para ejecutar comandos arbitrarios en los dispositivos ... como un
apt-get
.La otra opción es Puppet, donde todavía tiene un servidor maestro y los clientes realizan conexiones salientes desde sus ubicaciones.
Utilizo ambas herramientas para un propósito similar en el que es posible que no tenga control administrativo del firewall.
fuente