Alex Sarmiento
ES / EN

Un firewall como UFW es una defensa estática: abre o cierra puertas. Pero si dejas el puerto SSH abierto, cualquiera puede intentar adivinar tu contraseña infinitas veces.

Fail2Ban es una defensa dinámica. Monitoriza los logs del sistema en tiempo real, detecta patrones de ataques (fuerza bruta, escaneos) y actualiza el firewall automáticamente para bloquear la IP del atacante. Además, puede avisarte cuando esto ocurre.

1. Instalación y Base

Fail2Ban no consume apenas recursos y es compatible con UFW.

1.1 Instalación

sudo apt update && sudo apt install -y fail2ban

1.2 La Regla de Oro

Fail2Ban trae un archivo /etc/fail2ban/jail.conf. Nunca edites este archivo. Si actualizas el sistema, se sobrescribirá. Debes crear una copia local que tendrá prioridad:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

2. Configuración del Sistema de Alertas

Antes de configurar las reglas de bloqueo, decidamos cómo queremos ser notificados. Tienes dos opciones:

OPCIÓN A: Envío Básico (Mailutils)

Ideal si solo quieres probar o si tu ISP no bloquea el tráfico de correo saliente. Usaremos el sistema de correo interno del servidor.

sudo apt install mailutils
# Selecciona "Internet Site" si te pregunta la configuración

OPCIÓN B: SMTP Externo (Recomendado)

Si tienes tu propio servidor de correo o quieres usar un servicio como Gmail/SendGrid para asegurar que el correo no llegue a Spam. Usaremos msmtp como puente.

B.1 Instalar msmtp:

sudo apt install msmtp msmtp-mta ca-certificates

B.2 Configurar la cuenta: Creamos el archivo /etc/msmtprc:

sudo nano /etc/msmtprc

Pega tu configuración SMTP (ejemplo genérico):



defaults
auth           on
tls            on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile        /var/log/msmtp.log

account        default
host           mail.tudominio.com
port           587
from           alertas@tudominio.com
user           tu_usuario
password       tu_contraseña

B.3. Proteger las credenciales: Es vital restringir los permisos de este archivo, ya que contiene contraseñas en texto plano:

sudo chmod 600 /etc/msmtprc

3. Configuración Global (jail.local)

Ahora unimos todo en la configuración de Fail2Ban. Editamos el archivo local:

sudo nano /etc/fail2ban/jail.local

3.1 Tiempos de castigo (Default)

En la sección [DEFAULT], ajustamos la severidad:



[DEFAULT]
# Bloquear IP durante 1 hora
bantime  = 1h
# Ventana de tiempo para contar fallos (10 min)
findtime  = 10m
# Intentos permitidos
maxretry = 5
# Ignorar IPs de confianza (tu red local)
ignoreip = 127.0.0.1/8 192.168.1.0/24

3.2 Configuración de Alertas

En la misma sección [DEFAULT], configuramos el destino de los correos:



# A quién le llega el correo
destemail = tu_email_personal@gmail.com

# Quién envía el correo (debe coincidir con tu config SMTP si usas la Opción B)
sender = alertas@tudominio.com

# Agente de correo (mta = mail funciona tanto para Opción A como B gracias a los alias)
mta = mail

# ACCIÓN POR DEFECTO
# action_ = Solo banear (sin correo)
# action_mw = Banear + Correo con info WHOIS
# action_mwl = Banear + Correo con WHOIS + Líneas del Log (RECOMENDADO)
action = %(action_mwl)s

4. Activación de Cárceles (Jails)

Fail2Ban trae las cárceles desactivadas por defecto. Debemos activar las que necesitemos.

4.1 Proteger SSH

Busca la sección [sshd]:



[sshd]
enabled = true
port    = ssh
# Si usas puerto personalizado, cámbialo aquí: port = 2222
logpath = %(sshd_log)s
backend = %(sshd_backend)s

4.2 Proteger Nginx (Auth Basic)

Si usas un servidor web:



[nginx-http-auth]
enabled = true
port    = http,https
logpath = /var/log/nginx/error.log

5. Operativa y Pruebas

Reinicia el servicio para aplicar todo:

sudo systemctl restart fail2ban

5.1 Verificar estado

Para ver qué cárceles están activas y cuántas IPs han caído:

sudo fail2ban-client status
sudo fail2ban-client status sshd

5.2 Prueba de Fuego (Test de correo)

Vamos a banear manualmente una IP falsa para verificar que el sistema de correo funciona.

sudo fail2ban-client set sshd banip 192.0.2.50

Revisa tu bandeja de entrada. Deberías recibir un correo con el asunto [Fail2Ban] sshd: banned 192.0.2.50.

5.3 Desbanear (Unban)

Una vez hecha la prueba (o si te baneas a ti mismo por error), retira el castigo:

sudo fail2ban-client set sshd unbanip 192.0.2.50

6. Debugging

Si no llegan los correos o el servicio no arranca, consulta los logs:

# Log de Fail2Ban
tail -f /var/log/fail2ban.log

# Log de envío de correos (si usaste Opción B)
cat /var/log/msmtp.log

¡Ahora tu servidor tiene vigilancia 24/7 y te informará de cualquier intrusión!