Jails con Bastille FreeBSD
https://docs.freebsd.org/en/books/handbook/jails/ https://bastille.readthedocs.io/en/latest/1.- Creación de la Jail www con Bastille
3.- Instalar Wordpress. Activar rdr en Firewall PF
Información sobre el sistema
% uname -mrs FreeBSD 13.1-RELEASE-p6 amd64
La virtualización es algo así como un entorno cliente-servidor. El hardware y su instancia central del sistema operativo es el host, mientras que los clientes son instancias virtualizadas del sistema operativo. Una jail contiene una zona de usuario completa del sistema operativo que se ejecuta sobre un sistema FreeBSD existente. La jail no tiene su propio kernel, en cambio, se ejecuta en una porción restringida del kernel del host.
Un sistema enjaulado sólo puede acceder a una parte limitada del sistema de archivos y no puede ver procesos fuera de la jaula. A cada jaula se le asigna una dirección IP dedicada, y la jaula sólo puede ver el tráfico a esa IP en particular. Cada jaula necesita un directorio raíz dedicado
La cuenta root en una jaula controla completamente esa jaula pero no tiene acceso a nada más allá de la jaula, está confinado. El usuario puede instalar el software que desee sin interferir con el sistema anfitrión ni con otras jaulas.
Bastille es un gestor de jails escrito en Bourne Shell.
Soporta ZFS VNET Automatización de jails por medio de templates Control de recursos (rctl) Firewall dinámico - redirección dinámica de puertos, etc. La red interna de la jail hará nat a través de PF
El comando ping está deshabilitado dentro de los contenedores, porque el acceso sin procesar al socket es un agujero de seguridad. En su lugar, se puede instalar y probar con wget.
pkg install bastille
Habilitar las opciones para utilizar ZFS en bastille
sysrc -f /usr/local/etc/bastille/bastille.conf bastille_zfs_enable=YES sysrc -f /usr/local/etc/bastille/bastille.conf bastille_zfs_zpool=zroot
Activar bastille
sysrc bastille_enable=YES
Iniciar bastille
service bastille start
Descargar los ficheros base de la última versión de FreeBSD que vamos a utilizar y aplicar parches de seguridad.
# bastille bootstrap 13.1-RELEASE update
Bucle invertido bastille0
loopback (bastille0)
Crear una interfaz loopback clonada (bastille0) y asignar direcciones privadas (rfc1918) a todos las jails en esa interfaz. Se puede usar cualquier dirección dentro de ese rango porque hemos creado nuestra propia red privada.
Desde el sistema host el cortafuegos (PF), permite y deniega tráfico. Con esta configuración los contenedores se mantienen fuera de la red, hasta que se permita el acceso.
El NAT del cortafuegos del sistema saca el tráfico de los contenedores y puede redirigir selectivamente el tráfico a los contenedores en función de los puertos de conexión (es decir, 80, 443, etc.)
Crear la interfaz loopback
sysrc cloned_interfaces+=lo1 sysrc ifconfig_lo1_name="bastille0"
Aplicar la configuración
service netif cloneup
PF es una herramienta de manipulacion TCP/IP
Permitir conexiones SSH
$ cat /etc/pf.conf # ext_if="em0" set skip on lo set block-policy return scrub in on $ext_if all fragment reassemble 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 state
Habilitar PF
# sysrc pf_enable=YES
Iniciar PF
service pf start
Consultar las reglas de PF
pfctl -srscrub in on em0 all fragment reassemble block return in all pass out quick all flags S/SA keep state block drop in on ! em0 inet from 192.168.88.0/24 to any block drop in inet from 192.168.88.51 to any pass in inet proto tcp from any to any port = ssh flags S/SA keep state
Crear la jail www y asignarle la dirección IP 10.10.10.2
bastille create www 13.1-RELEASE 10.10.10.2 Valid: (10.10.10.2). ... Creating a thinjail...
Listar las jails
solaris: # bastille list JID IP Address Hostname Path www 10.10.10.2 www /usr/local/bastille/jails/www/root
Entrar en la jail www para ver su dirección IP
bastille console www [www]: root@www:~ # root@www:~ # uname -mrs FreeBSD 13.1-RELEASE-p6 amd64
Ejecutar ifconfig
Crear un usuario no privilegiado para Habilitar conexiones SSH desde el host
Entrar en la jail
bastille console www root@www:~ # adduser ...SSH Secure Shell
Salir de la jail
root@www:~ # exit logout
Habilitar e iniciar el servicio SSH en la jail
bastille sysrc www sshd_enable=YES bastille service www sshd start
Establecer el Port 23 y la ListenAddress 10.10.10.2 en el archivo de configuración /etc/ssh/sshd_config
Port 23 ListenAddress 10.10.10.2
Reiniciar el servicio
service sshd restart
Se puede saber si el socket está a la escucha ejecutando
bastille cmd www sockstat -4
[www]: USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS root sshd 55610 3 tcp4 10.10.10.2:23 *:* [www]: 0
También podemos entrar en la jail y lanzar el comando nc localhost 23
bastille console www root@www:~ # nc localhost 23 SSH-2.0-OpenSSH_8.8 FreeBSD-20211221
SSH le permite generar una huella digital de clave, que es una representación mucho más corta de una clave. No puedes encriptar el tráfico o negociar con la huella dactilar. Para generar una huella de clave pública, introduzca el comando ssh-keygen -lf keyfile.pub.
root@www:~ # ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
Salir de la jail
root@www:~ # exit logout
En el host agregar al archivo .ssh/config los datos de conexión
carlos@solaris:~ cat .ssh/config
Host www
HostName 10.10.10.2
User carlos
Port 23
AddressFamily inet
BindInterface em0
IdentityFile ~/.ssh/id_rsa
CASignatureAlgorithms ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ssh-ed25519@openssh.com,sk-ecdsa-sha2-nistp256@openssh.com,rsa-sha2-512,rsa-sha2-256
Ciphers chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
CheckHostIP yes
Entrar a la jail www a través de SSH
carlos@solaris:~/.ssh % ssh www
The authenticity of host '[10.10.10.2]:23 ([10.10.10.2]:23)' can't be established.
ED25519 key fingerprint is SHA256:KEnjnUTz7FPyq2c+ZcEzKvu+s5diszqxff+DmFJ+0sI.
No matching host key fingerprint found in DNS.
This host key is known by the following other names/addresses:
~/.ssh/known_hosts:45: www
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[10.10.10.2]:23' (ED25519) to the list of known hosts.
Dentro de la jail www
carlos@www:~ $
Cambiar al usuario root
carlos@www:~ $ su root@www: #
Instalar wget para comprobar que tenemos acceso a Internet
pkg install wget The package management tool is not yet installed on your system. Do you want to fetch and install it now? [y/N]: y
En este punto tenemos la jail instalada y con conexion a Internet.
Detener la jail
bastille stop www
Iniciar la jail
bastille start www [www]: www: created
Archivos de configuracion de Bastille jails
ls /usr/local/bastille/jails/www fstab jail.conf root
Archivo jails.conf de bastille
# cat /usr/local/bastille/jails.conf
www {
devfs_ruleset = 4;
enforce_statfs = 2;
exec.clean;
exec.consolelog = /var/log/bastille/www_console.log;
exec.start = '/bin/sh /etc/rc';
exec.stop = '/bin/sh /etc/rc.shutdown';
host.hostname = www;
mount.devfs;
mount.fstab = /usr/local/bastille/jails/www/fstab;
path = /usr/local/bastille/jails/www/root;
securelevel = 2;
interface = bastille0;
ip4.addr = 10.10.10.2;
ip6 = disable;
}
FreeBSD es genial!.

