Sicurezza · 5 min read · Dec 29, 2025

Configurare fail2ban con SquirrelMail su Debian Lenny 5.0/ISPConfig 3

Configurare fail2ban con SquirrelMail su Debian Lenny 5.0/ISPConfig 3

In questo articolo mostrerò come prevenire attacchi di forza bruta con Fail2ban contro il tuo accesso Web SquirrelMail utilizzando il plugin Squirrel Logger.

1. Requisiti

Assicurati che fail2ban e SquirrelMail siano installati su una macchina Debian Lenny/ISPConfig 3.
Per installare ISPConfig 3 + SquirrelMail, segui questa guida.
Per installare fail2ban, segui questa guida.

2. Squirrel Logger

Scarica e installa 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

Se il tuo server non utilizza l’ora locale GMT, cambia $sl_use_GMT = 1 in $sl_use_GMT = 0:

...  
// Registrare le date in GMT?  Se non lo fai, le date saranno  
// registrate in qualsiasi fuso orario in cui si trova ogni utente (o  
// ha impostato nelle proprie preferenze personali)  
//  
//    1 = sì  
//    0 = no  
//  
$sl_use_GMT = 0;  
...

Cambia la posizione del tuo file di log da $sl_logfile = $data_dir . ‘squirrelmail_access_log’; a $sl_logfile = ‘/var/log/squirrelmail.log’;:

...  
// La posizione del tuo file di log quando registri su file.  
// Assicurati che l'utente con cui gira il tuo server web possa scrivere  
// su questo file.  Usa la variabile $data_dir se vuoi  
// posizionare il file di log nella directory dati di SquirrelMail.  
//  
// Applicabile solo quando $sl_logs include "file".  
//  
// $sl_logfile = $data_dir . 'squirrelmail_access_log';  
$sl_logfile = '/var/log/squirrelmail.log';  
...

Cambia il formato della data per corrispondere all’espressione regolare di fail2ban da $sl_dateformat = ‘m/d/Y H:i:s’; a $sl_dateformat = ‘M j H:i:s’;:

...  
// Specifica quale formato di data desideri  
//  
// Vedi il manuale PHP per la funzione data per aiuto  
// su http://www.php.net/manual/function.date.php  
//  
// esempi:  
//  
//    'm/d/y H:i:s'     ==  03/10/2001 05:16:08  
//    'F j, Y, g:i a'   ==  10 marzo 2001, 5:16 am  
//    'D M j Y H:i:s T' ==  Sab Mar 10 2001 15:16:08 CDT  
//  
// $sl_dateformat = 'm/d/Y H:i:s';  
$sl_dateformat = 'M j H:i:s';  
... 

Crea un nuovo file squirrelmail.log in /var/log/:

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

Pulisci l’installazione:

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

Configura SquirrelMail per utilizzare il plugin Squirrel Logger:

squirrelmail-configure
...  
7.  Messaggio del giorno (MOTD)  
8.  Plugin  
9.  Database  
... 

Seleziona “Plugin”, nel mio caso, numero 8.

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

Seleziona squirrel_logger, nel mio caso, numero 19.

...  
Plugin installati  
1. delete_move_next  
2. squirrelspell  
3. newmail  
4. squirrel_logger  
... 

Ora squirrel_logger è parte dei Plugin installati.
Salva i dati “S” e Esci “Q”.

3. Configurazione di Fail2ban

Configura fail2ban per utilizzare il log di SquirrelMail:

cd /etc/fail2ban

Apri e aggiungi le seguenti righe al file jail.local. Se non hai questo file, usa il file di default jail.conf.

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

Assicurati che bantime (in secondi) e maxretry siano impostati secondo le tue esigenze.

Nella directory filter.d, crea un file squirrelmail.conf con il seguente contenuto:

cd filter.d  
vi squirrelmail.conf
# File di configurazione Fail2Ban  
#  
# Autore: Bill Landry ((email_protected))  
#  
# $Revision: 510 $  
  
[Definition]  
  
# Opzione: failregex  
# Note.: regex per abbinare i messaggi di errore di password nel logfile. Il  
#         host deve essere abbinato da un gruppo chiamato "host". Il tag "" può  
#         essere utilizzato per l'abbinamento standard IP/nome host ed è solo un alias per  
#         (?:::f{4,6}:)?(?P\S+)  
# Valori: TESTO  
  
failregex = \[LOGIN_ERROR\].*from : Utente sconosciuto o password errata  
  
# Opzione:  ignoreregex  
# Note.:  regex da ignorare. Se questa regex corrisponde, la riga viene ignorata.  
# Valori:  TESTO  
  
ignoreregex = 

IMPORTANTE: se stai utilizzando un’altra lingua oltre all’inglese, cambia la riga “failregex” con il testo che squirrelmail.log ti mostra nel punto 5.

Esempio: con la lingua spagnola, ottengo questo nel file di log.

20 agosto 15:26:06 [LOGIN_ERROR] [email protected] (server.domain.com) da XXX.XXX.XX.XX: Utente o password errata. 

Quindi, faccio questa modifica:

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

…e riavvio fail2ban.

/etc/init.d/fail2ban restart

5. Testare l’installazione

cd /var/log  
tail -f squirrelmail.log

Accedi “3” volte all’interfaccia Web di SquirrelMail utilizzando “password errate”.
Questa procedura ti mostrerà i tentativi di accesso falliti nelle finestre del terminale:

19 agosto 13:57:20 [LOGIN_ERROR] [email protected] (server.domain.com) da XXX.XXX.XX.XX: Utente sconosciuto o password errata.  
19 agosto 13:57:34 [LOGIN_ERROR] [email protected] (server.domain.com) da XXX.XXX.XX.XX: Utente sconosciuto o password errata.  
19 agosto 13:57:46 [LOGIN_ERROR] [email protected] (server.domain.com) da XXX.XXX.XX.XX: Utente sconosciuto o password errata.

Chiudi il file squirrelmail.log:

Ctrl-c

Verifica che fail2ban-regex possa catturare questi errori:

fail2ban-regex /var/log/squirrelmail.log /etc/fail2ban/filter.d/squirrelmail.conf
Esecuzione dei test  
=============  
  
Usa il file regex : /etc/fail2ban/filter.d/squirrelmail.conf  
Usa il file di log   : /var/log/squirrelmail.log  
  
  
Risultati  
=======  
  
Failregex  
|- Espressioni regolari:  
|  [1] \[LOGIN_ERROR\].*from : Utente sconosciuto o password errata  
|  
`- Numero di corrispondenze:  
   [1] 3 corrispondenza(e)  
  
Ignoreregex  
|- Espressioni regolari:  
|  
`- Numero di corrispondenze:  
  
Riepilogo  
=======  
  
Indirizzi trovati:  
[1]  
    200.113.105.235 (Mer 19 agosto 13:57:20 2009)  
    200.113.105.235 (Mer 19 agosto 13:57:34 2009)  
    200.113.105.235 (Mer 19 agosto 13:57:46 2009)  
  
Colpi del modello di data:  
3 colpo(i): Mese Giorno Ora:Minuto:Secondo  
0 colpo(i): Giorno della settimana Mese Giorno Ora:Minuto:Secondo Anno  
0 colpo(i): Giorno della settimana Mese Giorno Ora:Minuto:Secondo  
0 colpo(i): Anno/Mese/Giorno Ora:Minuto:Secondo  
0 colpo(i): Giorno/Mese/Anno Ora:Minuto:Secondo  
0 colpo(i): Giorno/Mese/Anno:Ora:Minuto:Secondo  
0 colpo(i): Anno-Mese-Giorno Ora:Minuto:Secondo  
0 colpo(i): Giorno-Mese-Anno Ora:Minuto:Secondo[.Millisecondo]  
0 colpo(i): TAI64N  
0 colpo(i): Epoch  
0 colpo(i): ISO 8601  
  
Successo, il numero totale di corrispondenze è 3  
  
Tuttavia, guarda la sezione sopra 'Esecuzione dei test' che potrebbe contenere informazioni importanti.

Se vedi questa riga, tutto va bene: Successo, il numero totale di corrispondenze è 3

6. Testiamo il nostro Fail2ban

Accedi “4” volte (o più, a seconda della tua configurazione maxretry) all’interfaccia Web di SquirrelMail utilizzando “password errate”.

Quando vieni bloccato, significa che non puoi vedere la pagina di accesso, esegui:

iptables -L

Ora puoi vedere il tuo IP bloccato xxx-xxx-xxx-xxx nell’output di iptables.

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

Buona fortuna ;)

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.