La Zimbra Collaboration Suite Open-Source Edition dispone di diversi strumenti potenti per garantire la sicurezza delle informazioni. Tra questi — una soluzione per proteggere il server di posta dagli attacchi dei botnet, ClamAV — un antivirus in grado di controllare i file e le email in ingresso per virus malevoli, e anche — uno dei migliori filtri antispam disponibili oggi. Tuttavia, questi strumenti non sono in grado di proteggere Zimbra OSE da attacchi come il brute force. Sebbene non sia il metodo più elegante, il tentativo di indovinare le password utilizzando un dizionario specifico comporta non solo una probabilità di successo nel furto di dati con tutte le conseguenze del caso, ma anche una notevole pressione sul server, che deve gestire tutti i tentativi falliti di violazione del server Zimbra OSE.

In linea di principio, è possibile difendersi dagli attacchi di brute force con le normali misure di sicurezza di Zimbra OSE. Le impostazioni della politica di sicurezza delle password permettono di stabilire il numero di tentativi di accesso non riusciti, dopo i quali l'account potenzialmente attaccato viene bloccato. Il problema principale di questo approccio è che possono verificarsi situazioni in cui i conti di uno o più dipendenti possono essere bloccati a causa di un attacco di brute force al quale non hanno alcun legame, e il conseguente inattività degli impiegati può arrecare perdite significative all'azienda. Proprio per questo motivo, questa soluzione di protezione contro il brute force è meglio evitarla.

Per proteggersi dagli attacchi di brute force, è molto più efficace utilizzare uno strumento specifico chiamato DoSFilter, integrato in Zimbra OSE, che può interrompere automaticamente la connessione con Zimbra OSE tramite HTTP. In altre parole, il funzionamento di DoSFilter è simile a quello di PostScreen, ma viene utilizzato per un protocollo diverso. Inizialmente progettato per limitare il numero di azioni che un singolo utente può compiere, DoSFilter può anche proteggere contro il brute force. La sua principale differenza dallo strumento integrato in Zimbra è che, dopo un certo numero di tentativi falliti, blocca non l'utente stesso, ma l'indirizzo IP da cui vengono effettuati i molteplici tentativi di accesso a un certo account. Grazie a questo, l'amministratore di sistema può non solo proteggersi dal brute force, ma anche evitare di bloccare i dipendenti dell'azienda, semplicemente aggiungendo alla lista degli indirizzi IP e delle sottoreti affidabili la rete interna della propria azienda.
Un grande vantaggio di DoSFilter è che, oltre a gestire i numerosi tentativi di accesso a un dato account, questo strumento può automaticamente bloccare quegli hacker che sono riusciti ad ottenere i dati di autenticazione di un dipendente e poi hanno effettuato un accesso riuscito al suo account, iniziando a inviare centinaia di richieste al server.
È possibile configurare DoSFilter utilizzando i seguenti comandi da console:
- zimbraHttpDosFilterMaxRequestsPerSec — Con questo comando si può impostare il numero massimo di connessioni consentite per un singolo utente. Di default, questo valore è di 30 connessioni.
- zimbraHttpDosFilterDelayMillis — Con questo comando è possibile impostare un ritardo in millisecondi per le connessioni che superano il limite stabilito dal comando precedente. Oltre ai valori interi, l'amministratore può specificare 0, per non avere alcun ritardo, e -1, per interrompere tutte le connessioni che superano il limite stabilito. Di default, questo valore è -1.
- zimbraHttpThrottleSafeIPs — Con questo comando, l'amministratore può specificare gli indirizzi IP e le sottoreti affidabili a cui non si applicheranno i limiti di cui sopra. Si noti che la sintassi di questo comando può variare a seconda del risultato desiderato. Ad esempio, inserendo il comando zmprov mcf zimbraHttpThrottleSafeIPs 127.0.0.1, sovrascriverai completamente l'intero elenco lasciando solo un indirizzo IP. Se invece immetti il comando zmprov mcf +zimbraHttpThrottleSafeIPs 127.0.0.1, l'indirizzo IP che hai inserito verrà aggiunto all'elenco bianco. Allo stesso modo, utilizzando il segno meno, puoi rimuovere un IP dall'elenco consentito.
Si noti che il DoSFilter può creare una serie di problemi quando si utilizzano le estensioni Zextras Suite Pro. Per evitarli, si consiglia di aumentare il numero di connessioni simultanee da 30 a 100 utilizzando il comando zmprov mcf zimbraHttpDosFilterMaxRequestsPerSec 100. Inoltre, si consiglia di aggiungere la rete interna dell'azienda all'elenco consentito. Puoi farlo utilizzando il comando zmprov mcf +zimbraHttpThrottleSafeIPs 192.168.0.0/24. Dopo aver apportato modifiche al DoSFilter, è fondamentale riavviare il server di posta utilizzando il comando zmmailboxdctl restart.
Il principale svantaggio del DoSFilter è che opera a livello applicativo e quindi può solo limitare la capacità degli aggressori di eseguire diverse azioni sul server, senza però limitare la loro possibilità di connettersi al server. Per questo motivo, le richieste di autenticazione o di invio di email inviate al server, sebbene inutili, rappresenteranno comunque un classico attacco DoS, difficile da fermare a questo alto livello.
Per garantire la massima sicurezza del proprio server aziendale con Zimbra OSE, si può utilizzare una soluzione come Fail2ban, che è un framework in grado di monitorare costantemente i log dei sistemi informativi alla ricerca di azioni ripetitive e di bloccare l'intruso modificando le impostazioni del firewall. Il blocco a un livello così basso consente di disattivare gli aggressori già nella fase di connessione IP al server. In questo modo, Fail2Ban può integrare perfettamente la protezione fornita dal DoSFilter. Scopriamo quindi come integrare Fail2Ban con Zimbra OSE per migliorare la sicurezza dell'infrastruttura IT della tua azienda.
Come qualsiasi altra applicazione di livello aziendale, la Zimbra Collaboration Suite Open-Source Edition mantiene registri dettagliati del proprio funzionamento. La maggior parte di essi è memorizzata nella cartella /opt/zimbra/log/ sotto forma di file. Ecco solo alcuni di essi:
- mailbox.log — log del servizio di posta Jetty
- audit.log — log di autenticazione
- clamd.log — registri di funzionamento dell'antivirus
- freshclam.log — registri degli aggiornamenti dell'antivirus
- convertd.log — registri del convertitore di allegati
- zimbrastats.csv — registri delle prestazioni del server
I registri di Zimbra possono essere trovati anche nel file /var/log/zimbra.log, dove vengono mantenuti i registri di funzionamento di Postfix e di Zimbra stessa.
Per proteggere il nostro sistema dagli attacchi brute force, monitoreremo mailbox.log, audit.log e zimbra.log.
Affinché tutto funzioni, è necessario che sul server con Zimbra OSE siano installati Fail2Ban e iptables. Se stai usando Ubuntu, puoi farlo con i comandi dpkg -s fail2ban, se invece utilizzi CentOS, puoi verificare con i comandi yum list installed fail2ban. Nel caso in cui Fail2Ban non sia installato, l'installazione non sarà un problema, poiché questo pacchetto è presente praticamente in tutti i repository standard.
Dopo aver installato tutto il software necessario, puoi procedere alla configurazione di Fail2Ban. Per fare ciò, devi creare un file di configurazione /etc/fail2ban/filter.d/zimbra.conf, in cui scriveremo espressioni regolari per i registri di Zimbra OSE, che corrisponderanno ai tentativi di accesso errati e attiveranno i meccanismi di Fail2Ban. Ecco un esempio del contenuto di zimbra.conf con un insieme di espressioni regolari che corrispondono a diversi errori restituiti in Zimbra OSE durante un tentativo di autenticazione non riuscito:
# Fail2Ban configuration file
[Definition]
failregex = [ip=<HOST>;] account - authentication failed for .* (no such account)$
[ip=<HOST>;] security - cmd=Auth; .* error=authentication failed for .*, invalid password;$
;oip=<HOST>;.* security - cmd=Auth; .* protocol=soap; error=authentication failed for .* invalid password;$
;oip=<HOST>;.* security - cmd=Auth; .* protocol=imap; error=authentication failed for .* invalid password;$
[oip=<HOST>;.* SoapEngine - handler exception: authentication failed for .*, account not found$
WARN .*;ip=<HOST>;ua=ZimbraWebClient .* security - cmd=AdminAuth; .* error=authentication failed for .*;$
ignoreregex =Dopo aver composto le espressioni regolari per Zimbra OSE, è il momento di procedere alla modifica della configurazione di Fail2Ban stesso. Le impostazioni di questo strumento si trovano nel file /etc/fail2ban/jail.conf. Per precauzione, ne faremo una copia di sicurezza utilizzando il comando cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.bak. Dopodiché, dobbiamo modificare questo file in modo che assomigli circa al seguente:
# Fail2Ban configuration file
[DEFAULT]
ignoreip = 192.168.0.1/24
bantime = 600
findtime = 600
maxretry = 5
backend = auto
[ssh-iptables]
enabled = false
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=admin@company.ru, sender=fail2ban@company.ru]
logpath = /var/log/messages
maxretry = 5
[sasl-iptables]
enabled = false
filter = sasl
backend = polling
action = iptables[name=sasl, port=smtp, protocol=tcp]
sendmail-whois[name=sasl, dest=support@company.ru]
logpath = /var/log/zimbra.log
[ssh-tcpwrapper]
enabled = false
filter = sshd
action = hostsdeny
sendmail-whois[name=SSH, dest=support@ company.ru]
ignoreregex = for myuser from
logpath = /var/log/messages
[zimbra-account]
enabled = true
filter = zimbra
action = iptables-allports[name=zimbra-account]
sendmail[name=zimbra-account, dest=support@company.ru ]
logpath = /opt/zimbra/log/mailbox.log
bantime = 600
maxretry = 5
[zimbra-audit]
enabled = true
filter = zimbra
action = iptables-allports[name=zimbra-audit]
sendmail[name=Zimbra-audit, dest=support@company.ru]
logpath = /opt/zimbra/log/audit.log
bantime = 600
maxretry = 5
[zimbra-recipient]
enabled = true
filter = zimbra
action = iptables-allports[name=zimbra-recipient]
sendmail[name=Zimbra-recipient, dest=support@company.ru]
logpath = /var/log/zimbra.log
bantime = 172800
maxretry = 5
[postfix]
enabled = true
filter = postfix
action = iptables-multiport[name=postfix, port=smtp, protocol=tcp]
sendmail-buffered[name=Postfix, dest=support@company.ru]
logpath = /var/log/zimbra.log
bantime = -1
maxretry = 5Questo esempio, sebbene piuttosto universale, richiede chiarimenti su alcune impostazioni che potresti voler modificare durante la configurazione autonoma di Fail2Ban:
- Ignoreip — con questo parametro puoi specificare un ip o una sottorete per i quali Fail2Ban non deve effettuare controlli. Solitamente, in questo elenco vengono aggiunti la rete interna dell'azienda e altri indirizzi affidabili.
- Bantime — Il tempo durante il quale un trasgressore sarà bannato. Misurato in secondi. Un valore di -1 indica un ban permanente.
- Maxretry — Il numero massimo di volte in cui un singolo indirizzo IP può tentare di accedere al server.
- Sendmail — Impostazione che consente di inviare automaticamente notifiche email quando viene attivato Fail2Ban.
- Findtime — Impostazione che consente di definire un intervallo di tempo dopo il quale l'indirizzo IP può tentare nuovamente di accedere al server dopo aver esaurito il numero massimo di tentativi falliti (parametro maxretry)
Dopo aver salvato il file delle impostazioni di Fail2Ban, è necessario riavviare questo strumento usando il comando service fail2ban restart. Dopo il riavvio, i log principali di Zimbra inizieranno a essere monitorati continuamente per verificare la corrispondenza con le espressioni regolari. Grazie a ciò, l'amministratore potrà effettivamente escludere qualsiasi possibilità di infiltrazione di un attaccante non solo nelle caselle di posta di Zimbra Collaboration Suite Open-Source Edition, ma anche proteggere tutti i servizi operanti all'interno di Zimbra OSE e rimanere aggiornato su qualsiasi tentativo di accesso non autorizzato.
Per qualsiasi domanda riguardante Zextras Suite, puoi contattare il Rappresentante della compagnia "Zextras", Ekaterina Triandafyllidi all'indirizzo email katerina@zextras.com
Fonte: habr.com
