Instalar y configurar Fail2ban
Cómo proteger tu servidor SSH de ataques de fuerza bruta con Fail2ban.
Fail2ban es un daemon que vigila tus archivos de log y bloquea automáticamente las direcciones IP con comportamiento sospechoso — demasiados intentos de acceso fallidos, escaneos de puertos y patrones similares. Es una de las formas más sencillas y eficaces de proteger tu servidor SSH frente a ataques de fuerza bruta.
Instalación
Ubuntu / Debian:
apt-get install fail2ban
CentOS:
yum install fail2ban
Estructura de la configuración
Fail2ban tiene dos archivos de configuración principales:
/etc/fail2ban/fail2ban.conf— controla cómo se inicia y ejecuta el propio proceso de Fail2ban/etc/fail2ban/jail.conf— define las reglas de protección para servicios específicos, incluido SSH
El archivo jail.conf está dividido en secciones llamadas jails — cada una apunta a un servicio concreto y a un tipo de ataque:
[DEFAULT]
ignoreip = 127.0.0.1/8
bantime = 600
maxretry = 3
banaction = iptables-multiport
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
Los parámetros de la sección [DEFAULT] se aplican a todas las jails, salvo que se sobrescriban explícitamente en una sección específica.
La jail [ssh] gestiona la protección contra intentos de acceso fallidos repetidos — el brute-force clásico.
Descripción de los parámetros principales
ignoreip— direcciones IP que nunca serán bloqueadas. Acepta una lista de IPs, máscaras de subred o nombres DNS separados por espacios.bantime— tiempo (en segundos) que una IP permanece bloqueada antes de ser liberada automáticamente.maxretry— número de eventos coincidentes que activa un bloqueo. Para[ssh], es el número de intentos de acceso fallidos.findtime— la ventana de tiempo (en segundos) en la que deben producirsemaxretryeventos para que se aplique el bloqueo. El valor por defecto es 600 segundos (10 minutos).enabled— establecetruepara activar una jail,falsepara desactivarla.port— el puerto en el que escucha tu servicio. Para SSH es22o el aliasssh.filter— el nombre del archivo de filtro que contiene los patrones regex que Fail2ban usa para detectar eventos sospechosos. El filtrosshdse encuentra en/etc/fail2ban/filter.d/sshd.conf.logpath— el archivo de log que Fail2ban monitoriza. Toda la actividad de acceso (exitosa y fallida) se registra por defecto en/var/log/auth.log.
Buenas prácticas de configuración
Nunca edites jail.conf directamente. Fail2ban está diseñado para personalizarse mediante archivos .local — se cargan automáticamente y tienen prioridad sobre los valores por defecto. Así tus cambios sobreviven a las actualizaciones del paquete.
Crea tu propio archivo de override:
nano /etc/fail2ban/jail.local
Aquí tienes una configuración de partida sólida:
[DEFAULT]
# La IP estática de tu servidor — evita bloquearte accidentalmente.
# Si no defines ignoreip aquí, comenta el parámetro en jail.conf.
ignoreip = 57.66.158.131
[ssh]
# Si en el plazo de 1 hora...
findtime = 3600
# ...se registran 6 intentos de acceso fallidos...
maxretry = 6
# ...esa IP queda bloqueada durante 24 horas.
bantime = 86400
Por qué deberías cambiar
ignoreip: el valor por defecto127.0.0.1/8supone una brecha de seguridad en servidores compartidos. Si un atacante compromete cualquier cuenta shell en la máquina, puede ejecutar una herramienta de fuerza bruta en local — y Fail2ban la ignorará porque el tráfico parece provenir de localhost.
Por qué deberías aumentar
findtime: las botnets que ejecutan ataques de «fuerza bruta lenta» están diseñadas específicamente para eludir la ventana por defecto de 10 minutos. Conmaxretry = 6, un atacante puede probar 5 contraseñas, esperar 10 minutos, probar 5 más y repetirlo indefinidamente sin ser bloqueado jamás. Aumentarfindtimea una hora o más cierra esa brecha.
Reinicio de Fail2ban
Una vez aplicada tu configuración, reinicia el servicio:
service fail2ban restart
Ayuda
¿Tienes dudas o necesitas ayuda? Escríbenos a través del sistema de tickets — siempre estamos aquí para ayudarte!