Cómo proteger FreeBSD
Introducción
Bienvenido a mi guía para reforzar la seguridad de FreeBSD, actualizada para FreeBSD 15.1. FreeBSD ya es de por sí conservador y seguro tal y como viene de fábrica, pero un sistema conectado a Internet se merece algo más. Esta guía es un tutorial práctico de defensa en profundidad que puedes aplicar a una instalación nueva de la versión 15.1: parches, cuentas, SSH, el cortafuegos, el kernel, reducción de la superficie de ataque, el sistema de archivos y la supervisión. Aplica lo que se ajuste a tu modelo de amenazas; no necesitas todos los elementos en cada máquina. A lo largo de la guía, el símbolo # significa que debes ejecutar el comando como root.
1. Mantén el sistema actualizado
Nada de lo que viene a continuación importa si el equipo ejecuta código con vulnerabilidades conocidas. Aplicar parches es la medida de seguridad más importante.
Sistema base: freebsd-update
En una versión RELEASE, descarga e instala los parches básicos de seguridad y las erratas:
# freebsd-update fetch install
Paquetes: pkg upgrade y pkg audit
Mantén los paquetes actualizados y, lo que es más importante, comprueba si tienen vulnerabilidades en la base de datos VuXML. El antiguo portaudit ya no existe; ahora está integrado en pkg:
# pkg update
# pkg upgrade
# pkg audit -F
pkg audit -F actualiza la base de datos de vulnerabilidades e informa de cualquier paquete instalado que tenga un problema conocido.
Automatízalo
Deja que el sistema te avise cuando necesite atención. Añade una comprobación diaria de base-update que solo envíe un correo a root cuando haya parches pendientes:
# echo '@daily root freebsd-update cron' >> /etc/crontab
Y haz que la ejecución diaria de periodic revise tus paquetes, a través de /etc/periodic.conf:
security_status_pkgaudit_enable="YES"
2. Cuentas y autenticación
Hash de contraseñas y política (login.conf)
El FreeBSD moderno ya aplica el hash SHA-512 a las contraseñas por defecto; el antiguo MD5 ya es cosa del pasado. Confírmalo (o cambia a Blowfish con blf) en la clase default de /etc/login.conf, y establece una longitud mínima razonable:
:passwd_format=sha512:\
:minpasswordlen=12:\
Después de editarlo, vuelve a generar la base de datos de hash:
# cap_mkdb /etc/login.conf
Inicio de sesión como root y escalada de privilegios
No compartas la contraseña de root ni inicies sesión como root a través de la red. Crea un usuario administrador, añádelo al grupo wheel y eleva sus privilegios con una herramienta que registre y limite lo que concede. doas es pequeña y fácil de auditar:
# pkg install doas
# echo 'permit persist :wheel' > /usr/local/etc/doas.conf
(security/sudo es la alternativa más pesada y con más opciones de configuración). En la siguiente sección bloquearemos el inicio de sesión directo como root por SSH.
3. Fortalece SSH (OpenSSH)
SSH suele ser la única puerta de acceso al servidor, así que asegúrate de que sea segura.
sshd_config
En /etc/ssh/sshd_config, da prioridad a la autenticación basada en claves y desactiva las opciones poco seguras:
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
AllowUsers youradmin
Instala tu clave pública (~/.ssh/authorized_keys) y prueba el inicio de sesión con clave antes de desactivar las contraseñas, o te quedarás fuera. A continuación, vuelve a cargar el servicio:
# service sshd reload
Restringir AllowUsers (o AllowGroups wheel) exactamente a quienes necesitan acceso al shell es una de las líneas más importantes del archivo.
Protección contra ataques de fuerza bruta con blacklistd
FreeBSD incluye blacklistd, que detecta los fallos de autenticación repetidos y le indica al cortafuegos que rechace la fuente. Actívalo:
# sysrc blacklistd_enable=YES
# service blacklistd start
Añade UseBlacklist yes a sshd_config, recarga sshd e integra blacklistd en pf (más abajo).
4. Cortafuegos con pf
FreeBSD ha heredado «pf» de OpenBSD, un filtro de paquetes limpio y potente. Una buena configuración por defecto es rechazar todo el tráfico entrante y abrir solo lo que realmente sirvas; normalmente basta con filtrar en la interfaz externa.
Un conjunto de reglas de denegación por defecto
Un archivo /etc/pf.conf mínimo para un servidor que ofrece SSH y HTTPS:
ext_if = "vtnet0" # your external interface
set skip on lo
scrub in all
# blacklistd inserts its block rules here
anchor "blacklistd/*" in on $ext_if
block in all
pass out quick keep state
# only the services you actually offer
pass in on $ext_if proto tcp to ($ext_if) port { 22 443 } keep state
# allow ping
pass in on $ext_if inet proto icmp icmp-type echoreq
Comprueba la sintaxis y, a continuación, actívalo e inícialo:
# pfctl -nf /etc/pf.conf
# sysrc pf_enable=YES
# service pf start
Integrar blacklistd en pf
La línea anchor "blacklistd/*" es donde blacklistd inserta sus bloqueos, así que cualquier ataque de fuerza bruta a SSH que active blacklistd quedará bloqueado automáticamente en el cortafuegos. El archivo predeterminado /etc/blacklistd.conf ya incluye ssh.
5. Fortalecimiento del kernel y de sysctl
Sysctls útiles
Añade esto a /etc/sysctl.conf (se aplican al arrancar; configúralos ahora con sysctl <nombre>=<valor>):
# hide other users' processes
security.bsd.see_other_uids=0
security.bsd.see_other_gids=0
# don't let unprivileged users debug other processes
security.bsd.unprivileged_proc_debug=0
# stricter hardlink handling in sticky dirs
security.bsd.hardlink_check_uid=1
security.bsd.hardlink_check_gid=1
# stack guard page
security.bsd.stack_guard_page=1
# randomize the IP ID field
net.inet.ip.random_id=1
ASLR ya está activado
Buenas noticias: la aleatorización de la disposición del espacio de direcciones (ASLR) está activada por defecto en FreeBSD base (desde la versión 13.0), así que ya no necesitas un kernel de terceros solo para eso. Compruébalo:
# sysctl kern.elf64.aslr.enable kern.elf64.aslr.pie_enable
kern.elf64.aslr.enable: 1
kern.elf64.aslr.pie_enable: 1
securelevel (ten en cuenta las ventajas y desventajas)
kern.securelevel es un mecanismo unidireccional: hace que los indicadores de los archivos schg/sappnd sean inmutables, bloquea la carga de módulos del kernel y, en el nivel 3, congela tu conjunto de reglas de firewall. Es muy seguro, pero supone una carga operativa: necesitarás el modo de usuario único para modificar los archivos protegidos, y a algunos programas no les gusta. Actívalo deliberadamente a través de /etc/rc.conf:
# sysrc kern_securelevel_enable=YES
# sysrc kern_securelevel=2
Pásate al nivel 3 solo cuando tu cortafuegos y los archivos del sistema estén estables.
6. Minimiza la superficie de ataque
Comprueba qué servicios están a la escucha
No puedes proteger lo que no conoces. Enumera los sockets que están a la escucha:
# sockstat -4l
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
root sshd 803 4 tcp4 *:22 *:*
unbound unbound 7620 6 tcp4 127.0.0.1:53 *:*
Usa -6l para IPv6 o -l para ambos. No se puede acceder desde la red a nada que esté en 127.0.0.1; sí se puede acceder a todo lo que esté en * (dependiendo de tu cortafuegos). Cada servicio en escucha es una superficie de ataque: cierra los que no necesites.
Desactiva lo que no necesites
Una instalación por defecto ya es bastante ligera. Desactiva los elementos habituales que no estés usando:
# sysrc sendmail_enable=NONE
# sysrc inetd_enable=NO
(FreeBSD ha ido eliminando sendmail del sistema base, así que es posible que una máquina 15.1 limpia ni siquiera lo incluya).
Aísla los servicios en «jails»
La característica de seguridad más destacada de FreeBSD es la jail, un contenedor ligero a nivel del sistema operativo. Ejecuta cada servicio conectado a la red (web, correo, DNS) en su propia jail, para que, si se produce una brecha de seguridad, esta quede confinada a esa jail en lugar de afectar a todo el servidor. Herramientas como bastille (pkg install bastille) te lo ponen fácil. Desde el punto de vista arquitectónico, esta es la medida más importante de la lista.
7. Fortalecimiento del sistema de archivos
Opciones de montaje
Otorga a cada sistema de archivos solo los privilegios que necesite. Un /tmp y un /var independientes pueden llevar las opciones nosuid/noexec, para que un atacante no pueda colocar y ejecutar un binario allí. En /etc/fstab:
/dev/... /tmp ufs rw,nosuid,noexec,nodev 2 2
En ZFS, configura los equivalentes con zfs set exec=off setuid=off <dataset>. Pruébalo primero: algunos pasos de la compilación de paquetes se ejecutan legítimamente desde /tmp.
Comprobaciones de seguridad periódicas
La ejecución diaria de «seguridad periódica» informa de cambios en setuid, intentos fallidos de inicio de sesión y mucho más. Activa las opciones que quieras en /etc/periodic.conf:
daily_clean_tmps_enable="YES"
security_status_pkgaudit_enable="YES"
8. Registro, auditoría y supervisión
La ejecución periódica de seguridad
Por defecto, FreeBSD envía por correo a root un resumen diario de seguridad; léelo. En él se señalan los nuevos binarios con setuid, las anomalías en los mensajes del kernel, los fallos de inicio de sesión y mucho más: una supervisión sencilla y muy útil.
Auditoría con auditd (BSM)
Para un registro forense de verdad, FreeBSD incluye el marco de auditoría OpenBSM. Actívalo para registrar eventos relevantes para la seguridad (inicios de sesión, uso de privilegios, acceso a archivos) en un registro estructurado:
# sysrc auditd_enable=YES
# service auditd start
Ajusta lo que se registra en /etc/security/audit_control y revísalo con praudit y auditreduce.
Escanea con Lynis
Para obtener una segunda opinión automatizada, ejecuta Lynis, que comprueba docenas de elementos de refuerzo de seguridad y te ofrece una lista priorizada:
# pkg install lynis
# lynis audit system
9. Un paso más allá
Marco MAC y Capsicum
Cuando los permisos básicos de Unix se te quedan pequeños, FreeBSD te ofrece el marco MAC —políticas de control de acceso obligatorio (MAC) cargables, como mac_portacl y mac_bsdextended— y Capsicum, el entorno aislado en modo de capacidades integrado en muchas utilidades básicas. Ambos confinan los procesos mucho más allá de los usuarios y los grupos.
HardenedBSD
HardenedBSD es una derivación de FreeBSD centrada en la mitigación de exploits. Ahora que el FreeBSD base incluye ASLR, el valor de HardenedBSD reside en las medidas de mitigación adicionales que aporta: un ASLR más potente, protecciones al estilo PaX, SEGVGUARD y el trabajo en curso con CFI. Si tu modelo de amenazas justifica una mitigación agresiva, merece la pena evaluarlo, y el proyecto siempre da la bienvenida a probadores.
Comentarios
Te animamos a que nos des tu opinión. Dime qué falta, qué añadirías y qué te ha resultado útil: esta guía mejora cada vez que alguien contribuye.



