Ubuntu

Cómo instalar y configurar Fail2ban en Ubuntu

Tutorial práctico para instalar Fail2ban en Ubuntu, configurar jails (ej. SSH), ajustar banaction (nftables/ufw), comprobar funcionamiento y resolver problemas comunes.

7 min aprox. alext0918
TecnoSender Guía técnica
7 min aprox. Lectura

Fail2ban es una herramienta en Python que monitoriza registros y aplica bloqueos automáticos contra IPs que realizan intentos repetidos de acceso indebido. En esta guía práctica aprenderás a instalar y configurar fail2ban en Ubuntu, proteger el servicio SSH con un jail real, elegir la acción de baneo adecuada (nftables/iptables/ufw), comprobar que funciona y resolver problemas comunes.

Requisitos previos y compatibilidad

Necesitas un servidor Ubuntu con conexión a Internet y privilegios sudo. Esta guía cubre Ubuntu 22.04 y 24.04 (paquetes oficiales). En Ubuntu actuales el paquete está disponible en los repositorios y la versión empaquetada y valores por defecto pueden variar entre releases; en Ubuntu 24.04 el paquete se distribuye con ajustes para nftables y lectura por systemd en el fichero /etc/fail2ban/jail.d/defaults-debian.conf. (packages.ubuntu.com

Instalación rápida

sudo apt update
sudo apt install fail2ban
# recomendable si quieres que fail2ban lea el journal de systemd
sudo apt install python3-systemd
sudo systemctl enable --now fail2ban

Instalar desde los repos oficiales es la forma soportada y suficiente en la mayoría de escenarios. Si usas python3-systemd facilitas al servicio la lectura del journal (útil en distribuciones recientes donde muchos logs van al journal en lugar de a ficheros). (fail2ban.dev

Comprobar el servicio y comandos básicos

Tras instalar, comprueba el servicio y el estado de los jails con:

sudo systemctl status fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshd

Advertencia: las acciones de baneo pueden bloquearte si pruebas desde la misma IP que quieres banear. Para pruebas, usa otra máquina o banea/desbanear manualmente con fail2ban-client.

Estructura de configuración: .conf vs .local y /etc/fail2ban/jail.d/

No edites los archivos *.conf provistos por el paquete; en su lugar crea overrides en /etc/fail2ban/jail.local o mejor en ficheros dentro de /etc/fail2ban/jail.d/ (uno por servicio). El paquete de Ubuntu instala un fichero /etc/fail2ban/jail.d/defaults-debian.conf con valores por defecto (por ejemplo, el jail de sshd activado en algunas releases). Esto facilita upgrades sin perder tus ajustes. (fail2ban.dev

Configurar un jail práctico: proteger SSH (paso a paso)

  1. Crear un fichero específico para SSH: sudo nano /etc/fail2ban/jail.d/sshd.local.
  2. Pegar una configuración mínima (ejemplo):
    [sshd]
    enabled = true
    port    = ssh
    filter  = sshd
    logpath = /var/log/auth.log
    maxretry = 5
    findtime = 600
    bantime = 3600
    # whitelist = 192.0.2.0/24  # sustituir por tu red de gestión
    
  3. Guardar y reiniciar fail2ban: sudo systemctl restart fail2ban.
  4. Verificar: sudo fail2ban-client status sshd debería mostrar el jail activo y la lista de IPs baneadas (si las hay).

Explicación de parámetros clave: maxretry es el número de intentos fallidos permitidos; findtime es la ventana en segundos donde se cuentan esos intentos; bantime es la duración del baneo en segundos (puedes usar sufijos como 1h). Ajusta según el riesgo y la tolerancia de tu entorno.

Banaction: iptables vs nftables vs ufw — cómo elegir

La acción que aplica el baneo (banaction) depende del firewall del sistema y de la versión de fail2ban. En Ubuntu 24.04 el paquete suele usar banaction = nftables por defecto y fail2ban crea una tabla propia (por ejemplo inet f2b-table) con sets por jail, lo que es eficiente y evita interferir con UFW/iptables. Si tu sistema usa UFW y prefieres integrarlo con las reglas existentes puedes elegir banaction = ufw. En sistemas más antiguos o si necesitas reglas legacy, existen acciones basadas en iptables. Elige nftables si tu Ubuntu usa nft por defecto; usa ufw si gestionas el cortafuegos mediante UFW y quieres que los bans aparezcan como reglas UFW. (fail2ban.dev

Ejemplo: forzar UFw como banaction

[DEFAULT]
banaction = ufw

Tras cambiar la acción reinicia fail2ban y verifica que las reglas/locks aparecen en sudo ufw status o con sudo nft list ruleset según corresponda.

Gestión de bans: listar, banear y desbanear

sudo fail2ban-client status            # lista jails
sudo fail2ban-client status sshd       # detalles de sshd (IPs baneadas)
# banear una IP manualmente en el jail sshd
sudo fail2ban-client set sshd banip 198.51.100.23
# desbanear
sudo fail2ban-client set sshd unbanip 198.51.100.23

Si usas nftables puedes inspeccionar con sudo nft list set inet f2b-table sshd (el nombre puede variar). Para ufw, las entradas aparecerán en su listado. Usa estos comandos para recuperar accesos bloqueados por error.

Reglas avanzadas y recomendaciones

  • Whitelist: añade tus redes de gestión (oficina, VPN) a ignoreip = 127.0.0.1/8 203.0.113.0/24.
  • Recidive: habilita un jail recidive para detectar repetidores a largo plazo (lee /etc/fail2ban/jail.conf o crea un fichero en jail.d).
  • Bantime adaptativo: considera bantime creciente (por ejemplo 1h, 1d, 1w) en combinación con recidive para ataques persistentes.
  • Limita el número de reglas por firewall: si tu servidor recibe muchos intentos, nftables con sets es más eficiente que añadir miles de reglas iptables.

Monitorización y logs; troubleshooting

Fail2ban escribe su propio log en /var/log/fail2ban.log y, dependiendo del backend, lee logs de servicios desde ficheros (por ejemplo /var/log/auth.log) o desde el journal. En Ubuntu recientes la configuración del paquete tiende a usar backend = systemd para leer mensajes desde journalctl; si haces esto instala python3-systemd para evitar que fail2ban no encuentre entradas por usar solo journal. Para ver logs de fail2ban usa:

sudo tail -f /var/log/fail2ban.log
sudo journalctl -u fail2ban -f
sudo journalctl -t sshd --since "5 minutes ago"

Errores comunes y soluciones:

  • Fail2ban no está baneando: comprueba la action (nftables/ufw), que el filtro detecte los patrones en los logs y que el backend (file vs systemd) esté correctamente configurado. Reinicia fail2ban tras cambios en filtros o acciones. (fail2ban.dev
  • Mis reglas desaparecen tras reiniciar UFW o nftables: algunos reinicios flushean las tablas; configura fail2ban para reaplicar reglas o usa una tabla independiente (nftables) creada por fail2ban para minimizar este problema. (fail2ban.dev
  • Fail2ban no ve logs en sistemas que usan solo journal: instala python3-systemd y usa backend = systemd o logtarget = SYSTEMD-JOURNAL cuando corresponda. (fail2ban.dev

Buenas prácticas y medidas complementarias

  • Usa autenticación por claves SSH y deshabilita el acceso por contraseña cuando sea posible. Ver guía práctica sobre claves SSH para reducir intentos: Cómo configurar acceso SSH con claves públicas en Ubuntu.
  • Considera cambiar el puerto por defecto y combinar con UFW para reducir ruido: Cómo cambiar el puerto SSH en Ubuntu y ajustar UFW.
  • Si usas UFW como firewall principal, integra fail2ban usando banaction = ufw en lugar de iptables/nft si prefieres que los bans se vean mediante ufw status.
  • Realiza pruebas desde otra IP para evitar bloquearte y documenta tus whitelist.

Resumen rápido y checklist de despliegue

  • Instalar: sudo apt install fail2ban y opcionalmente python3-systemd. (fail2ban.dev
  • No tocar ficheros .conf de stock; usar /etc/fail2ban/jail.d/.
  • Configurar [sshd], ajustar maxretry, findtime, bantime, y ignoreip.
  • Elegir banaction acorde a tu firewall (nftables por defecto en Ubuntu 24.04; ufw si usas UFW). (fail2ban.dev
  • Comprobar con systemctl status fail2ban y fail2ban-client status.

Preguntas frecuentes

  1. ¿Puedo usar fail2ban con UFW y nftables a la vez? Sí: fail2ban puede usar diferentes acciones. En Ubuntu 24.04 el paquete usa nftables por defecto; si quieres integración directa con UFW cambia la action a ufw. Ten en cuenta que recargar UFW puede afectar reglas externas.
  2. ¿Fail2ban protege contra ataques distribuidos? No completamente: fail2ban es eficaz contra intentos repetidos desde la misma IP, pero ataques distribuidos (muchas IPs diferentes) requieren protección adicional (WAF, rate limiting en la infraestructura, autenticación fuerte y monitoreo).
  3. ¿Puedo bloquear rangos IP grandes? Sí, pero hazlo con precaución — usar sets de nftables o reglas aggregate es más escalable que añadir muchas reglas individuales.

Si necesitas que adapte los ejemplos a tu versión exacta de Ubuntu (p. ej. 22.04 vs 24.04) y al firewall que usas, indícame la salida de lsb_release -a y sudo nft --version o sudo ufw status verbose y preparo los comandos concretos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *