Jails en FreeBSD con Bastille
2024-07-01En el mundo de la administración de sistemas. Se ha hecho muy popular el aislar servicios. Esto ayuda a tener una mejor seguridad y un mejor manejo de servicios, poder darle mantenimiento por separado sin necesidad de afectar algún otro servicio.
Conocemos herramientas como Docker de las mas populares actualmente. Sin embargo, FreeBSD ha incorporado desde hace mas de 20 años en su versión 4.0 (actualmente 14.1) el concepto de "Jails". Que es un espacio aislado al sistema principal con el que podemos montar servicios de manera segura.
Al día de hoy las Jails de FreeBSD son comparables y hasta superiores en algunos aspectos a los contenedores de Docker.
Aquí veremos como empezar a utilizar Jails en FreeBSD gracias a Bastille, que es una herramienta para manejar nuestras Jails de una forma muy rápida y muy parecida también a Docker. Por lo que si ya lo dominas no te costara entender los comandos de Bastille.
Preparación - Actualizar el sistema (opcional)
Aunque es opcional. Bastille recomienda actualizar nuestro sistema para garantizar la seguridad en nuestras Jails.
Para ello ejecutaremos lo siguientes comandos:
freebsd-update fetch
freebsd-update installTerminada la actualización reiniciaremos el sistema:
# rebootInstalación
La instalación es muy fácil. Basta con ejecutar los siguientes comandos.
# pkg update
# pkg install bastilleTambién necesitaremos el paquete bootstrap:
# pkg install bootstrapSi queremos que Bastille inicie junto a nuestro sistema, ejecutaremos las siguientes lineas:
# sysrc bastille_enable=YES
# sysrc bastille_rcorder=YESConfiguración de red
Como en Docker. Las Jails de FreeBSD son como pequeñas maquinas, por lo que requieren tener una IP virtual y una conexión de tipo puente (bridge) o NAT. En este caso configuraremos una red NAT para Bastille.
Primero crearemos la interfaz que se utilizara con los siguientes comandos:
# sysrc cloned_interfaces+=lo1
# sysrc ifconfig_lo1_name="bastille0"
# service netif cloneupAhora crearemos nuestras reglas de redirección de red. Crearemos o modificaremos el archivo /etc/pg.conf con el siguiente contenido:
ext_if="vtnet0"
set block-policy return
scrub in on $ext_if all fragment reassemble
set skip on lo
table <jails> persist
nat on $ext_if from <jails> to any -> ($ext_if:0)
rdr-anchor "rdr/*"
block in all
pass out quick keep state
antispoof for $ext_if inet
pass in inet proto tcp from any to any port ssh flags S/SA keep stateImportante: Actualizar la linea ext_if="vtnet0" y reemplazar vtnet0 por la interfaz de tu red externa.
Por ultimo iniciaremos el servicio PF:
# sysrc pf_enable=YES
# service pf startCreando Jails con Bastille
Ahora ya podemos crear Jails. Lo primero que haremos sera desempaquetar la versión mas reciente de FreeBSD. Al día de hoy la versión es la 14.1:
# bastille bootstrap 14.1-RELEASEAhora ya podemos crear nuestra primera Jail:
# bastille create NAME 14.1-RELEASE IPDonde el "NAME" sera el nombre que quieras ponerle a tu Jail.
Y la "IP" puede ser entre 10.0.0.0/8, 172.16.0.0/12 y 192.168.0.0/16.
Por ejemplo:
# bastille create myJail 14.1-RELEASE 10.0.0.1Podemos ver nuestras Jails que están activas con el comando:
# bastille listPara detener un Jail:
# bastille stop NAMEPara iniciar un Jail:
# bastille start NAMEPara ver todos los comandos solo ejecuta:
# bastilleManipulando nuestro Jail
Para instalar paquetes, iniciar servicios o manipular la maquina de nuestro Jail podemos ejecutar los siguientes comandos:
;; Instalar un paquete al contenedor
# bastille pkg NAME install PACKAGE
;; Ejemplo
# bastille pkg myJail install htop
;; Ver los procesos de un Jail
# bastille htop NAME
;; Iniciar un servicio dentro del Jail
# bastille service NAME SERVICE start
;; Ejemplo
# bastille service myJail sshd start
;; Ejecutar un comando arbitrario:
# bastille cmd NAME COMMANDY si quieres manipular todo desde la terminal interna puedes entrar con el comando:
# bastille console NAMERedireccionando conexiones
Con tus Jail activas puedes comunicarte directamente a través de su IP. Pero si quieres que algún puerto o servicio sea expuesto (a la interfaz configurada en pasos anteriores). Hará falta redireccionar los puertos.
Para ello Bastille incorpora el comando "rdr":
# bastille rdr NAME [tcp/udp] HOST_PORT JAIL_PORTSi por ejemplo queremos que nuestra maquina muestre un sitio web en el puerto 80 y nuestro Jail ejecuta la web en el puerto 8000. Entonces ejecutaremos:
# bastille rdr myJail tcp 80 8000Podemos ver las redirección que tiene activa un Jail con el comando:
# bastille rdr NAME listY limpiar las redirecciones con:
# bastille rdr NAME clear¡Y eso es todo! Ahora ya podemos orquestar y montar los servicios que queramos en Jails gracias a Bastille.
Pronto subiré algunos tutoriales montando servicios populares como Nextcloud, servidor Jabber, Gotosocial, etc. ¿Cual te gustaría aprender a montar?