Fail2ban es una herramienta que observa los intentos de login de variados servicios, tales como SSH, FTP, SMTP, HTTP, entre otros; y si encuentra intentos de login fallidos una y otra vez desde una misma IP, fail2ban rechazará estos intentos de login bloqueando con reglas de iptables a esas IPs que estaban intentando.
Nota: lo siguiente ha sido probado en CentOS 6.2.
Instalación
yum install fail2ban -y
Configuración
Una pequeña explicación de los principales parámetros:
ignoreip: esta es una lista de IPs separadas por -espacio en blanco- que no serán bloqueadas por fail2ban.
bantime: es el tiempo (expresado en segundos) que un host es bloqueado por fail2ban
maxretry: es el número máximo de intentos de login fallidos antes de que el host se bloqueado por fail2ban
filter: se refiera a la utilización de un filtro apropiado en /etc/fail2ban/filter.d
logpath: el archivo de log que fail2ban utiliza para revisar los intentos de login
La configuración principal del servicio es /etc/fail2ban/fail2ban.conf (aquí cambiamos el log para que se guarde en un archivo independiente)
[Definition]
loglevel = 3
logtarget = /var/log/fail2ban.log
socket = /var/run/fail2ban/fail2ban.sock
El archivo /etc/fail2ban/jail.conf es un archivo como referencia válido funcionalmente y como ejemplo, pero haremos uno "personalizado", empezando desde cero:
- Renombrar el archivo /etc/fail2ban/jail.conf:
mv /etc/fail2ban/jail.conf /etc/fail2ban/jail.orig
- Crear el archivo /etc/fail2ban/jail.local
[DEFAULT]
ignoreip = 127.0.0.1 192.168.0.50
bantime = 600
findtime = 600
maxretry = 3
backend = auto
# Default action to take: ban only
action = iptables[name=%(__name__)s, port=%(port)s]
[ssh-iptables]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure
maxretry = 3
- Subir el servicio
service fail2ban start
chkconfig fail2ban on
- Pruebas:
* Se intenta hacer logins fallidos por ssh desde otro servidor
* Se revisan los logs de fail2ban
2012-07-24 23:57:33,789 fail2ban.actions: WARNING [ssh-iptables] Ban 192.168.0.7
* Se revisan las reglas de iptables
# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-ssh-iptables tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain fail2ban-ssh-iptables (1 references)
target prot opt source destination
DROP all -- 192.168.0.7 0.0.0.0/0
RETURN all -- 0.0.0.0/0 0.0.0.0/0
El host 192.168.0.7 ya está bloqueado por intentos fallidos por SSH. Estará bloqueado por 10 minutos (bantime).
Nota al final:
Fail2ban viene con una serie de filtros ya predefinidos, pero es posible desarrollar los propios, o ir cambiando las expresiones regulares para adaptarlo a las propias necesidades.
TODO:
- Enviar correos de notificaciones de bloqueos
- Realizar los filtros para zimbra y especialmente intentos de conexión pop, imap, sasl
Referencias:
http://www.fail2ban.org/wiki/index.php/MANUAL_0_8
http://www.howtoforge.com/fail2ban_debian_etch
http://grinux.wordpress.com/2012/02/14/fail2ban-tutorial-scan-log-files-and-ban-ips
http://www.howtoforge.com/forums/showthread.php?t=45597
0 Comentarios