Para desempolvar el blog, les dejo esta receta para configurar Fail2ban para detener ataques al servidor POP/IMAP Dovecot.
Al ver que cada vez eran más constantes en mis logs del servidor de correo estas líneas:
dovecot-auth: pam_succeed_if(dovecot:auth): error retrieving information about user staff
dovecot-auth: pam_succeed_if(dovecot:auth): error retrieving information about user sales
dovecot-auth: pam_succeed_if(dovecot:auth): error retrieving information about user recruit
dovecot-auth: pam_succeed_if(dovecot:auth): error retrieving information about user alias
dovecot-auth: pam_succeed_if(dovecot:auth): error retrieving information about user office
dovecot-auth: pam_succeed_if(dovecot:auth): error retrieving information about user samba
dovecot-auth: pam_succeed_if(dovecot:auth): error retrieving information about user tomcat
dovecot-auth: pam_succeed_if(dovecot:auth): error retrieving information about user webadmin
Decidí buscar alguna aplicación para detener estas amables “auditorías” de mis amigos los juanquers… pero antes un poco de historia:
Utilizo el servidor POP/IMAP Dovecot, que a su vez se conecta a una base de datos para verificar los usuarios virtuales de las cuentas de correo.
Una de las maravillas de contar con IPs fijas es que susceptible de ataques de spammers o script kiddies que siempre buscan la manera de mandar su correo electrónico no deseado o de simplemente joderte
Fail2ban es una aplicación hecha en Python que revisa los logs del sistema y bloquea con IPTables a la IP que hace muchos intentos de conectarse con un usuario.
Fail2ban puede monitorear aplicaciones como ssh, apache, vsftp y también servidores como Dovecot.
Dovecot a través de PAM verifica los usuarios y el log se ubica en /var/log/secure
Mi servidor corre CentOS 5
- Descargamos e instalamos fail2ban:
wget http://url-aqui/fail2ban-version.tar.bz2
tar xvzf fail2ban-version.tar.bz2
cd fail2ban-version
python setup.py install
- Configuramos fail2ban: archivo /etc/fail2ban/jail.conf
Agregamos nuestras redes locales para que fail2ban no las considere al momento del monitoreo, separadas por un espacio:
ignoreip = 127.0.0.1 192.168.4.0/24
Agregamos lo siguiente para monitorear Dovecot (cambiar direcciones de correo al gusto):
[dovecot]
enabled = true
filter = dovecot
action = iptables-multiport[name=Dovecot, port="110,995,143,993", protocol=tcp]
sendmail-whois[name=Dovecot, dest=your_email@your_domain.com, sender=fail2ban@mail.com]
logpath = /var/log/secure
maxretry = 3
- Creamos el archivo /etc/fail2ban/filter.d/dovecot.conf
Agregamos:
[Definition]
failregex = pam.*dovecot.*(?:authentication failure).*rhost=(?:::f{4,6}:)?(?P<host>\S*)
Esta expresión regular funciona bien para filtrar este tipo de log
dovecot-auth: pam_succeed_if(dovecot:auth): error retrieving information about user webadmin
- Probramos la configuración:
[root@mail fail2ban]# fail2ban-regex /var/log/secure /etc/fail2ban/filter.d/dovecot.conf
Obtendremos algo parecido a esto:
Running tests
=============
Use regex file : /etc/fail2ban/filter.d/dovecot.conf
Use log file : /var/log/secure
Results
=======
Failregex
|- Regular expressions:
| [1] pam.*dovecot.*(?:authentication failure).*rhost=(?:::f{4,6}:)?(?P<host>\S*)
|
`- Number of matches:
[1] 328 match(es)
Ignoreregex
|- Regular expressions:
|
`- Number of matches:
Summary
=======
Addresses found:
[1]
203.152.223.205 (Sun Aug 09 13:29:31 2009)
203.152.223.205 (Sun Aug 09 13:29:33 2009)
203.152.223.205 (Sun Aug 09 13:29:35 2009)
203.152.223.205 (Sun Aug 09 13:29:37 2009)
203.152.223.205 (Sun Aug 09 13:29:39 2009)
203.152.223.205 (Sun Aug 09 13:29:40 2009)
203.152.223.205 (Sun Aug 09 13:29:41 2009)
Date template hits:
21351 hit(s): Month Day Hour:Minute:Second
0 hit(s): Weekday Month Day Hour:Minute:Second Year
0 hit(s): Weekday Month Day Hour:Minute:Second
0 hit(s): Year/Month/Day Hour:Minute:Second
0 hit(s): Day/Month/Year Hour:Minute:Second
0 hit(s): Day/Month/Year:Hour:Minute:Second
0 hit(s): Year-Month-Day Hour:Minute:Second
0 hit(s): Day-Month-Year Hour:Minute:Second[.Millisecond]
0 hit(s): TAI64N
0 hit(s): Epoch
0 hit(s): ISO 8601
Success, the total number of match is 328
- Registramos fail2ban como servicio y lo configuramos para que arranque al inicio.
Regresamos al folder ail2ban-version.tar.bz2 y ejecutamos lo siguiente:
cd fail2ban-version
cp files/redhat-initd /etc/init.d/fail2ban (si es RH o CentOS, pero si es debian, también existe un script en el folder
)
chkconfig --add fail2ban
chkconfig fail2ban on
service fail2ban start
Listo. Ahora al tercer intento de conexión al servidor de correo
la IP del juanquer será bloqueada.
July 13th, 2010 at 1:20 pm
Hola puedes ayudarme a crear una expresion para filtrar esta linea de log:
dovecot-auth: pam_krb5[4335]: authentication fails for ‘user’ userl@domain.com): Authentication failure (Preauthentication failed)
Gracias de antemano.
July 13th, 2010 at 3:54 pm
Puedes probar con:
dovecot-auth: pam_krb5\[[0-9]*\]: authentication fails for*
O mejor aún: busca una línea parecida a ésta en /var/log/secure:
Jul 11 05:50:20 mail dovecot-auth: pam_unix(dovecot:auth): authentication failure; logname= uid=0 euid=0 tty=dovecot ruser= rhost=::ffff:203.45.26.143
Basados en ella podemos usar la regex del post:\S*)
[Definition]
failregex = pam.*dovecot.*(?:authentication failure).*rhost=(?:::f{4,6}:)?(?P
Saludos.
July 14th, 2010 at 1:14 pm
Gracias random,
La primera linea filtra bien, pero creo que como no sale en el log la ip por ningun sitio me da este error cuando pruebo el filtro:
Unable to find a corresponding IP address for ‘user’
La segunda opcion que me indicas, no aparece en el log secure ni en el maillog.
July 14th, 2010 at 2:05 pm
Nos vamos acercando.
Activando el auth_verbose en dovecot, ahora me sale en el log maillog la siguiente linea:
dovecot: auth(default): pam(user,192.168.1.5): pam_authenticate() failed: Permission denied
Creo que con esto a lo mejor es mas facil conseguir filtrar.
Que te parece?.