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
2.- Instalar Apache MySQL PHP
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 -sr
scrub 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!.