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 producirse maxretry eventos para que se aplique el bloqueo. El valor por defecto es 600 segundos (10 minutos).
  • enabled — establece true para activar una jail, false para desactivarla.
  • port — el puerto en el que escucha tu servicio. Para SSH es 22 o el alias ssh.
  • filter — el nombre del archivo de filtro que contiene los patrones regex que Fail2ban usa para detectar eventos sospechosos. El filtro sshd se 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 defecto 127.0.0.1/8 supone 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. Con maxretry = 6, un atacante puede probar 5 contraseñas, esperar 10 minutos, probar 5 más y repetirlo indefinidamente sin ser bloqueado jamás. Aumentar findtime a 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!

¿Necesitas ayuda?Nuestros ingenieros te ayudarán gratuitamente con cualquier pregunta en minutosContáctanos