Sécurité · 5 min read · Dec 29, 2025

Configurer fail2ban avec SquirrelMail sur Debian Lenny 5.0/ISPConfig 3

Configurer fail2ban avec SquirrelMail sur Debian Lenny 5.0/ISPConfig 3

Dans cet article, je vais montrer comment prévenir les attaques par force brute avec Fail2ban contre votre connexion Web SquirrelMail en utilisant le plugin Squirrel Logger.

1. Exigences

Assurez-vous que fail2ban et SquirrelMail sont installés sur une machine Debian Lenny/ISPConfig 3.
Pour installer ISPConfig 3 + SquirrelMail, veuillez suivre ce guide.
Pour installer fail2ban, veuillez suivre ce guide.

2. Squirrel Logger

Téléchargez et installez 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

Configurez Squirrel Logger :

vi config.php

Si votre serveur n’utilise pas l’heure locale GMT, veuillez changer $sl_use_GMT = 1 en $sl_use_GMT = 0 :

...  
// Enregistrer les dates en GMT ?  Si vous ne le faites pas, les dates seront  
// enregistrées dans le fuseau horaire de chaque utilisateur (ou  
// défini dans ses préférences personnelles)  
//  
//    1 = oui  
//    0 = non  
//  
$sl_use_GMT = 0;  
...

Changez l’emplacement de votre fichier journal de $sl_logfile = $data_dir . ‘squirrelmail_access_log’; en $sl_logfile = ‘/var/log/squirrelmail.log’; :

...  
// L'emplacement de votre fichier journal lors de l'enregistrement dans un fichier.  
// Assurez-vous que l'utilisateur sous lequel votre serveur web fonctionne peut écrire  
// dans ce fichier.  Utilisez la variable $data_dir si vous  
// souhaitez placer le fichier journal dans le répertoire de données SquirrelMail.  
//  
// Applicable uniquement lorsque $sl_logs inclut "file".  
//  
// $sl_logfile = $data_dir . 'squirrelmail_access_log';  
$sl_logfile = '/var/log/squirrelmail.log';  
...

Changez le format de date pour correspondre à l’expression régulière fail2ban de $sl_dateformat = ‘m/d/Y H:i:s’; en $sl_dateformat = ‘M j H:i:s’; :

...  
// Spécifiez quel format de date vous souhaitez  
//  
// Consultez le manuel PHP pour la fonction date pour obtenir de l'aide  
// à http://www.php.net/manual/function.date.php  
//  
// exemples :  
//  
//    'm/d/y H:i:s'     ==  03/10/2001 05:16:08  
//    'F j, Y, g:i a'   ==  10 mars 2001, 5:16 am  
//    'D M j Y H:i:s T' ==  Sam Mar 10 2001 15:16:08 CDT  
//  
// $sl_dateformat = 'm/d/Y H:i:s';  
$sl_dateformat = 'M j H:i:s';  
... 

Créez un nouveau fichier squirrelmail.log dans /var/log/ :

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

Nettoyez l’installation :

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

Configurez SquirrelMail pour utiliser le plugin Squirrel Logger :

squirrelmail-configure
...  
7.  Message du jour (MOTD)  
8.  Plugins  
9.  Base de données  
... 

Sélectionnez “Plugins”, dans mon cas, le numéro 8.

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

Sélectionnez squirrel_logger, dans mon cas, le numéro 19.

...  
Plugins installés  
1. delete_move_next  
2. squirrelspell  
3. newmail  
4. squirrel_logger  
... 

Maintenant, squirrel_logger fait partie des plugins installés.
Enregistrez les données “S” et quittez “Q”.

3. Configuration de Fail2ban

Configurez fail2ban pour utiliser le journal SquirrelMail :

cd /etc/fail2ban

Ouvrez et ajoutez les lignes suivantes au fichier jail.local. Si vous n’avez pas ce fichier, utilisez le fichier jail.conf par défaut.

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

Veuillez vous assurer que bantime (en secondes) et maxretry sont définis selon vos besoins.

Dans le répertoire filter.d, créez un fichier squirrelmail.conf avec le contenu suivant :

cd filter.d  
vi squirrelmail.conf
# Fichier de configuration Fail2Ban  
#  
# Auteur : Bill Landry ((email_protected))  
#  
# $Revision: 510 $  
  
[Definition]  
  
# Option : failregex  
# Notes : regex pour correspondre aux messages d'échec de mot de passe dans le fichier journal. Le  
#         hôte doit être correspondre par un groupe nommé "host". Le tag "" peut  
#         être utilisé pour la correspondance IP/nom d'hôte standard et est uniquement un alias pour  
#         (?:::f{4,6}:)?(?P\S+)  
# Valeurs : TEXTE  
  
failregex = \[LOGIN_ERROR\].*from : Utilisateur inconnu ou mot de passe incorrect  
  
# Option :  ignoreregex  
# Notes :  regex à ignorer. Si cette regex correspond, la ligne est ignorée.  
# Valeurs :  TEXTE  
  
ignoreregex = 

IMPORTANT : si vous utilisez une autre langue que l’anglais, veuillez changer la ligne “failregex” avec le texte que squirrelmail.log vous montre au point 5.

Exemple : avec la langue espagnole, j’obtiens ceci dans le fichier journal.

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

Donc, je fais ce changement :

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

…et redémarrez fail2ban.

/etc/init.d/fail2ban restart

5. Tester l’installation

cd /var/log  
tail -f squirrelmail.log

Connectez-vous “3” fois à l’interface Web SquirrelMail en utilisant “des mots de passe incorrects”.
Cette procédure vous montre les tentatives de connexion échouées dans les fenêtres de terminal :

19 août 13:57:20 [LOGIN_ERROR] [email protected] (server.domain.com) from XXX.XXX.XX.XX: Utilisateur inconnu ou mot de passe incorrect.  
19 août 13:57:34 [LOGIN_ERROR] [email protected] (server.domain.com) from XXX.XXX.XX.XX: Utilisateur inconnu ou mot de passe incorrect.  
19 août 13:57:46 [LOGIN_ERROR] [email protected] (server.domain.com) from XXX.XXX.XX.XX: Utilisateur inconnu ou mot de passe incorrect.

Fermez le fichier squirrelmail.log :

Ctrl-c

Vérifiez que fail2ban-regex peut capturer ces erreurs :

fail2ban-regex /var/log/squirrelmail.log /etc/fail2ban/filter.d/squirrelmail.conf
Exécution des tests  
=============  
  
Utiliser le fichier regex : /etc/fail2ban/filter.d/squirrelmail.conf  
Utiliser le fichier journal   : /var/log/squirrelmail.log  
  
  
Résultats  
=======  
  
Failregex  
|- Expressions régulières :  
|  [1] \[LOGIN_ERROR\].*from : Utilisateur inconnu ou mot de passe incorrect  
|  
`- Nombre de correspondances :  
   [1] 3 correspondance(s)  
  
Ignoreregex  
|- Expressions régulières :  
|  
`- Nombre de correspondances :  
  
Résumé  
=======  
  
Adresses trouvées :  
[1]  
    200.113.105.235 (Mer 19 août 13:57:20 2009)  
    200.113.105.235 (Mer 19 août 13:57:34 2009)  
    200.113.105.235 (Mer 19 août 13:57:46 2009)  
  
Hits de modèle de date :  
3 hit(s) : Mois Jour Heure:Minute:Seconde  
0 hit(s) : Jour de la semaine Mois Jour Heure:Minute:Seconde Année  
0 hit(s) : Jour de la semaine Mois Jour Heure:Minute:Seconde  
0 hit(s) : Année/Mois/Jour Heure:Minute:Seconde  
0 hit(s) : Jour/Mois/Année Heure:Minute:Seconde  
0 hit(s) : Jour/Mois/Année:Heure:Minute:Seconde  
0 hit(s) : Année-Mois-Jour Heure:Minute:Seconde  
0 hit(s) : Jour-Mois-Année Heure:Minute:Seconde[.Milliseconde]  
0 hit(s) : TAI64N  
0 hit(s) : Époque  
0 hit(s) : ISO 8601  
  
Succès, le nombre total de correspondances est 3  
  
Cependant, regardez la section ci-dessus 'Exécution des tests' qui pourrait contenir des informations importantes.

Si vous voyez cette ligne, tout va bien : Succès, le nombre total de correspondances est 3

6. Testons notre Fail2ban

Connectez-vous “4” fois (ou plus, selon votre configuration maxretry) à l’interface Web SquirrelMail en utilisant “des mots de passe incorrects”.

Lorsque vous êtes bloqué, cela signifie que vous ne pouvez pas voir la page de connexion, veuillez exécuter :

iptables -L

Maintenant, vous pouvez voir votre IP bloquée xxx-xxx-xxx-xxx dans la sortie iptables.

Chaîne fail2ban-squirrelmail (1 référence)  
target     prot opt source               destination  
DROP       all  --  xxx-xxx-xxx-xxx.your.isp.info  anywhere  
RETURN     all  --  anywhere             anywhere 

Bonne chance ;)

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.