Linux13 de julio de 2026 3 vistas

Cómo instalar y configurar Fail2ban en 2026

Cómo instalar y configurar Fail2ban en 2026

¿Está buscando cómo instalar Fail2ban para proteger SSH en un VPS Linux? Fail2ban supervisa los registros del servidor, detecta los intentos de conexión fallidos repetidos y le pide al cortafuegos que bloquee temporalmente la dirección IP responsable.

Este tutorial explica paso a paso cómo instalar y configurar Fail2ban en Debian 12, Debian 13 y Ubuntu 24.04. También aprenderá a verificar su funcionamiento, mostrar las IPs bloqueadas, desbloquear una dirección, crear una lista blanca y proteger Nginx.

Para instalar rápidamente Fail2ban en Debian o Ubuntu:

sudo apt update
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status

La configuración completa consiste luego en:

  1. crear /etc/fail2ban/jail.local ;
  2. activar la cárcel sshd ;
  3. definir maxretry, findtime y bantime ;
  4. probar la configuración con fail2ban-client -t ;
  5. verificar los bloqueos con fail2ban-client status sshd.

Las secciones siguientes detallan cada paso y las particularidades de systemd en las versiones recientes de Debian.

Antes de comenzar: evite bloquearse

Una mala configuración de Fail2ban puede cortar su propio acceso SSH. Antes de cualquier modificación:

  • abra la consola web o noVNC de su VPS ;
  • mantenga su sesión SSH actual abierta ;
  • anote su dirección IP pública si es fija ;
  • verifique el puerto realmente utilizado por SSH ;
  • no pruebe el bloqueo desde su único medio de acceso al servidor.

Para conocer el puerto SSH configurado:

sudo sshd -T | grep '^port '

Si el comando devuelve por ejemplo port 2222, deberá indicar port = 2222 en la cárcel SSH en lugar de port = ssh.

¿Cómo funciona Fail2ban?

Fail2ban se basa en tres elementos:

  1. un filtro reconoce los fallos de autenticación en los registros gracias a expresiones regulares ;
  2. una cárcel cuenta los fallos provenientes de cada dirección IP ;
  3. una acción aplica el bloqueo con el cortafuegos disponible, por ejemplo nftables o iptables.

Imagen

Tres parámetros controlan principalmente el desencadenamiento de un bloqueo:

  • maxretry : número de fallos permitidos antes del bloqueo ;
  • findtime : período durante el cual se contabilizan estos fallos ;
  • bantime : duración inicial del bloqueo.

Con la configuración maxretry = 5, findtime = 10m y bantime = 1h, una dirección que produzca cinco fallos en diez minutos será bloqueada durante una hora.

ImagenFail2ban no reemplaza la autenticación SSH por clave, un cortafuegos correctamente configurado o las actualizaciones de seguridad. Es una capa adicional destinada a reducir los intentos repetidos.

¿Cómo instalar Fail2ban en Debian 12/13 o Ubuntu 24.04?

Instale el paquete proporcionado por su distribución:

sudo apt update
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban

Luego, muestre la versión instalada y verifique que el servicio responda:

fail2ban-client --version
sudo fail2ban-client ping
sudo fail2ban-client status

Una instalación funcional debe devolver Server replied: pong.

En Debian y Ubuntu, el paquete generalmente activa la cárcel sshd. Sin embargo, no suponga que SSH ya está protegido: controle explícitamente su estado.

sudo fail2ban-client status sshd

Si la cárcel no existe, si el servicio se niega a iniciarse o si no se encuentra ningún registro, continúe con la configuración a continuación.

Caso particular de Debian 12 y Debian 13

En una instalación nueva de Debian 12 o 13, /var/log/auth.log puede estar ausente, ya que rsyslog ya no está instalado por defecto. Los eventos SSH se conservan en el registro de systemd. En un servidor actualizado o en el que se haya instalado rsyslog, el archivo puede seguir existiendo.

Verifique la fuente disponible:

test -f /var/log/auth.log && echo "auth.log presente" || echo "Registros de systemd probablemente utilizados"
sudo journalctl -u ssh --since "10 minutes ago" --no-pager

Si Fail2ban muestra el error Have not found any log file for sshd jail, utilice el backend systemd presentado en la siguiente sección.

¿Cómo configurar Fail2ban para proteger SSH?

No modifique directamente /etc/fail2ban/jail.conf. Este archivo pertenece al paquete y puede cambiar durante una actualización. Coloque únicamente sus personalizaciones en /etc/fail2ban/jail.local o en un archivo .local bajo /etc/fail2ban/jail.d/.

El orden principal de carga es el siguiente:

  1. jail.conf ;
  2. jail.d/*.conf ;
  3. jail.local ;
  4. jail.d/*.local.

Los parámetros leídos al final reemplazan los valores anteriores.

Creé el archivo local:

sudo nano /etc/fail2ban/jail.local

A continuación, se presenta una base adaptada a un VPS Linux clásico que utiliza el registro de systemd:

[DEFAULT]
# Duración inicial del bloqueo
bantime = 1h

# Contar los fallos en un período de 10 minutos
findtime = 10m
maxretry = 5

# Aumentar la duración cuando una misma IP reincide
bantime.increment = true
bantime.factor = 1
bantime.maxtime = 1w

# Direcciones que nunca deben ser bloqueadas
ignoreip = 127.0.0.1/8 ::1

[sshd]
enabled = true
backend = systemd
port = ssh

Si SSH escucha en un puerto personalizado, reemplace port = ssh:

[sshd]
enabled = true
backend = systemd
port = 2222

Importante: con backend = systemd, no agregue un parámetro logpath en la cárcel. Fail2ban interroga directamente el registro de systemd.

¿Por qué usar bloqueos progresivos?

Con bantime.increment = true, Fail2ban conserva el historial de bloqueos en su base local y aumenta progresivamente su duración. Con los valores anteriores, las reincidencias pueden llevar a bloqueos de una hora, luego dos horas, cuatro horas, etc., sin exceder una semana.

Este mecanismo reduce el interés de los intentos repetidos mientras evita un bloqueo permanente provocado por un simple error humano. Sin embargo, su eficacia depende del comportamiento de los atacantes: un botnet que utiliza muchas direcciones diferentes no será detenido por el aumento del bloqueo de una sola IP.

¿Cómo verificar que Fail2ban funciona?

Pruebe siempre la carga de la configuración antes de aplicarla:

sudo fail2ban-client -t

Si no se devuelve ningún error, recargue Fail2ban y controle la cárcel SSH:

sudo fail2ban-client reload
sudo fail2ban-client status sshd
sudo journalctl -u fail2ban -n 50 --no-pager

La prueba fail2ban-client -t verifica la configuración, pero no prueba por sí sola que el filtro reconozca sus registros ni que el cortafuegos bloquee realmente las IP. Para probar el filtro SSH con systemd:

sudo fail2ban-regex --print-all-matched systemd-journal sshd

Si su servidor utiliza /var/log/auth.log:

sudo fail2ban-regex --print-all-matched /var/log/auth.log sshd

Realizar una prueba funcional sin perder el acceso

Utilice una segunda conexión a Internet, por ejemplo, el uso compartido de conexión de un teléfono, y provoque intencionalmente varios fallos de SSH. Mantenga su sesión de administración y la consola web abiertas.

Luego, controle el resultado:

sudo fail2ban-client status sshd
sudo fail2ban-client banned

Verifique también que el cortafuegos contenga una regla Fail2ban. Según su sistema:

sudo nft list ruleset | grep -iE 'f2b|fail2ban'
sudo iptables -S | grep -i f2b

Uno de estos comandos puede no devolver nada si el servidor utiliza únicamente el otro sistema de cortafuegos.

¿Cómo ver las IPs bloqueadas por Fail2ban?

Ver las cárceles activas

sudo fail2ban-client status

Ver las IPs bloqueadas por la cárcel SSH

sudo fail2ban-client status sshd

Ver todas las IPs bloqueadas

sudo fail2ban-client banned 

Imagen¿Cómo desbloquear una IP con Fail2ban?

Si su dirección ha sido bloqueada después de varios errores de contraseña, utilice la consola web del VPS o otra conexión autorizada para ejecutar los siguientes comandos.

Desbloquear una IP de una cárcel específica

sudo fail2ban-client set sshd unbanip 203.0.113.42

Desbloquear una IP de todas las cárceles

sudo fail2ban-client unban 203.0.113.42

Desbloquear todas las IPs

Este comando vacía los bloqueos de todas las cárceles. Úselo solo si es realmente necesario:

sudo fail2ban-client unban --all

Bloquear manualmente una IP

sudo fail2ban-client set sshd banip 198.51.100.17

¿Cómo agregar una IP a la lista blanca de Fail2ban?

El parámetro ignoreip contiene las direcciones que Fail2ban nunca debe bloquear. Acepta direcciones IPv4, IPv6, rangos CIDR y nombres DNS.

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 203.0.113.42 192.0.2.0/24

Luego, recargue la configuración:

sudo fail2ban-client -t
sudo fail2ban-client reload

No agregue su dirección personal a menos que sea fija y realmente controlada. Evite poner en la lista blanca un rango demasiado amplio perteneciente a un operador o a un VPN público: un atacante que utilice el mismo rango no podría ser bloqueado.

Para ignorar temporalmente una IP en la cárcel SSH:

sudo fail2ban-client set sshd addignoreip 203.0.113.42

Esta modificación se aplica en memoria y no es una configuración persistente. Para conservarla después de un reinicio o una recarga, agregue la dirección en un archivo .local.

¿Cómo proteger Nginx con Fail2ban?

Fail2ban proporciona varios filtros para Nginx. Dos cárceles son particularmente útiles:

  • nginx-http-auth, para los intentos repetidos de autenticación HTTP Basic ;
  • nginx-limit-req, para las solicitudes rechazadas por la limitación de tasa de Nginx.

Agregue las cárceles necesarias en /etc/fail2ban/jail.local:

[nginx-http-auth]
enabled = true
port = http,https

[nginx-limit-req]
enabled = true
port = http,https
maxretry = 10

La cárcel nginx-limit-req no crea la limitación de tasa por sí sola. Nginx debe ya utilizar las directivas limit_req_zone y limit_req, y los rechazos deben aparecer en su registro de errores.

Verifique la configuración de Nginx y pruebe el filtro antes de activar la cárcel:

sudo nginx -T | grep -E 'limit_req(_zone)?'
sudo fail2ban-regex /var/log/nginx/error.log nginx-limit-req
sudo nginx -t

Luego, recargue ambos servicios:

sudo systemctl reload nginx
sudo fail2ban-client -t
sudo fail2ban-client reload
sudo fail2ban-client status nginx-limit-req

Si Nginx se encuentra detrás de Cloudflare, un proxy inverso o un balanceador de carga, configure primero la restauración de la dirección IP real del visitante. De lo contrario, los registros pueden contener la dirección del proxy y Fail2ban podría bloquear este en lugar del cliente responsable.

Si su servidor web aún no está instalado, consulte nuestra guía para instalar Nginx y PHP-FPM en un VPS.

Para Windows, el principio equivalente se presenta en nuestra guía dedicada a las ataques de fuerza bruta RDP en un VPS Windows.

¿Por qué Fail2ban no funciona o no bloquea ninguna IP?

1. Verifique que el servicio esté funcionando

sudo systemctl --no-pager --full status fail2ban
sudo fail2ban-client ping
sudo journalctl -u fail2ban -n 100 --no-pager

2. Verifique que la cárcel esté activa

sudo fail2ban-client status
sudo fail2ban-client status sshd

3. Controle la fuente de los registros

sudo journalctl -u ssh -n 50 --no-pager
sudo tail -n 50 /var/log/auth.log

El segundo comando fallará normalmente si /var/log/auth.log no existe. En este caso, utilice el backend systemd.

4. Pruebe el filtro

sudo fail2ban-regex systemd-journal sshd

Si los contadores permanecen en cero a pesar de los verdaderos fallos de conexión, verifique el servicio registrado, el filtro seleccionado, el backend y el puerto SSH.

5. Verifique la acción del cortafuegos

sudo fail2ban-client get sshd actions
sudo nft list ruleset | grep -iE 'f2b|fail2ban'
sudo iptables -S | grep -i f2b

Fail2ban puede utilizar nftables o iptables según la distribución, la versión del paquete y su configuración. No fuerce una acción diferente sin haber identificado el cortafuegos actualmente utilizado.

Los errores más frecuentes

Auto-bloqueo

Cinco contraseñas incorrectas pueden bloquear su IP durante toda la duración definida por bantime. Mantenga una consola web disponible y coloque únicamente sus IPs fijas de confianza en ignoreip.

Modificar directamente jail.conf

Los archivos .conf se distribuyen con el paquete. Utilice un archivo .local para mantener una configuración legible y facilitar las actualizaciones.

Olvidar el puerto SSH personalizado

Fail2ban puede detectar los fallos sin bloquear el puerto correcto si la cárcel y el servicio no son coherentes. Compare la salida de sshd -T con el parámetro port.

Suponer que la prueba de sintaxis es suficiente

fail2ban-client -t no reemplaza una prueba del filtro y una verificación de las reglas del cortafuegos. Controle los tres niveles: configuración, detección y bloqueo.

Bloquear la dirección de un proxy inverso

Sin una configuración correcta de las IPs reales, Fail2ban puede ver únicamente la dirección de Cloudflare o del proxy. Corrija primero los registros de Nginx antes de activar las cárceles HTTP.

Creer que Fail2ban bloquea los ataques DDoS

Fail2ban actúa después de la llegada de las conexiones al servidor. Puede reducir la fuerza bruta de la aplicación, pero no puede evitar que un ataque volumétrico sature la conexión de red upstream.

Reforzar realmente la seguridad del VPS

Para una defensa coherente, combine Fail2ban con varias medidas:

  • utilice claves SSH y desactive la autenticación por contraseña cuando sea posible — consulte nuestra guía para configurar una clave SSH en un VPS Linux ;
  • rechace la conexión SSH directa de root ;
  • expose solo los puertos necesarios con un cortafuegos ;
  • instale regularmente las actualizaciones de seguridad ;
  • supervise los registros y las alertas del servidor ;
  • mantenga un acceso de emergencia a la consola ;
  • active HTTPS para los servicios web.

Nuestra guía Certbot: instalar un certificado SSL Let's Encrypt complementa esta configuración. También puede encontrar nuestros otros tutoriales en la documentación de Linux.

Fail2ban y la protección anti-DDoS responden a dos riesgos diferentes. Fail2ban bloquea comportamientos identificados en los registros del servidor, mientras que el anti-DDoS filtra el tráfico volumétrico upstream. Los VPS Linux OuiHeberg incluyen protección anti-DDoS y acceso root que permite aplicar los ajustes de esta guía.

FAQ sobre Fail2ban

¿Funciona Fail2ban con UFW, nftables o iptables?

Sí, pero la acción utilizada depende del paquete y de la configuración del servidor. Verifíquelo con sudo fail2ban-client get sshd actions, luego controle las reglas con nft list ruleset o iptables -S. Evite afirmar que un sistema se utiliza por defecto sin verificarlo en la máquina correspondiente.

¿Protege Fail2ban contra ataques DDoS?

No. Trata principalmente comportamientos repetitivos visibles en los registros, como fallos de SSH o HTTP. Un ataque volumétrico debe ser filtrado por la infraestructura de red del proveedor de alojamiento.

¿Es necesario cambiar el puerto SSH?

Cambiar el puerto SSH generalmente reduce el ruido de los escaneos automatizados, pero no constituye una protección fuerte: un escaneo completo puede encontrar el nuevo puerto. Las claves SSH, la desactivación de contraseñas y el filtrado de red siguen siendo prioritarios.

¿Por qué Fail2ban no bloquea ninguna IP?

Las causas más comunes son una cárcel inactiva, un backend incorrecto, un registro ausente, un filtro que no coincide con los registros o una acción de cortafuegos incorrecta. Verifique sucesivamente status, fail2ban-regex, los registros del servicio y las reglas del cortafuegos.

Fuentes y método de verificación

Esta guía ha sido verificada a partir de los siguientes recursos oficiales:

Los comandos deben ser siempre verificados en el servidor de destino, ya que un puerto SSH personalizado, un firewall reemplazado o un registro modificado pueden cambiar el resultado.

Conclusión

Una configuración de Fail2ban confiable no se limita a instalar el paquete. Es necesario verificar que la cárcel esté activa, que el filtro reconozca realmente los fallos y que el firewall aplique la prohibición.

Para un VPS Debian o Ubuntu clásico, una cárcel SSH con cinco intentos en diez minutos, una prohibición inicial de una hora y duraciones progresivas constituye una base razonable. Sin embargo, adapte estos valores a sus usuarios, mantenga un acceso de emergencia y combine Fail2ban con claves SSH, un firewall estricto y actualizaciones regulares.

Fail2ban es un software libre y funciona en todos los proveedores de hosting compatibles. Si busca un entorno Linux con acceso root y protección contra DDoS, descubra los VPS Linux NVMe OuiHeberg.