fail2ban es una aplicación
IDPS (
Intrusion Detection and Prevention Systems) que supervisa las conexiones externas de direcciones IPs a servicios internos, se puede parametrizar para bloquear los intentos de accesos externos por fuerza bruta. En base al cumplimiento de las directivas definidas y asociadas a determinados servicios.
fail2ban detecta conexiones que puedan ser anómalas y bloquea la IP pública que intenta acceder a dichos servicios por lo que sería un sistema activo (analiza, detecta y actua al momento), lo hace añadiendo reglas
iptables rechazado las conexiones procedentes de esa dirección IP pública.
fail2ban escanea los ficheros de logs de los servicios configurados como por ejemplo "
/var/log/auth.log" (ssh) o "
/var/log/apache/error_log" (apache), comprobando los criterios establecidos en las directivas de cada servicio y banenado aquellas direcciones IPs públicas que intentaron acceder a dicho servicio y baneando estas direcciones IPs.
En el fichero de configuración de servicios asociados a fail2ban, se refieren a estos servicios como "jails".
/etc/fail2ban/jail.conf
En el caso de configurar el servicio SSH se podría definir de la siguiente manera.
[sshd]
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
bantime = 86400
findtime = 600
maxretry = 3
Donde las directivas son:
- bantime = Número de segundos en el cual una dirección IP permanecerá prohibida (10 min por defecto).
- findtime = Cantidad de tiempo entre intentos de inicio de sesión, antes de que se elimine el host. (predeterminado 10 min).
- maxretry = Número de intentos que deben realizarse antes de que se aplique una prohibición. (por defecto 3 intentos).
Consultar las IPs que intentaron acceder y fueron baneadas o bloqueadas
Desde el cliente fail2ban-client indicando el tipo de jail (servicio sshd).
# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 1
| |- Total failed: 4
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 1
|- Total banned: 2
`- Banned IP list: 67.10.125.108
A través de iptables.
# iptables -L -n
Chain f2b-sshd (1 references)
target prot opt source destination
REJECT all -- 67.10.125.108 0.0.0.0/0 reject-with icmp-port-unreachable
RETURN all -- 0.0.0.0/0 0.0.0.0/0
REJECT - reject-with icmp-port-unreachable: Conexión rechazada
Visualizar los registros de logs
Se almacenan en el fichero de log
/var/log/fail2ban.log.
Podemos hacer un "grep Ban" para ver los registros de las direcciones IPs baneadas y un "grep Unban" para las IPs que ya hayan sido desbloqueadas, transcurrido los tiempos definidos anteriormente en las directivas del fichero jail.conf.
# cat /var/log/fail2ban.log | grep Unban
2019-07-15 21:12:41,602 fail2ban.actions [18533]: NOTICE [sshd] Unban 67.10.125.108
2019-07-15 21:32:01,540 fail2ban.actions [18705]: NOTICE [sshd] Unban 74.15.62.217
2019-07-15 21:42:50,191 fail2ban.actions [18705]: NOTICE [sshd] Unban 49.80.215.108
...
Banear dirección IP manualmente
fail2ban-client set <JAIL-NAME> banip <IP-ADDRESS>
# fail2ban-client set sshd banip 37.10.145.208
Desbanear dirección IP manualmente
fail2ban-client set <JAIL-NAME> unbanip <IP-ADDRESS>
# fail2ban-client set sshd unbanip 37.10.145.208
Desbanear dirección IP manualmente a través de iptables indicando el número de regla.
# iptables -L f2b-sshd --line-numbers
Chain f2b-sshd (1 references)
num target prot opt source destination
1 REJECT all -- 67.10.125.108 0.0.0.0/0 reject-with icmp-port-unreachable
2 RETURN all -- anywhere anywhere
# iptables -D f2b-sshd 1
Desbanear IP manualmente a través de iptables indicando directamente la dirección IP pública.
iptables -D f2b-sshd -s 67.10.125.108 -j REJECT
Configurar una Whitelist en fail2ban
Configurar un pool de IPs a ignorar de los baneos o bloqueos temporales. Se define con la directiva
ignoreip en el fichero de configuración
/etc/fail2ban/jail.conf.
ignoreip = 127.0.0.1/8 ::1 <IP interna o externa, rango de red a ignorar>
ignoreip = 127.0.0.1/8 ::1 192.168.10.0/24
Saludos!