Protección contra ataques de fuerza bruta de contraseñas con Fail2ban¶
En este artículo
Si inicia sesión en el servidor con una contraseña, los atacantes pueden intentar adivinarla automáticamente: esto se denomina ataque de fuerza bruta. La mejor protección es utilizar autenticación basada en claves (sin contraseña). Pero si por alguna razón aún utiliza una contraseña, debe agregar salvaguardias adicionales. Una de las herramientas más simples y efectivas para esto es Fail2ban.
Fail2ban es un programa que monitorea los registros (registros de la actividad del servidor). Si alguien intenta iniciar sesión demasiadas veces consecutivas y falla, Fail2ban bloquea automáticamente su dirección IP durante un período de tiempo.
Instalación de Fail2ban¶
Ubuntu / Debian:
CentOS / Rocky Linux:
Para un funcionamiento correcto, debe instalarse un firewall. Puede instalar, por ejemplo, iptables:
Ubuntu / Debian:
CentOS / Rocky Linux:
Después de la instalación, habilite el inicio automático de Fail2ban:
En Ubuntu, Fail2ban protegerá SSH inmediatamente: de forma predeterminada, bloquea una IP durante 10 minutos si ha habido 5 intentos fallidos de inicio de sesión en 10 minutos.
Cómo configurar Fail2ban correctamente¶
La configuración principal se almacena en /etc/fail2ban/jail.conf y se divide en secciones.
La sección [DEFAULT] establece reglas comunes que se aplican a todos los servicios de forma predeterminada.
Los servicios individuales (por ejemplo, SSH, servidor web Apache o FTP) tienen sus propios parámetros en sus propias secciones, como [sshd], [apache‑auth], [vsftpd], etc.
No recomendamos cambiar la configuración base en este archivo. En su lugar, cree su propio archivo de configuración: jail.local:
Puede crearlo vacío: Fail2ban rellenará cualquier opción no especificada con los valores predeterminados.
Ejemplo de configuración para la protección de SSH¶
A continuación se muestra un ejemplo simple de un archivo jail.local:
Qué significa esto:
ignoreip— su dirección IP "en la lista blanca". Fail2ban nunca la bloqueará, incluso si escribe mal su contraseña. Especifique su IP aquí (si es estática). Puede agregar varias direcciones separadas por espacios.enabled = true— habilitar la protección para SSH.maxretry = 3— máximo de 3 intentos fallidos de inicio de sesión.findtime = 120— dentro de los últimos 120 segundos (2 minutos).bantime = 43200— bloquear durante 12 horas (43200 segundos).En otras palabras: si una IP (distinta de la suya) falla al iniciar sesión 3 veces en 2 minutos, se bloqueará durante 12 horas.
Nota
Dependiendo del sistema en uso, la sección podría ser [sshd], [ssh] o [ssh‑iptables]: confirme esto en jail.conf.
Configuración adicional¶
-
Si cambió el puerto de SSH (por ejemplo, de 22 a 2222), agregue a la sección
[sshd]: -
Si utiliza UFW o firewalld en lugar de iptables, especifique:
- Para UFW:
action = ufw - Para firewalld:
action = firewallcmd-ipset
Pero en la mayoría de los casos puede dejar todo en los valores predeterminados: Fail2ban elegirá el método de bloqueo apropiado automáticamente.
Aplicar la configuración¶
Después de guardar el archivo, reinicie Fail2ban:
Cómo verificar que todo funcione¶
-
Verificar el estado del bloqueo de SSH:
Verá una lista de direcciones IP bloqueadas. -
Ver los registros de Fail2ban:
-
Verificar los bloqueos de iptables (si se utilizan):
Consejo: No pruebe la protección ingresando deliberadamente una contraseña incorrecta desde su propia IP: ¡podría bloquearse accidentalmente! Es mejor esperar un poco: los bots suelen comenzar a atacar los servidores dentro de la primera hora después del lanzamiento.
Nota
Fail2ban es una salvaguardia adicional, pero es mejor no usar contraseñas para SSH en absoluto. Configure el inicio de sesión con claves SSH: es más seguro y conveniente. Agregue siempre su IP a ignoreip para no bloquearse accidentalmente.