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.