Felice Balsamo

Un po' tecnologia, viaggi e la buona cucina

Fail2Ban configurazione per Zimbra 8.8.15

Finalmente dopo tanto penare ho trovato la giusta configurazione per bloccare gli innumerevoli tentativi di accesso (brute force) alle caselle mail su Zimbra utilizzando sistemi di “forza bruta“.
Andiamo con calma fino alla soluzione che in fin dei conti seguendo passo passo è tutto davvero molto semplice e lineare.

Per prima cosa chiariamo perché è utile Fail2Ban

Fail2Ban è un applicativo open source per sistemi Linux e come si evince dal nome stesso, ogni tentativo d’accesso fallito su qualunque applicazione presente sui sistemi Linux, sono bannati (bloccati o respinti) per evitare continui tentativi. E’ molto utilizzato per limitare gli accessi alla porta 22 solitamente utilizzata e aperta a tutti per le connessioni SSH dei sistemi Linux. I bot in modo automatico e continuativo tentano illimitate sequenze di utente e password alla ricerca di quella giusta sui vari servizi attivi.

Non entro nel merito in questo post dei sistemi di sicurezza e contromisure da attuare per gli accessi SSH, ma fail2ban ad esempio, può essere utilizzato per bloccare un indirizzo IP che per 3 volte in 10 minuti esegue un tentativo d’accesso errato ad una nostra risorsa.

Come è facile intuire quindi Fail2Ban funziona principalmente su 4 parametri:

  • Servizio da controllare (SSH, Postfix, Apache, ecc…)
  • Numero di tentativi errati da raggiungere da parte di un indirizzo ip per attuare il blocco
  • Tempo entro cui i tentativi devono verificarsi
  • Tempo di blocco dell’indirizzo IP

Ovviamente sono presenti anche altri parametri ma questi sono quelli minimi indispensabili per attivare un controllo.
Fai2Ban prevede una cartella (/etc/fail2ban/filter.d) con una buona quantità di regole già create finalizzate all’individuazione dei vari tentativi d’accesso per le applicazioni più diffuse.
Purtroppo manca di default quella per Zimbra che dobbiamo creare noi.

Nel caso di Zimbra i tentativi d’accesso vengono eseguiti sulle porte 80 e 443 quindi per accessi webmail e per le porte IMAP, POP3 e SMTP. Da porre attenzione al protocollo SMTP, sul web si trovano soluzioni solo per il blocco dei tentativi errati sulla porta SMTP o SMTPS, questo perchè i bot sono alla continua ricerca di server per inviare SPAM i cui tentativi sono finalizzati ad individuare una coppia email e password che abiliti appunto l’invio di posta.
Ma di fatto i tentativi non avvengono solo sulla posta in uscita ma anche per quelli IMAP e POP3 e WEB, sperando di individuarne una coppia semplice.

Ovviamente si presuppone che le password siano almeno “difficili”, trascurando il concetto di “complesse”, quindi prima di iniziare consiglio almeno di impostare password composte da 9 caratteri in cui siano presenti almeno una maiuscola, lettere e numeri evitando soluzioni come: Aaaaaaaa1.

I bot hanno un dizionario molto ampio ormai grazie ad anni di password rubate, per cui i primi tentativi d’accesso si basano proprio sulle password più comuni e ovvie per poi passare ai tentativi: aaaaaaaa0, aaaaaaaa1, ….. aaaaaaab9, all’infinito fino ad indovinare la giusta combinazione.

Ecco perché è importante sempre e comunque bloccare gli indirizzi IP che eseguono un numero di tentativi d’accesso elevato in breve tempo e in modo costante. Ovviamente non possiamo usare parametri troppo stringenti perché può capitare che si possa inserire soprattutto quando si utilizza la webmail una password errata per un certo numero di volte in buona fede, pertanto è opportuno trovare un giusto compresso tra numero di tentativi e minuti di blocco.

Configuriamo Zimbra per evitare tentativi continui d’accesso alle caselle email

Prima di configurare Fail2Ban configuriamo Zimbra dal pannello di amministratore per bloccare gli account in caso di accessi errati consecutivi, (quindi attenzione qui blocchiamo tutto l’account, non l’indirizzo IP). La funzione va attivata, non comprendo perché nell’installazione tale funziona è disabilitata di default. Senza Fal2Ban e senza tale opzione attivata avremo centinaia di tentativi d’accesso non monitorati con conseguente rischio di violazione in pochi giorni delle caselle email.

Per abilitare la funzione di blocco account su Zimbra in caso di tentativi errati è necessario abilitare come da immagine in basso la sezione “Criterio di accesso non accettato“, io ho trovato un giusto compromesso utilizzando 10 accessi non riusciti consecutivi, nell’arco di 30 minuti e blocco dell’account per 1 ora.

Potete impostarlo per tutti gli utenti nella sezione:
Configura -> Classi di servizio -> default e/o default_external -> Avanzate

Oppure se volete personalizzarlo per singola casella mail, nelle impostazioni della casella mail, cliccate su “Avanzate”.

Gestione criteri accesso Zimbra
Gestione criteri accesso Zimbra

Tali parametri sono un giusto compresso per consentire anche in buona fede di poter sbagliare password in modo consecutivo più volte (fino a 10) ad un nostro utente e se questo dovesse capitare resta fermo per 60 minuti.
Ovviamente potete sempre accedere dal pannello di Amministratore all’account e cambiare impostazione nella schermata principale della casella mail da “bloccato” ad “attivo”.

Noterete però che l’account sarà bloccato spesso, perché come vi dicevo centinaia di bot, di pc infetti, di server in giro per il mondo, in modo del tutto casuale continueranno in modo costante e senza interruzione ad eseguire tentativi. Pertanto vi troverete la casella email bloccata per un ora con una frequenza allarmante. Prima di installare Fail2Ban alcune caselle mail, soprattutto quelle iniziano con info@; contatti@; mail@; admin@; venivano bloccate di continuo da Zimbra per i continui tentativi.

Per ovviare al blocco dell’account mail è quindi opportuno dire a Fail2Ban di bloccare l’indirizzo IP che per 3 volte in 30 minuti esegue accessi errati e di tenere tale blocco per almeno un giorno.

Come notate mentre Zimbra previene l’intrusione bloccando la casella mail, mentre Fail2Ban blocca invece l’indirizzo IP, pertanto agisce prima che vengano raggiunti i 10 tentativi.

Se vi state chiedendo perché tenere attivo il blocco account di Zimbra, quando abbiamo fail2ban che blocca addirittura il singolo indirizzo IP, la risposta è semplice ed è relativa ai problemi di interpretazione del file log da parte di Fail2Ban. Può capitare che il file log di Zimbra con i tentativi errati non venga aggiornato, che si cancelli, in breve Fail2Ban non potrà accedere a dati aggiornati del file log di Zimbra per tanti motivi, in questo caso scatta il blocco della casella mail salvaguardando comunque la sicurezza del sistema.

Fail2Ban quindi legge di continuo il file log di Zimbra, individua le righe relative ai tentativi errati (AUTH ERROR, LOGIN INCORRECT, ecc….), preleva l’indirizzo IP da cui è avvenuto il tentativo d’accesso e aggiunge una riga al firewall attivo sul nostro server. Nel caso di CENTOS 8, firewalld.

Quindi Fail2Ban agisce creando regole su firewalld/iptables per inibire l’accesso o eliminando la regola quando il tempo di blocco stabilito è stato raggiunto.

E allora chiariti i vari aspetti passiamo alla configurazione di fail2Ban, Firewalld e Zimbra per evitare i tanti tentativi d’accesso al nostro server mail.

Installare e configurare FirewallD per CENTOS 8 e Zimbra

Accediamo come utente root al nostro server mail e diamo il comando:

sudo dnf install firewalld

Firewalld è già presente nei sistemi CENTOS e comunque in genere su tutte le distribuzioni, va solo attivato e configurato, successivamente abilitiamo in modo permanente (quindi anche al riavvio) il firewall e poi diamo start per farlo partire:

sudo systemctl enable firewalld
sudo systemctl start firewalld

Potete verificare lo stato di funzionamento con:

sudo firewall-cmd --state

Avrete come risposta: Running

A questo punto aggiungiamo la regola per tenere aperte le porte minime per i servizi Zimbra e SSH (Attenzione dove sta 22, dovete modificarla con l’eventuale porta da voi utilizzata per l’accesso SSH):

firewall-cmd --permanent --add-port={25,80,110,143,389,443,465,587,993,995,5222,5223,9071,7071,7073,7025,22}/tcp 

E poi facciamo ricaricare la configurazione con:

firewall-cmd --reload

Ecco qui, abbiamo appena configurato firewalld per essere attivo e aperto solo per le porte indicate. Ci stiamo risparmiando già un bel po’ di accessi continui da parte dei bot su altre porte.

Ora installiamo Fail2Ban su Centos 8

Abilitiamo il repository con:

sudo yum install epel-release

Installiamo Fail2Ban con:

sudo yum install fail2ban

Abilitiamo ad ogni riavvio e facciamo partire Fail2Ban:

sudo systemctl enable fail2ban && sudo systemctl start fail2ban

Ricordate sempre di dare i comandi:
Per far partire il servizio: sudo systemctl start fail2ban
Per fermare il servizio: sudo systemctl stop fail2ban
Per far ricaricare quindi stop e start: sudo systemctl restart fail2ban
Per verificare il funzionamento: sudo systemctl status fail2ban

Ad ogni modo ad ogni cambiamento ricordate va sempre dato:

sudo systemctl restart fail2ban

Creiamo il file personalizzato per il controllo degli accessi SSH con:

nano /etc/fail2ban/jail.local

[DEFAULT]
# Ban IP/hosts for 24 hour ( 24h*3600s = 86400s):
bantime = 86400
findtime = 600
maxretry = 3

# Call iptables to ban IP address
banaction = iptables-multiport

[ssh-iptables]
enabled = true
filter = sshd
logpath = /var/log/secure
action = iptables-allports[name=SSH, port=”ssh” protocol=all]

Attenzione personalizzate la riga:

action = iptables-allports[name=SSH, port="ssh" protocol=all] 

Aggiungendo o inserendo la porta esatta del servizio SSH, ad esempio se è 1111 va modificato in:

action = iptables-allports[name=SSH, port="1111" protocol=all]

oppure se fosse 1111 e 2222

action = iptables-allports[name=SSH, port="1111,2222" protocol=all]

Aggiungiamo ora il filtro per Zimbra, sul web ne trovate tanti, ma si rifanno a versioni non aggiornate, questa è per la 8.8.15. Pertanto la versione che funziona senza alcun problemi potete trovarla qui:

https://github.com/charles-josiah/confz/blob/master/fail2ban/filter.d/zimbra.conf

Se il link non è più disponibile ne ho creato uno qui: zimbra.conf

A questo punto creiamo il file con il comando:

nano /etc/fail2ban/filter.d/zimbra.conf

Copiamo e incolliamo il contenuto del file zimbra.conf o quello prelevato dal link e salviamo il file.

Creiamo ora nella cartella jail.d il file di configurazione di Zimbra con il comando:

nano /etc/fail2ban/jail.d/zimbra.local

e copiamo:

[zimbra]
enabled = true
filter = zimbra
logpath = /var/log/zimbra.log
maxretry = 3
findtime = 1800
bantime = 86400
action = iptables-multiport[name=zimbraall, port="25,465,587,80,443,110,143,7071,7072,7073,7025", protocol=tcp]

Salviamo il file e diamo il comando di riavvio del servizio con:

sudo systemctl restart fail2ban

Per visualizzare la corretta configurazione di Fail2Ban possiamo dare il comando:

sudo fail2ban-client status 

Abbiamo un risultato simile al seguente:

fail2ban status
fail2ban-status

Come potete vedere fail2ban ci dice che ha due filtri attivi uno ssh-iptables e l’altro zimbra. Per vedere cosa sta accadendo, possiamo dare il comando:

sudo fail2ban-client status zimbra
Fail2ban Zimbra
Fail2ban Zimbra

Come potete notare il filtro ha rilevato nel file /var/log/zimbra.log tentativi d’accesso da parte di moltissimi indirizzi IP. Nel mio caso ne trovate tanti perchè il filtro sta lavorando da ore, ma inizialmente avrete ovviamente tutti zero, con il passare delle ore aumenteranno.

Se vogliamo vedere le configurazione in iptables di Fail2Ban per ognuno degli indirizzi IP atterrete un elenco come il seguente:

iptables -L
iptables-fail2ban
iptables-fail2ban

Come potete notare nel mio output ho DROP mentre voi troverete REJECT per ogni indirizzo IP. Qui dipende dall’utilizzo e dalla finalità del vostro server mail, vi consiglio di lasciare l’impostazione predefinita di Fail2Ban e in particolare quella di “rifiutare” (REJECT) e non ti “tagliare” (DROP) la comunicazione verso indirizzi IP da bloccare. Ci sono varie scuole di pensiero su questo, se meglio “tagliare” la connessione senza dare segni di vita al mittente per ogni indirizzo IP o respingere la connessione, mostrando la propria esistenza, ma vi consiglio di lasciare la configurazione di Fail2Ban in modalità default cioè REJECT.

Configurazione interna di Zimbra per bloccare IP per login errati.

In realtà Zimbra prevede al suo interno una modalità autonoma per inibire accessi da indirizzi IP che eseguono un certo numero di accessi con password errata. Pur impostandola non sembra essere efficace, in più non è facile visualizzare eventuali IP bloccati o sbloccarli, per capire il fenomeno o il funzionamento. Si va un po’ alla cieca e comunque nel mio caso non ha funzionato.

Ad ogni modo se volete importarla per ulteriore sicurezza potete dare i seguenti comandi:

su - zimbra
zmprov mcf zimbraInvalidLoginFilterDelayInMinBetwnReqBeforeReinstating 25
zmprov mcf zimbraInvalidLoginFilterMaxFailedLogin 5
zmmailboxdctl restart

Gestione utente admin in Zimbra

Questo è tutto, come ultimo consiglio per evitare accessi o tentativi d’accesso su Zimbra, vi consiglio di utilizzare un account email come admin del vostro server mail che non sia la vostra casella mail personale e non abbia un nome semplice. Ad esempio l’utente admin di zimbra non dovrebbe chiamarsi mai: info@, admin@, superuser@ ecc…. perchè i sistemi bot eseguono tentativi proprio con questi nomi.

Vi consiglio di creare un nuovo utente admin (semmai l’unico del sistema), che abbia un nome del tipo: 25w35Rw53@dominio.xxx oltre ad una password complessa.

In questo modo i bot faranno tentativi con i nome utente più tradizionali e non arriveranno mai ad individuare utente e password. Ovviamente per l’account 25w35Rw53@dominio.xxx inserite la regola di inoltro delle email verso il vostro indirizzo mail, in questo modo avete tutte le notifiche.
In ultimo bloccate l’accesso a questo utente i protocolli IMAP/POP3 (dal pannello web amministrazione) considerando che non la userete mai realmente per la gestione della posta elettronica, ma solo per accedere al pannello di amministrazione.

Se avete idee, suggerimenti o utilizzate altre configurazioni inserite nei commenti.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.