Fail2ban es una herramienta de seguridad diseñada para proteger sistemas Linux/Unix de ataques de fuerza bruta, monitoreando archivos de registro y tomando medidas como bloquear IPs sospechosas temporalmente. Este software es ideal para proteger servicios que usan SSH, HTTP, FTP y otros.
A continuación, te ofrezco una guía de las opciones más comunes y ejemplos de cómo usar Fail2ban.
Instalación de Fail2ban
Primero, debes instalar Fail2ban en tu sistema. En distribuciones basadas en Debian, como Ubuntu, se instala con el siguiente comando:
sudo apt update
sudo apt install fail2ban
En sistemas basados en Red Hat, puedes usar:
sudo yum install fail2ban
Archivo de configuración principal
Fail2ban tiene un archivo principal de configuración que se encuentra en:
/etc/fail2ban/jail.conf
Nota: No se recomienda modificar directamente este archivo. En su lugar, crea un archivo local en /etc/fail2ban/jail.local
para realizar las configuraciones personalizadas.
Opciones Comunes de Fail2ban
A continuación se describen las principales opciones de configuración que puedes usar dentro del archivo de configuración (jail.local
):
- [DEFAULT]: Esta sección define las configuraciones predeterminadas globales que se aplican a todas las "jails" (celdas) de Fail2ban.
Ejemplo de configuración básica enjail.local
:[DEFAULT]
bantime = 3600 # Tiempo que se bloqueará una IP (en segundos). Aquí 3600 segundos = 1 hora.
findtime = 600 # Período de tiempo en el que Fail2ban buscará intentos de acceso fallidos (en segundos).
maxretry = 3 # Número máximo de intentos fallidos antes de que se bloquee una IP.
- [SSH]: Configuración específica para proteger el servicio SSH. Puedes crear una "jail" para SSH o cualquier otro servicio que quieras proteger.
Ejemplo de configuración para SSH enjail.local
:[sshd]
enabled = true # Habilita la protección para SSH.
port = ssh # Puerto que Fail2ban monitoreará (puedes cambiarlo si tienes un puerto diferente).
logpath = /var/log/auth.log # Ruta del archivo de registro que se usará para encontrar intentos fallidos.
maxretry = 5 # Número de intentos fallidos antes de banear la IP.
- bantime: Define el tiempo que una IP estará bloqueada después de exceder los intentos permitidos.
bantime = 1800 # 30 minutos.
- findtime: Es el tiempo que Fail2ban buscará intentos fallidos para aplicar el baneo. Si una IP falla el número de veces configuradas en
maxretry
durante este periodo, será bloqueada.findtime = 600 # 10 minutos.
- ignoreip: Lista de IPs que siempre serán ignoradas y nunca bloqueadas, útil si tienes una IP interna que no quieres que sea bloqueada por error.
ignoreip = 127.0.0.1/8 192.168.1.1
- action: Define qué acción tomará Fail2ban cuando detecte intentos de acceso fallidos. La opción más común es bloquear la IP con
iptables
, pero puedes definir otras acciones.action = %(action_mwl)s # Bloquea la IP, envía un correo con el log.
Comandos de Fail2ban
Fail2ban ofrece varios comandos útiles para administrar las "jails" y ver los estados de las IPs bloqueadas.
- Iniciar Fail2ban:
sudo systemctl start fail2ban
- Habilitar Fail2ban para que inicie al arrancar el sistema:
sudo systemctl enable fail2ban
- Ver el estado de Fail2ban y de las jails activas:
sudo fail2ban-client status
- Ver el estado de una jail específica (por ejemplo, SSH):
sudo fail2ban-client status sshd
- Desbloquear una IP específica (por ejemplo,
192.168.1.100
):sudo fail2ban-client unban 192.168.1.100
- Banear manualmente una IP:
sudo fail2ban-client ban 192.168.1.101
Ejemplo de Jail para Proteger un Servidor HTTP
Supongamos que tienes un servidor web Nginx o Apache y quieres protegerlo de intentos fallidos de autenticación.
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 3
Este ejemplo bloqueará las IPs que intenten y fallen autenticarse en un servidor Nginx más de 3 veces.
Conclusión
Fail2ban es una herramienta flexible que te permite proteger tu servidor de intentos maliciosos. Con una configuración adecuada y un monitoreo regular de los archivos de registro, puedes mejorar significativamente la seguridad de tu servidor Linux o Unix.