Seguridad · 5 min read · Dec 29, 2025

Configurando fail2ban con SquirrelMail en Debian Lenny 5.0/ISPConfig 3

Configurando fail2ban con SquirrelMail en Debian Lenny 5.0/ISPConfig 3

En este artículo, mostraré cómo prevenir ataques de fuerza bruta con Fail2ban contra tu inicio de sesión web de SquirrelMail utilizando el plugin Squirrel Logger.

1. Requisitos

Asegúrate de que fail2ban y SquirrelMail estén instalados en una máquina Debian Lenny/ISPConfig 3.
Para instalar ISPConfig 3 + SquirrelMail, por favor sigue esta guía.
Para instalar fail2ban, por favor sigue esta guía.

2. Squirrel Logger

Descarga e instala Squirrel Logger:

cd /usr/share/squirrelmail/plugins  
wget http://squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fsquirrel_logger-2.3-1.2.7.tar.gz  
tar zxvf squirrel_logger-2.3-1.2.7.tar.gz  
cd squirrel_logger  
cp config_example.php config.php

Configura Squirrel Logger:

vi config.php

Si tu servidor no utiliza la hora local GMT, por favor cambia $sl_use_GMT = 1 a $sl_use_GMT = 0:

...  
// ¿Registrar fechas en GMT?  Si no haces esto, las fechas se  
// registrarán en la zona horaria en la que se encuentre cada usuario  
// (o que haya establecido en sus preferencias personales)  
//  
//    1 = sí  
//    0 = no  
//  
$sl_use_GMT = 0;  
...

Cambia la ubicación de tu archivo de registro de $sl_logfile = $data_dir . ‘squirrelmail_access_log’; a $sl_logfile = ‘/var/log/squirrelmail.log’;:

...  
// La ubicación de tu archivo de registro al registrar en un archivo.  
// Asegúrate de que el usuario con el que se ejecuta tu servidor web pueda escribir  
// en este archivo.  Usa la variable $data_dir si deseas  
// colocar el archivo de registro en el directorio de datos de SquirrelMail.  
//  
// Solo aplicable cuando $sl_logs incluye "file".  
//  
// $sl_logfile = $data_dir . 'squirrelmail_access_log';  
$sl_logfile = '/var/log/squirrelmail.log';  
...

Cambia el formato de fecha para que coincida con la expresión regular de fail2ban de $sl_dateformat = ‘m/d/Y H:i:s’; a $sl_dateformat = ‘M j H:i:s’;:

...  
// Especifica qué formato de fecha deseas  
//  
// Consulta el manual de PHP para la función de fecha para obtener ayuda  
// en http://www.php.net/manual/function.date.php  
//  
// ejemplos:  
//  
//    'm/d/y H:i:s'     ==  03/10/2001 05:16:08  
//    'F j, Y, g:i a'   ==  March 10, 2001, 5:16 am  
//    'D M j Y H:i:s T' ==  Sat Mar 10 2001 15:16:08 CDT  
//  
// $sl_dateformat = 'm/d/Y H:i:s';  
$sl_dateformat = 'M j H:i:s';  
... 

Crea un nuevo archivo squirrelmail.log en /var/log/:

touch /var/log/squirrelmail.log  
chown www-data:www-data /var/log/squirrelmail.log  
chmod 640 /var/log/squirrelmail.log

Limpia la instalación:

cd ..  
rm squirrel_logger-2.3-1.2.7.tar.gz

Configura SquirrelMail para usar el plugin Squirrel Logger:

squirrelmail-configure
...  
7. Mensaje del Día (MOTD)  
8. Plugins  
9. Base de datos  
... 

Selecciona “Plugins”, en mi caso, el número 8.

...  
18. spamcop  
19. squirrel_logger  
20. squirrelspell  
21. prueba  
... 

Selecciona squirrel_logger, en mi caso, el número 19.

...  
Plugins instalados  
1. delete_move_next  
2. squirrelspell  
3. newmail  
4. squirrel_logger  
... 

Ahora squirrel_logger es parte de los Plugins Instalados.
Guarda los datos “S” y Sal “Q”.

3. Configuración de Fail2ban

Configura fail2ban para usar el registro de SquirrelMail:

cd /etc/fail2ban

Abre y agrega las siguientes líneas al archivo jail.local. Si no tienes este archivo, usa el jail.conf por defecto.

vi jail.local
[squirrelmail]  
  
enabled = true  
port = http,https  
filter = squirrelmail  
logpath = /var/log/squirrelmail.log  
bantime = 300  
maxretry = 4 

Por favor, asegúrate de que bantime (en segundos) y maxretry estén configurados según tus requisitos.

En el directorio filter.d, crea un archivo squirrelmail.conf con el siguiente contenido:

cd filter.d  
vi squirrelmail.conf
# Archivo de configuración de Fail2Ban  
#  
# Autor: Bill Landry ((email_protected))  
#  
# $Revision: 510 $  
  
[Definition]  
  
# Opción: failregex  
# Notas.: regex para coincidir con los mensajes de fallos de contraseña en el archivo de registro. El  
#         host debe ser coincido por un grupo llamado "host". La etiqueta "" puede  
#         ser utilizada para coincidencias estándar de IP/nombre de host y es solo un alias para  
#         (?:::f{4,6}:)?(?P\S+)  
# Valores: TEXTO  
  
failregex = \[LOGIN_ERROR\].*from : Usuario o contraseña incorrecto  
  
# Opción: ignoreregex  
# Notas.: regex para ignorar. Si esta regex coincide, la línea es ignorada.  
# Valores: TEXTO  
  
ignoreregex = 

IMPORTANTE: si estás utilizando otro idioma que no sea inglés, por favor cambia la línea “failregex” con el texto que squirrelmail.log te muestra en el punto 5.

Ejemplo: con el idioma español, obtengo esto en el archivo de registro.

Aug 20 15:26:06 [LOGIN_ERROR] [email protected] (server.domain.com) from XXX.XXX.XX.XX: Usuario o contraseña incorrecto. 

Así que, hago este cambio:

failregex = \[LOGIN_ERROR\].*from : Usuario o contraseña incorrecto

…y reinicio fail2ban.

/etc/init.d/fail2ban restart

5. Probando la instalación

cd /var/log  
tail -f squirrelmail.log

Inicia sesión “3” veces en la interfaz web de SquirrelMail utilizando “contraseñas incorrectas”.
Este procedimiento te mostrará los intentos de inicio de sesión fallidos en las ventanas del terminal:

Aug 19 13:57:20 [LOGIN_ERROR] [email protected] (server.domain.com) from XXX.XXX.XX.XX: Usuario o contraseña incorrecto.  
Aug 19 13:57:34 [LOGIN_ERROR] [email protected] (server.domain.com) from XXX.XXX.XX.XX: Usuario o contraseña incorrecto.  
Aug 19 13:57:46 [LOGIN_ERROR] [email protected] (server.domain.com) from XXX.XXX.XX.XX: Usuario o contraseña incorrecto.

Cierra el archivo squirrelmail.log:

Ctrl-c

Verifica que fail2ban-regex pueda atrapar estos errores:

fail2ban-regex /var/log/squirrelmail.log /etc/fail2ban/filter.d/squirrelmail.conf
Ejecutando pruebas  
=============  
  
Usar archivo regex : /etc/fail2ban/filter.d/squirrelmail.conf  
Usar archivo de registro   : /var/log/squirrelmail.log  
  
  
Resultados  
=======  
  
Failregex  
|- Expresiones regulares:  
|  [1] \[LOGIN_ERROR\].*from : Usuario o contraseña incorrecto  
|  
`- Número de coincidencias:  
   [1] 3 coincidencia(s)  
  
Ignoreregex  
|- Expresiones regulares:  
|  
`- Número de coincidencias:  
  
Resumen  
=======  
  
Direcciones encontradas:  
[1]  
    200.113.105.235 (Wed Aug 19 13:57:20 2009)  
    200.113.105.235 (Wed Aug 19 13:57:34 2009)  
    200.113.105.235 (Wed Aug 19 13:57:46 2009)  
  
Plantillas de fecha hits:  
3 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  
  
Éxito, el número total de coincidencias es 3  
  
Sin embargo, mira la sección anterior 'Ejecutando pruebas' que podría contener información importante.

Si ves esta línea, todo está bien: Éxito, el número total de coincidencias es 3

6. Probemos nuestro Fail2ban

Inicia sesión “4” veces (o más, dependiendo de tu configuración de maxretry) en la interfaz web de SquirrelMail utilizando “contraseñas incorrectas”.

Cuando te bloqueen, eso significa que no puedes ver la página de inicio de sesión, por favor ejecuta:

iptables -L

Ahora puedes ver tu IP bloqueada xxx-xxx-xxx-xxx en la salida de iptables.

Chain fail2ban-squirrelmail (1 referencias)  
target     prot opt source               destination  
DROP       all  --  xxx-xxx-xxx-xxx.your.isp.info  anywhere  
RETURN     all  --  anywhere             anywhere  

Buena suerte ;)

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.