Skip to main content

Command Palette

Search for a command to run...

Fail2Ban: protege tu servidor Linux de ataques de fuerza bruta

Tiempo de lectura: 7 minutos Categoría: Ciberseguridad · Linux Nivel: Principiante / Intermedio

Published
4 min read

Si tienes un servidor Linux expuesto a internet, en este momento hay bots intentando entrar por SSH probando contraseñas una tras otra. Es un hecho. La pregunta no es si te van a atacar, sino cuándo. Y la respuesta a eso se llama Fail2Ban.

¿Qué es Fail2Ban? Fail2Ban es una herramienta de código abierto que monitoriza los logs de tu sistema en tiempo real y bloquea automáticamente las IPs que realizan demasiados intentos fallidos de acceso en un periodo de tiempo determinado. Cuando detecta un patrón sospechoso, añade una regla al firewall para bloquear esa IP temporalmente o de forma permanente.

Es ligero, muy configurable y compatible con prácticamente cualquier servicio: SSH, Apache, Nginx, FTP, y muchos más.

Cómo instalar Fail2Ban En sistemas basados en Debian o Ubuntu la instalación se hace con el gestor de paquetes apt. En Fedora o CentOS se usa dnf o yum. En Arch Linux está disponible en el repositorio community.

Una vez instalado, activa el servicio para que arranque automáticamente con el sistema usando systemctl. Puedes verificar que está funcionando con systemctl status fail2ban.

Cómo funciona por dentro Fail2Ban trabaja con dos conceptos clave: los filters y las jails.

Un filter es una expresión regular que define qué línea de log indica un intento fallido de acceso. Por ejemplo, para SSH busca líneas del tipo "Failed password for user".

Una jail es la combinación de un filter con una acción y una política. Define qué servicio vigilar, cuántos intentos fallidos se permiten, en qué ventana de tiempo y cuánto dura el bloqueo.

Configurar la jail de SSH La configuración principal de Fail2Ban está en el archivo jail.conf, pero nunca debes editarlo directamente porque se sobreescribe al actualizar. En su lugar crea un archivo jail.local en el mismo directorio y añade ahí tu configuración personalizada.

Para proteger SSH necesitas definir una sección con el nombre sshd. Los parámetros más importantes son enabled para activar la jail, port para indicar en qué puerto escucha SSH (el estándar es 22, pero si lo has cambiado ponlo aquí), filter para indicar qué regla usar (sshd en este caso), maxretry para definir cuántos intentos fallidos se permiten antes del bloqueo, findtime para definir la ventana de tiempo en segundos en la que se cuentan esos intentos, y bantime para definir cuántos segundos dura el bloqueo (un valor negativo significa bloqueo permanente).

Una configuración razonable sería permitir 5 intentos en 10 minutos y banear durante 1 hora. Si quieres ser más agresivo, baja el maxretry a 3 y sube el bantime a 24 horas o directamente ponlo permanente.

Comandos útiles del día a día Para ver el estado de todas las jails activas usa fail2ban-client status. Para ver específicamente la jail de SSH usa fail2ban-client status sshd, que te mostrará cuántas IPs están baneadas y cuántos intentos ha detectado.

Si necesitas desbanear una IP manualmente, por ejemplo porque te has bloqueado tú mismo, usa fail2ban-client set sshd unbanip seguido de la dirección IP.

Para ver el log de actividad de Fail2Ban en tiempo real puedes usar tail -f sobre el archivo de log, que normalmente está en /var/log/fail2ban.log.

Proteger otros servicios La gracia de Fail2Ban es que no se limita a SSH. Puedes crear jails para cualquier servicio que genere logs. Hashnode tiene jails predefinidas para Apache, Nginx, Postfix, vsftpd y muchos más. Solo tienes que activarlas en tu jail.local siguiendo el mismo patrón.

Para servicios web como Nginx o Apache es especialmente útil porque puedes bloquear IPs que estén haciendo scraping agresivo, intentando explotar vulnerabilidades conocidas o realizando ataques de fuerza bruta contra formularios de login.

Verificar que funciona La mejor forma de verificar que Fail2Ban está funcionando es revisar el log y ver las IPs que ha baneado. Si tu servidor lleva tiempo expuesto a internet, te sorprenderá la cantidad de intentos que hay. En servidores medianos es normal ver cientos de IPs baneadas en cuestión de horas.

También puedes probar desde otra máquina haciendo varios intentos fallidos de SSH y verificar que tu IP queda bloqueada tras el número de intentos que configuraste.

Conclusión Fail2Ban es una de esas herramientas que deberían estar instaladas en cualquier servidor Linux expuesto a internet desde el primer día. Es fácil de configurar, consume muy pocos recursos y te ahorra miles de intentos de intrusión sin que tengas que hacer nada manualmente.

Combinado con otras medidas básicas como deshabilitar el login de root por SSH, usar autenticación por clave pública en vez de contraseña, y cambiar el puerto por defecto de SSH, tienes una defensa muy sólida ante los ataques más comunes.

¿Te ha resultado útil? Compártelo con alguien que tenga un servidor expuesto a internet. Puede que le salves el día.