Seguridad · 4 min read · Jan 02, 2026

Configurando fail2ban con SquirrelMail en CentOS 5.3/ISPConfig 3

Configurando fail2ban con SquirrelMail en CentOS 5.3/ISPConfig 3

Introducción

Este tutorial muestra cómo puedes prevenir intentos de inicio de sesión ilimitados y, por lo tanto, ataques de fuerza bruta contra tu inicio de sesión web de SquirrelMail utilizando fail2ban.

1. Requisitos

Asegúrate de que tanto fail2ban como SquirrelMail estén instalados en una máquina CentOS v5.3/ISPConfig 3 detallada aquí.

Sin embargo, su instalación es sencilla:

yum install fail2ban squirrelmail

Debes estar utilizando iptables como tu firewall. Fail2ban funciona creando una regla de eliminación temporal para la dirección IP de origen no autorizada.

2. Configuración de registro de SquirrelMail

SquirrelMail (imapd) en CentOS v5.3/ISPConfig 3 por defecto registra en /var/log/maillog pero solo como dirección IP 127.0.0.1 (localhost). Dado que estamos tratando de prohibir una dirección de origen específica, fail2ban no puede usar este archivo. Por lo tanto, instalamos y usamos Squirrel Logger para capturar la verdadera dirección de origen del intento de inicio de sesión.

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-2.3-1.2.7  
cp config_example.php config.php

Mientras que este plugin era la última versión de Squirrel Logger, si ha habido una actualización de revisión, descárgalo directamente desde el sitio de Plugins de SquirrelMail aquí.

Si tu máquina utiliza una hora local que no es GMT, usa vi para cambiar: $sl_use_GMT = 1 a $sl_use_GMT = 0 en config.php:

Archivo original config.php:

...
// ¿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 = 1;
...

Archivo modificado config.php:

...
// ¿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;
...

Elimina el archivo gzip de Squirrel Logger descargado:

cd /usr/share/squirrelmail/plugins  
rm squirrel_logger-2.3-1.2.7.tar.gz

Configura SquirrelMail para usar el plugin Squirrel Logger:

/usr/share/squirrelmail/config/conf.pl
Configuración de SquirrelMail : Leer: config.php (1.4.0)
---------------------------------------------------------
Menú Principal --
1.  Preferencias de Organización
2.  Configuración del Servidor
3.  Valores Predeterminados de Carpeta
4.  Opciones Generales
5.  Temas
6.  Libros de Direcciones
7.  Mensaje del Día (MOTD)
8.  Plugins
9.  Base de Datos
10. Idiomas

D.  Establecer configuraciones predefinidas para servidores IMAP específicos

C   Activar color
S   Guardar datos
Q   Salir

Comando >>
Seleccionar: Plugins
Configuración de SquirrelMail : Leer: config.php (1.4.0)
---------------------------------------------------------
Plugins
  Plugins Instalados
    1. delete_move_next
    2. squirrelspell
    3. newmail  

  Plugins Disponibles:
    4. listcommands
    5. fortune
    6. filters
    7. translate
    8. abook_take
    9. spamcop
    10. squirrel_logger
    11. mail_fetch
    12. calendar
    13. sent_subfolders
    14. message_details
    15. administrator
    16. info
    17. bug_report

R   Volver al Menú Principal
C   Activar color
S   Guardar datos
Q   Salir

Comando >> 
Seleccionar: squirrel_logger
Configuración de SquirrelMail : Leer: config.php (1.4.0)
---------------------------------------------------------
Plugins
  Plugins Instalados
    1. delete_move_next
    2. squirrelspell
    3. newmail
    4. squirrel_logger  

  Plugins Disponibles:
    5. listcommands
    6. fortune
    7. filters
    8. translate
    9. abook_take
    10. spamcop
    11. mail_fetch
    12. calendar
    13. sent_subfolders
    14. message_details
    15. administrator
    16. info
    17. bug_report

R   Volver al Menú Principal
C   Activar color
S   Guardar datos
Q   Salir

Comando >> 
Seleccionar: Guardar datos, Salir

3. Configuración de fail2ban

Cambia al directorio de configuración de fail2ban:

cd /etc/fail2ban

Asumiendo que estás utilizando el transporte http para SquirrelMail, usa vi para agregar las siguientes líneas al archivo jail.conf:

[squirrelmail-iptables]
enabled  = true
filter   = squirrelmail
action   = iptables[name=SquirrelMail, port=http, protocol=tcp]
           sendmail-whois[name=SquirrelMail, dest=you@your_domain.com, sender=fail2ban@your_domain.com]
logpath  = /var/lib/squirrelmail/prefs/squirrelmail_access_log
maxretry = 4

Asegúrate de que maxretry y las direcciones de correo electrónico para dest y sender estén configuradas según tus requisitos.

Cambia al directorio de filtros de fail2ban:

cd filter.d

En el directorio filter.d, usa vi para crear un archivo squirrelmail.conf con el siguiente contenido:

# 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 coincidir con 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 desconocido o contraseña incorrecta

# Opción:  ignoreregex
# Notas.:  regex para ignorar. Si este regex coincide, la línea es ignorada.
# Valores:  TEXTO

ignoreregex =

Fail2ban necesita reconocer el formato de fecha utilizado en el archivo squirrelmail_access_log.

cd /usr/share/fail2ban/server

Usa vi para editar el archivo datedetector.py y agrega las siguientes líneas entre las secciones de formato de Apache y Exim:

# SquirrelMail 09/13/2007 06:43:20
template = DateStrptime()
template.setName("Month/Day/Year Hour:Minute:Second")
template.setRegex("\d{2}/\d{2}/\d{4} \d{2}:\d{2}:\d{2}")
template.setPattern("%m/%d/%Y %H:%M:%S")
self.__templates.append(template)
Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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