Fail2Ban es una aplicación que analiza continuamente los ficheros log y bloquea las direcciones Internet de donde se hayan originado varias tentativas fallidas de acceso con contraseña inválida.
Fail2Ban es extremadamente eficaz en la prevención de ataques de fuerza bruta y ataques de negación de servicio (DoS).
root@server:~# apt-get install fail2ban whois
La configuración que resulta de la instalación de fail2ban activa el puerto ssh. Sin embargo, es posible monitorizar y proteger otros puertos.
La documentación de fail2ban aconseja que toda la configuración se realice en archivos con la extensión .local. Estos pueden ser creados copiando el archivo de la configuración original, con la extensión .conf:
root@server:~# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Toda la configuración será efectuada, a partir de este momento, en el archivo /etc/fail2ban/jail.local.
En una primera etapa, definimos cuáles son las direcciones que no estarán sujetas a restricciones (la dirección local y la red local), por cuánto tiempo estarán bloqueadas las direcciones de donde provengan las amenazas (1800 segundos (30 minutos)) y después de cuántas tentativas (3 tentativas permitidas). Esta configuración debe realizarse en el archivo /etc/fail2ban/jail.local:
# [...] [DEFAULT] # "ignoreip" can be an IP address, a CIDR mask or a DNS host ignoreip = 127.0.0.1 192.168.1.0/24 bantime = 1800 maxretry = 3 # [...]
También se define la dirección e-mail que recibirá las alertas:
# [...] # # Destination email address used solely for the interpolations in # jail.{conf,local} configuration files. destemail = root@localhost # [...]
Luego, debe configurarse la acción a realizar cuando se detecta un posible ataque. En este caso, la dirección IP del atacante es bloqueada y u e-mail es enviado al administrador del sistema.
# [...] # # ACTIONS # # Default banning action (e.g. iptables, iptables-new, # iptables-multiport, shorewall, etc) It is used to define # action_* variables. Can be overriden globally or per # section within jail.local file banaction = iptables-multiport # [...] # Choose default action. To change, just override value of 'action' with the # interpolation to the chosen action shortcut (e.g. action_mw, action_mwl, etc) in jail.local # globally (section [DEFAULT]) or per specific section action = %(action_mwl)s # [...]
Por último, se definen los parámetros del servicio que se pretende proteger. Para esto, se edita la sección JAILS del archivo /etc/fail2ban/jail.local:
# [...] # # JAILS # # [...] [ssh] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 3 # [...]
Ahora debe reiniciarse el servicio fail2ban:
root@server:~# service fail2ban restart
Durante cada (re)inicio del servicio fail2ban se envía un e-mail de notificación al administrador del sistema:
Subject: [Fail2Ban] ssh: started Date: Wed, 15 May 2013 16:10:03 +0000 From: Fail2Ban <fail2ban@home.lan> To: root@localhost Hi, The jail ssh has been started successfully. Regards, Fail2Ban
En de que sea necesaria una acción defensiva, el administrador también será notificado:
Subject: [Fail2Ban] ssh: banned 219.148.120.238 Date: Wed, 15 May 2013 17:15:59 +0000 From: Fail2Ban <fail2ban@home.lan> To: root@localhost Hi, The IP 219.148.120.238 has just been banned by Fail2Ban after 3 attempts against ssh. Here are more information about 219.148.120.238: % [whois.apnic.net node-7] % Whois data copyright terms http://www.apnic.net/db/dbcopyright.html inetnum: 219.148.0.0 - 219.148.159.255 netname: CHINANET-HE descr: CHINANET hebei province network descr: China Telecom descr: No.31,jingrong street descr: Beijing 100032 country: CN admin-c: CH93-AP tech-c: BR3-AP status: ALLOCATED NON-PORTABLE changed: ipadmin@north.cn.net 20060526 mnt-by: MAINT-CHINANET mnt-lower: MAINT-CHINANET-HE mnt-routes: MAINT-CHINANET-HE source: APNIC # [...] Lines containing IP:219.148.120.238 in /var/log/auth.log May 15 17:07:25 server sshd[27043]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=219.148.120.238 user=root May 15 17:07:26 server sshd[27043]: Failed password for root from 219.148.120.238 port 59879 ssh2 May 15 17:07:29 server sshd[27046]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=219.148.120.238 user=root May 15 17:07:31 server sshd[27046]: Failed password for root from 219.148.120.238 port 60898 ssh2 May 15 17:07:34 server sshd[27048]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=219.148.120.238 user=root May 15 17:07:36 server sshd[27048]: Failed password for root from 219.148.120.238 port 33737 ssh2 Regards, Fail2Ban
El paquete Fail2Ban puede proteger servidores e-mail, ftp, web, etc. Para esto debe editarse el archivo /etc/fail2ban/jail.local para incluir los servicios que se planee proteger.