Almacenamiento en la nube de componentes: una nueva etapa en el desarrollo del gateway de Internet ICS

Comienzo



La popularidad de las soluciones UTM modernas se asocia principalmente con su multifuncionalidad. La capacidad de resolver r谩pidamente todas las tareas de TI de una empresa, e incluso desde una interfaz web, atrae a muchos administradores de sistemas.



Nuestra soluci贸n, Internet Control Server , tambi茅n pertenece a la clase de productos UTM, combinando las funciones de protecci贸n de red, administraci贸n de conexi贸n a Internet, filtrado de contenido y muchas otras.



A pesar de las ventajas obvias, el uso de estas soluciones tiene una desventaja: a menudo son monol铆ticas, lo que no permite responder a los cambios del mercado de una manera m谩s flexible.



Desde este punto de vista, un producto m谩s interesante es la pasarela UTM, que puede ser construida por el propio usuario, en base a las tareas reales de la empresa.



En este caso, el administrador de sistemas construye su puerta de enlace a partir de los "bloques de construcci贸n" de los componentes, instalando solo los m贸dulos que necesita. Todas las herramientas est谩n en la nube del desarrollador y el usuario descarga e instala los paquetes necesarios. Este principio se ha convertido en fundamental para nuestros desarrollos futuros.



El ecosistema hist贸rico de FreeBSD estaba bien y bien entendido. Hemos elegido el instalador de paquetes tradicional de FreeBSD, pkg, como el m茅todo m谩s apropiado para distribuir paquetes. Se recopila un repositorio en nuestra nube, y el acceso a 茅l se prescribe en el cliente en la configuraci贸n tradicional de pkg.



Que planeamos hacer



El sistema debe ser un constructor en forma de n煤cleo en el que se encadenan los componentes. El usuario recibe un kit de distribuci贸n que incluye solo los complementos m铆nimos requeridos (enrutador, fierwall, etc.). El resto se instala seg煤n sea necesario.



Para que el sistema funcione, necesit谩bamos implementar los siguientes componentes:



  • sistema - kernel FreeBSD modificado
  • core : un paquete especial con la configuraci贸n del producto, que es la dependencia principal de todos los complementos
  • complementos : cada uno de ellos es un paquete compilado que se instala de forma regular mediante la utilidad pkg


Estructura del complemento



Como se dijo, un complemento es un paquete normal. Se puede instalar con la utilidad pkg.

Para mantener la compatibilidad con versiones anteriores, se decidi贸 que la nueva versi贸n principal del complemento ser铆a un paquete separado, no relacionado con la versi贸n principal anterior. Por ejemplo plugin-v1 y plugin-v2 . La raz贸n es que pueden tener dependencias completamente diferentes, tal vez incluso contradecirse entre s铆.



La versi贸n secundaria simplemente cambia el n煤mero de versi贸n del paquete, aqu铆 todo es como de costumbre.



Trabajando con complementos



Para que el sistema funcione como lo necesitamos, se cre贸 una utilidad adicional sobre pkg.



Las principales herramientas de trabajo ser谩n los comandos pkg query y pkg rquery .



El primero recopila informaci贸n sobre los complementos instalados en el sistema, el segundo accede al repositorio.



Para que la utilidad controle la ejecuci贸n correcta de los comandos en el sistema, se verifica la ejecuci贸n de cada comando en busca de un c贸digo de retorno. Si se recibe un c贸digo de retorno de 0, entonces se ejecut贸 el comando, si es algo m谩s, entonces ocurri贸 un error. Por lo tanto, puede rastrear, por ejemplo, problemas de conexi贸n de red.



Aqu铆 surgi贸 un matiz interesante. Por ejemplo







, si busca todos los paquetes por patr贸n: entonces, si ning煤n paquete instalado coincide con la condici贸n del patr贸n, se devuelve el error 69 sin un mensaje de error. Los desarrolladores de la utilidad consideraron que si la b煤squeda no arroj贸 nada, entonces este es un comportamiento anormal. Bien ok. Tuve que manejar un caso as铆 de una manera especial.



Problemas de actualizaci贸n



Luego, los problemas con el control de versiones comienzan al actualizar los complementos.



En primer lugar, la utilidad pkg, al ejecutar el comando pkg upgrade <pkg_name>, tambi茅n actualiza TODAS las dependencias directas de los paquetes, este comportamiento est谩 dise帽ado por los desarrolladores. Pero en nuestro caso, esto incluye la actualizaci贸n y el n煤cleo, si se ha lanzado una versi贸n menor, lo cual no es deseable, ya que el n煤cleo cambia los par谩metros del sistema y tambi茅n requiere un reinicio del sistema despu茅s de la actualizaci贸n.



Es decir, si ya tenemos instalado SP2 - pkg-1 y pkg-2 , y dependiendo de pkg-1 Set pkg-2 , si ejecutamos el comando pkg upgrade pkg-1 , luego pkg-2 tambi茅n se actualiza .



Vayamos por el otro lado.



Construyamos el 谩rbol de dependencia de paquetes hacia arriba y hacia abajo.

Busque los nombres de todos los paquetes de los que depende nuestro paquete:



pkg rquery% rn <pkg_name>



Ahora todos los paquetes que dependen de nuestro paquete:



pkg rquery% dn <pkg_name> Eliminemos



todas las entidades que dependen del paquete. A continuaci贸n, comenzaremos a eliminar las entidades de las que depende nuestro paquete subiendo por el 谩rbol hasta que nos encontremos en el n煤cleo (no lo eliminaremos por supuesto). Ahora puede restaurar el 谩rbol instalando las 煤ltimas versiones menores de todos los paquetes que contiene.







Por ejemplo, en la imagen de arriba, podemos ver que el paquete ics-plugin-a-v1 depende del complemento ics-plugin-b-v1 . Si necesitamos actualizar el paquete a la versi贸n ics-plugin-v2 , esto tambi茅n implicar谩 actualizar el paquete ics-plugin-b-v1 , para el cual hay 2 versiones principales: ics-plugin-b-v2 e ics-plugin. -b-v3 . Sin embargo, ninguno de ellos admite el complemento ics-plugin-c-v1 . Es decir, la actualizaci贸n instalar谩 primero el paquete ics -plugin-b-v2 o -v3 , luego ics-plugin-a-v1e ics-plugin-c se desinstalar谩 y no se instalar谩.



Adem谩s, el n煤cleo puede tener una versi贸n principal, en cuyo caso el conjunto completo de complementos debe actualizarse para que coincida.







Para instalar el paquete ics-plugin-a , que depende de ics-core-v2, debe actualizar ics-core, despu茅s de lo cual solo se instalar谩n los paquetes principales que dependen de ics-core-v2.



Copia de seguridad de la base de datos



Al trabajar con el repositorio, es posible una situaci贸n en la que durante la actualizaci贸n se pierda la conexi贸n (aparece el c贸digo de error del sistema 70 o 3). Adem谩s, para desinstalar correctamente el complemento, el sistema necesita una base de paquete v谩lida en el sistema. Al ejecutar el comando pkg update , si no hay conexi贸n, la base reporta un error e incluso localmente no realiza sus funciones hasta que la actualizaci贸n se completa correctamente.



Para evitar tales situaciones, usaremos la utilidad de respaldo pkg . Antes de cualquier operaci贸n, durante la cual existe la posibilidad de no obtener el resultado deseado, guarde la base de datos:



pkg backup -d <backup_dir>



Si la operaci贸n no se complet贸 correctamente, devuelva la base de datos a su lugar:



pkg backup -r <backup_dir>



Centro



Hasta ahora, todo es bastante sencillo. Si hay una actualizaci贸n para el kernel, entonces:



  1. descargar la nueva imagen del kernel en el archivo
  2. crear un nuevo conjunto de datos en zfs
  3. montar el conjunto de datos en el sistema
  4. desempaquetar la imagen
  5. instalar un paquete especial con las opciones de kernel necesarias para el funcionamiento normal
  6. registrar la nueva imagen como de arranque
  7. ???


驴Lucro?



Todav铆a no.



Necesitamos restaurar los complementos del sistema instalados anteriormente por el usuario (si son compatibles con el nuevo kernel, por supuesto). En consecuencia, debe crear un repositorio de complementos separado para cada versi贸n del kernel.



Pero (como siempre) hay un matiz.

A煤n no hemos instalado el kernel de la versi贸n futura y no podemos instalar el complemento para otra versi贸n. Si arrancamos el sistema desde una nueva imagen, entonces no podremos acceder al repositorio (por razones hist贸ricas y t茅cnicas, el enrutamiento tambi茅n es un complemento).



驴Qu茅 hacer?



Elevamos el servidor con api, que entregar谩 el archivo con el repositorio de complementos para la versi贸n de kernel especificada.



Luego, nuestra utilidad generar谩 un archivo de configuraci贸n del repositorio con la ruta a la carpeta con el archivo descomprimido.



Para FreeBSD, este ser谩 el archivo <repo_name> .conf en / usr / local / etc / repos o / etc / repos . Vale la pena se帽alar aqu铆 que la ruta est谩 escrita de la siguiente manera: url: "file: /// path_to_repo" (隆 3 barras! )



Guarde los datos sobre los complementos instalados y verifique su compatibilidad con la versi贸n futura del kernel (si hay incompatibles , informaremos al usuario al respecto).



Ahora puedes reiniciar.



脷ltima cosa



Pkg requiere inicializaci贸n (bootstrap) despu茅s de la actualizaci贸n del sistema. Por lo tanto, si ejecuta cualquier comando, se le solicitar谩. En nuestro caso, la utilidad vinculante no entender谩 que lo quiere y considerar谩 que la operaci贸n se realiz贸 de forma incorrecta.



Para hacer esto, creamos un controlador de errores de inicializaci贸n, afortunadamente, tiene un c贸digo de operaci贸n del sistema separado 1. Por lo tanto, si la utilidad encuentra dicho c贸digo, simplemente ejecuta



pkg -y



Pkg hace un bootstrap, y entonces puede trabajar normalmente.



Total



As铆 es como construimos nuestro repositorio. Si bien este es un prototipo, y en el futuro, lo m谩s probable es que cambie y se vuelva m谩s complejo, pero la base del dise帽o se ha establecido y permanecer谩 sin cambios.



La tecnolog铆a descrita se aplicar谩 en nuevos desarrollos de Internet Control Server, haci茅ndolo a煤n m谩s conveniente para su uso en redes corporativas de empresas. Puede descargar y probar la versi贸n m谩s actual del ICS en el enlace .



Per铆odo de prueba, versi贸n gratuita para 9 usuarios, demostraci贸n en l铆nea y soporte t茅cnico receptivo.



隆Sigue las novedades y qu茅date con nosotros!



All Articles