fail2ban - Guía básica UNIX

fail2ban

fail2ban es un juego de programas de cliente y servidor para limitar intentos de autentificación por fuerza bruta que nos permite ejecutar acciones predeterminadas para determinados eventos (inicio, prohibición/ban,…).

La ruta por defecto es /etc/fail2ban/. La configuración global se realiza en el fichero jail.local y las acciones personalizadas se almacenan en el directorio action.d. Todos los ficheros son en formato .ini y no pueden utilizar variables de bash puesto que trabaja como servidio de systemd.

# fail2ban + ntfy

Vamos a configurar fail2ban para que avise vía curl a ntfy cuando se activen determinados eventos.

Instalar dependencias

sudo apt update
sudo apt install fail2ban curl -y

Crear acción personalizada ntfy

sudo tee /etc/fail2ban/action.d/ntfy.conf >/dev/null <<'EOF'
[Definition]
actionstart = /usr/bin/curl -sS -H "Title: OMV: fail2ban iniciado" -H "Priority: low" \
  -d "fail2ban activo en <name>" "<ntfy_url>"
actionstop  = /usr/bin/curl -sS -H "Title: OMV: fail2ban detenido" -H "Priority: default" \
  -d "fail2ban detenido en <name>" "<ntfy_url>"
actionban   = /usr/bin/curl -sS -H "Title: OMV: IP baneada" -H "Priority: high" \
  -H "Tags: no_entry,warning" \
  -d "Jail=<name>  IP=<ip>  Host=<host>  Time=<time_iso8601>" "<ntfy_url>"
actionunban = /usr/bin/curl -sS -H "Title: OMV: IP desbaneada" -H "Priority: default" \
  -d "Jail=<name>  IP=<ip>  Host=<host>  Time=<time_iso8601>" "<ntfy_url>"

[Init]
# URL de tu servidor ntfy
ntfy_url =
EOF

Configurar jail.local

# /etc/fail2ban/jail.local

[DEFAULT]
# Tiempo que la IP permanecerá bloqueada (1h)
bantime  = 1h
# Ventana de tiempo para contar intentos fallidos (10m)
findtime = 10m
# Número de intentos permitidos antes del ban
maxretry = 5
# Backend de logs (systemd para OMV/Debian 11+)
backend  = systemd

# Acción de notificación
action   = ntfy

[sshd]
enabled  = true
port     = ssh
logpath  = %(sshd_log)s
action = ntfy[ntfy_url=https://ntfy.sh/topic]

Reiniciar fail2ban

sudo systemctl restart fail2ban

Probar notificaciones

sudo fail2ban-client set sshd banip 203.0.113.77
sudo fail2ban-client set sshd unbanip 203.0.113.77

Revisar logs

sudo tail -f /var/log/fail2ban.log

Actualizar el canal de ntfy

# Editamos el fichero de configuración de ntfy
sudo -e /etc/fail2ban/action.d/ntfy.conf

# Reiniciamos el servicio de fail2ban
sudo systemctl reload fail2ban