Trucos para Fail2Ban en Centos

Fail2Ban es una excelente herramienta que se programa para revisar los logs de los distintos programas a intervalos periódicos, si encuentra a través de sus filtros registros que pueden ser sospechosos podemos tomar medidas de seguridad para bloquear el servicio a la ip en cuestión, incluso bloquear por X tiempo cualquier petición de dicha ip sospechosa, etc.

Instalar Fail2ban

Unos sencillos comandos para descargar, descomprimir, installar y configurar… merece la pena.

[bash]
wget https://github.com/downloads/fail2ban/fail2ban/fail2ban_0.8.7.1.orig.tar.gz
tar xzvf fail2ban_0.8.7.1.orig.tar.gz
cd fail2ban-0.8.7.1/
service fail2ban stop
python setup.py install
vi /etc/fail2ban/jail.conf
[/bash]

Configurar Fail2ban

Estos son algunos de los filtros que podemos activar en función de los servicios que corriendo en el servidor:
Para ello editamos el archivo jail.conf, segun la instalacion por defecto de cada distribucion el fichero se encuentra en /etc/fail2ban/jail.conf

[bash]

[ssh-iptables]

enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=Fail2banSSH, dest=admin@email.com, sender=root@server.com]
logpath = /var/log/secure
maxretry = 2

[proftpd-iptables]

enabled = true
filter = proftpd
action = iptables[name=ProFTPD, port=ftp, protocol=tcp]
sendmail-whois[name=Fail2banProftp, dest=admin@email.com, sender=root@server.com]
logpath = /var/log/proftpd/ftp.log
maxretry = 3

[sasl-iptables]

enabled = true
filter = sasl
backend = polling
action = iptables[name=sasl, port=smtp, protocol=tcp]
sendmail-whois[name=Fail2banSASL, dest=kikopc@gmail.com, sender=root@s1.ksirve.com]
logpath = /var/log/maillog

[dovecot]

enabled = true
filter = dovecot
action = iptables-multiport[name=Dovecot, port="110,995,143,993,25", protocol=tcp]
sendmail-whois[name=Fail2Dovecot, dest=admin@email.com, sender=root@server.com]
logpath = /var/log/maillog
/var/log/secure
maxretry = 3

[postfix-tcpwrapper]

enabled = true
filter = postfix
action = iptables-multiport[name=postfix, port="110,995,143,993,25", protocol=tcp]
sendmail[name=Fail2banPostfix, dest=admin@email.com, sender=root@server.com]
logpath = /var/log/postfix.log
/var/log/maillog
bantime = 30000

[/bash]

Configurar filtros en fail2ban

Cada uno deberá configurar los servicios que vea oportunos, también debemos asegurarnos de que los filtros funcionan, los filtros se encuentran en /etc/fail2ban/filter.d/ los podemos encontrar en formato Nombre_Filtro.conf. Un ejemplo que me he encontrado en un Centos usando Virtualmin es el filtro SASL por defecto viene erróneo, hay que ajustar el failregex dentro del archivo que podemos encontrar en /etc/fail2ban/filter.d/sasl.conf

[bash]
failregex = : warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed$
#cambiamos por
failregex = (?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed

[/bash]

Si queremos probar si funciona correctamente podemos aplicar el filtro con el siguiente comando

Comprobar un filtro

[bash]

fail2ban-regex /var/log/maillog /etc/fail2ban/filter.d/sasl.conf

[/bash]

Para hacer reportes

[bash]

#resumen de ips y reglas
grep "Ban " /var/log/fail2ban.log | awk -F[\ \:] ‘{print $10,$8}’ | sort | uniq -c | sort -n
#Reporte del dia en curso
grep "Ban " /var/log/fail2ban.log | grep `date +%Y-%m-%d` | awk ‘{print $NF}’ | sort | awk ‘{print $1,"("$1")"}’ | logresolve | uniq -c | sort -n
#Resumen de vida de fail2ban
zcat /var/log/auth.log* | grep ‘Failed password’ | grep sshd | awk ‘{print $1,$2}’ | sort -k 1,1M -k 2n | uniq -c

[/bash]

Si quereis ver como configurar el firewall con algunos sencillos comandos, aqui los teneis.