UA-51298262-10 Skip to main content
Seguridad

Fail2Ban en Linux: instalación y configuración anti fuerza bruta

By septiembre 24, 2026No Comments
Fail2Ban en Linux: instalación y configuración anti fuerza bruta

Si tienes un servidor Linux expuesto a Internet, instalar Fail2Ban es probablemente la medida de seguridad más rentable que vas a aplicar hoy: cinco minutos de trabajo y una diferencia enorme. Porque un servidor con SSH abierto recibe, en cuestión de minutos, decenas de intentos de acceso por fuerza bruta automatizada. No es paranoia. Es lo normal. Fail2Ban se encarga de monitorizar los logs del sistema, detectar patrones de ataque y bloquear las IPs ofensivas aplicando reglas de firewall. Aquí veremos cómo instalarlo en Ubuntu, Debian y CentOS, y cómo dejarlo bien configurado desde el primer minuto.

Qué es Fail2Ban y por qué necesitas proteger tu servidor

Fail2Ban es un framework escrito en Python que analiza los archivos de registro del sistema buscando patrones de actividad maliciosa: logins fallidos, escaneos de puertos, abusos en servicios web… Cuando una IP supera cierto número de intentos dentro de un intervalo de tiempo, Fail2Ban ejecuta una acción, normalmente un baneo mediante iptables o nftables.

Sin esta protección, un servidor con SSH expuesto en el puerto 22 está bajo ataque constante. Herramientas automatizadas prueban miles de combinaciones de usuario y contraseña cada hora. Si además tienes una contraseña débil, o el usuario root con acceso directo por SSH, el riesgo de que te comprometan el sistema es muy real.

Eso sí, Fail2Ban no sustituye a un firewall ni a las buenas prácticas (claves SSH, desactivar el login de root). Funciona como una capa adicional que reduce drásticamente la superficie de ataque y el ruido en tus logs. Lo que te aporta:

  • Bloqueo automático y temporal de las IPs atacantes, sin que tengas que tocar nada.
  • Protección de múltiples servicios: SSH, Apache, Nginx, Postfix, Dovecot, vsftpd, WordPress (vía filtros personalizados).
  • Configuración flexible: tú decides cuánto dura un baneo, cuántos intentos se permiten y qué acción se ejecuta.
  • Consumo mínimo de recursos.

Cómo instalar Fail2Ban en Ubuntu, Debian y CentOS

El proceso cambia un poco según la distribución. En Ubuntu y Debian el paquete está en los repositorios oficiales, así que es casi inmediato:

Ubuntu / Debian:

  1. Actualiza los repositorios: sudo apt update
  2. Instala el paquete: sudo apt install fail2ban
  3. Verifica el estado del servicio: sudo systemctl status fail2ban

Nada más instalarlo, el servicio arranca solo con una configuración por defecto que ya incluye la jail de SSH. Es decir, protección básica activa desde el minuto cero.

CentOS / RHEL / AlmaLinux / Rocky Linux:

Aquí el camino es algo distinto, porque Fail2Ban no viene en los repositorios base y necesitas EPEL:

  1. Habilita EPEL: sudo dnf install epel-release
  2. Instala Fail2Ban: sudo dnf install fail2ban
  3. Habilita e inicia el servicio: sudo systemctl enable –now fail2ban

En CentOS comprueba además que el firewall (firewalld) esté activo, ya que Fail2Ban lo usará para aplicar los baneos. Y para confirmar que todo va bien, lanza fail2ban-client version y mira la versión que te devuelve.

Configuración básica de Fail2Ban: jails, filtros y jail.local

Toda la configuración gira en torno a tres conceptos: jails, filtros y acciones. Vamos por partes.

Jails

Una jail (jaula, en español) define qué servicio quieres proteger, qué log supervisar, qué filtro aplicar y bajo qué condiciones se banea. Cada jail combina un filtro con una acción y una serie de parámetros, como maxretry (intentos permitidos) o findtime (la ventana de tiempo en la que se cuentan esos intentos).

Filtros

Los filtros son expresiones regulares que identifican las líneas sospechosas en los logs. Fail2Ban trae de serie un buen puñado en /etc/fail2ban/filter.d/ (sshd.conf, nginx-limit-req.conf, apache-auth.conf, entre otros), de modo que rara vez tendrás que escribir uno desde cero.

El archivo jail.local

Un consejo antes de empezar: no edites jail.conf directamente. Las actualizaciones del paquete pueden sobrescribirlo y perderías tus cambios. Lo correcto es crear /etc/fail2ban/jail.local. Una configuración razonable para empezar sería esta:

[DEFAULT] bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 TU.IP.DE.OFICINA

[sshd] enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3

Fíjate en ignoreip: pon ahí tu IP de oficina, o te bloquearás a ti mismo la primera vez que falles la contraseña (me ha pasado, y no es gracia). Después de guardar, aplica los cambios con sudo systemctl restart fail2ban y revisa qué jails están activas con sudo fail2ban-client status. Si quieres el detalle de una jail concreta, por ejemplo sudo fail2ban-client status sshd, verás ahí las IPs baneadas en este momento.

Con esto ya tienes Fail2Ban funcionando y bloqueando ataques de fuerza bruta. En la siguiente parte del artículo entraremos en la configuración avanzada: jails personalizadas para WordPress, notificaciones por correo y ajustes de bantime progresivo.

Proteger SSH y servicios adicionales con Fail2Ban

El jail de sshd viene activado por defecto en la mayoría de instalaciones. Vale. Pero tal como viene, es bastante laxo. Merece la pena endurecerlo. En /etc/fail2ban/jail.local puedes definir parámetros más agresivos para SSH:

  1. maxretry = 3: bloquea tras tres intentos fallidos en lugar de cinco.
  2. findtime = 600: ventana de diez minutos para contar los fallos.
  3. bantime = 3600: una hora de bloqueo inicial, ampliable con banetime progresivo.
  4. ignoreip = 127.0.0.1/8 TU.IP.FIJA: evita auto-baneos desde tu conexión habitual.

Este último punto no es un detalle menor. Me ha pasado más de una vez ver a alguien bloquearse a sí mismo tras equivocarse tres veces con la contraseña… desde su propia casa. Configura ignoreip antes de tocar nada más.

Para otros servicios, Fail2Ban trae filtros preconfigurados listos para activar. Los más habituales:

  • nginx-http-auth y apache-auth: bloquea fallos de autenticación básica en el servidor web.
  • nginx-limit-req: útil si usas limit_req en Nginx contra abusos de peticiones.
  • postfix y dovecot: protege tu servidor de correo de intentos de autenticación fraudulentos.
  • recidive: jail especial que revisa el propio log de Fail2Ban y banea de forma prolongada (días, incluso semanas) a las IPs reincidentes. Muy recomendable.

¿Y WordPress? Si ya montaste la jail personalizada de la parte anterior, combinarla con estos filtros del servidor web te deja bien cubierto: ataca la aplicación y te banea la aplicación; ataca el servidor y te responde el servidor.

Comandos útiles para monitorizar IPs baneadas y registros

El día a día con Fail2Ban se gestiona casi todo desde fail2ban-client. Estos son los comandos que acabarás usando una y otra vez:

  • fail2ban-client status: lista todas las jails activas.
  • fail2ban-client status sshd: muestra IPs baneadas y totales de la jail.
  • fail2ban-client set sshd unbanip 203.0.113.45: desbanea una IP concreta (sustituye la jail según necesites).
  • fail2ban-client set sshd banip 198.51.100.20: banea manualmente una IP sospechosa.
  • fail2ban-client get sshd bantime: consulta el tiempo de baneo vigente.

Para ver el registro de actividad en tiempo real:

tail -f /var/log/fail2ban.log

Ahí aparece cada detección y baneo con su fecha, el filtro implicado y la acción ejecutada. Ideal para comprobar que tus jails personalizadas capturan lo que se supone que deben capturar. Déjalo abierto un rato en una terminal. Aprenderás más en diez minutos mirando ese log que leyendo tres tutoriales.

Tip: si desbaneas una IP y vuelve a ser bloqueada de inmediato, revisa que no esté en ignoreip y comprueba con fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf si el filtro está haciendo matching correcto.

Buenas prácticas y conclusión para securizar tu servidor con Fail2Ban

Fail2Ban es una capa de defensa excelente. Pero sola no basta; rinde mucho más combinada con otras medidas. Antes de fiarte únicamente del baneo, aplica estos refuerzos:

  • Autenticación por claves SSH y desactiva PasswordAuthentication en sshd_config: sin contraseñas que adivinar, la fuerza bruta pierde todo el sentido.
  • Cambia el puerto SSH estándar para reducir el ruido de los bots automatizados.
  • Mantén Fail2Ban actualizado junto al resto del sistema; los filtros evolucionan con los patrones de ataque.
  • Revisa los logs periódicamente o configura las notificaciones por correo vistas anteriormente para detectar campañas masivas.
  • No pongas bantimes eternos sin control: pueden llenarte la tabla de iptables en servidores con mucho tráfico malicioso. Mejor banetime progresivo y la jail recidive.

Lo cierto es que instalar Fail2Ban tiene una de las mejores relaciones esfuerzo-beneficio que existen en la administración de servidores Linux. Poca configuración, mucho resultado. Con las jails por defecto, las personalizadas para WordPress y una monitorización regular, tendrás un sistema de defensa activa que bloquea a los atacantes antes de que logren su objetivo. Y si prefieres delegar la configuración o el mantenimiento de tu servidor, en RedServicio (redservicio.net) encontrarás ayuda profesional para cualquier problema técnico de administración y seguridad.