====== Fail2ban (Su Devuan Ascii, Beowulf e Chimaera, o Debian 9/10/11) ====== Fail2ban è un demone (in python) che permette di bloccare gli indirizzi ip di chi tenta attacchi brute force. È ovviamente complesso, potendosi adattare a una serie di diversi demoni e servizi (ssh, imap, smtp, ecc). Qui raccoglierò i miei appunti sulle varie configurazioni che ho provato. ===== Installazione ===== Di defaul in Debian / Devuan, fail2ban è configurato solo per ssh. In generale le configurazioni personalizzate ha senso farle dentro dei files con estensione ".local", che hanno la precedenza su quelli con estensione ".conf". ===== Appunti su servizio SSH (openssh) ===== Se si usa una porta non standard per ssh, si puo` definirla (o definirle, se sono piu` di una, separate da una virgola) nel file ''/etc/fail2ban/jail.d/ssh.local'', così: [sshd] enabled = true port = 2222 # facoltativo, piu` aggressivo rispetto al default bantime = 60m maxretry = 3 ===== Appunti su Exim / Dovecot / Sieve ===== Queste sono delle config valide per Exim / Dovecot / Sieve, adatte alla configurazione di Exim e Dovecot che uso normalmente io. (possiamo metterle nel file ''/etc/fail2ban/jail.d/mail.local'' per esempio) [dovecot] enabled=true logpath = /var/log/mail.log [sieve] enabled=true logpath = /var/log/mail.log [exim] enabled = true ===== Uso con Roundcube webmail ===== Impostare roundcube per usare syslog, verificare che i login falliti finiscano anche in syslog e nel file /var/log/user.log (in Debian 11 è così) e poi impostare in fail2ban una jail in ''/etc/fail2ban/jail.d/roundcube.local'' in questo modo: [roundcube-auth] enabled = yes logpath = %(syslog_user)s backend = %(syslog_backend)s ===== Appunti su Asterisk ===== Questa è una config per Asterisk. Funziona con versioni recenti, non sono sicuro di quelle più vecchie. Occorre fare alcune cose per farla funzionare. * Modificare la configurazione di asterisk. Editare logger.conf e aggiungere la voce "security" alla riga "messages", così: messages => notice,warning,error,security * Ricaricare la config di logger con "asterisk -r" e poi in console "logger reload" * Creare questa configurazione dentro a ''/etc/fail2ban/jail.d/asterisk.local'' [asterisk] enabled = yes bantime = 3600 findtime = 21600 maxretry = 10 ===== Inviare una mail per gli eventi di ban ===== Per inviare una mail in caso di ban, possiamo aggiungere alla nostra config della jail questa configurazione: destemail = user@domain action = %(action_mw)s Facendo così il sistema ci manda una mail allo start, allo stop, al ban e all'unban. Se vogliamo evitare lo start e stop, per non ingolfarci di roba inutile, possiamo creare un file di configurazione locale che inibisce lo start e lo stop; creiamo il file ''/etc/fail2ban/action.d/sendmail-common.local'' e ci mettiamo dentro quanto segue: [Definition] # Disable email notifications of jails stopping or starting actionstart = actionstop = ===== Test vari ===== Potete testare le regexp di fail2ban usando il comando ''fail2ban-regex'', per esempio come segue: fail2ban-regex --print-all-matched /var/log/mail.log /etc/fail2ban/filter.d/dovecot.conf Inoltre il comando ''fail2ban-client'' permette di leggere lo stato, modificare config. ecc. Ecco alcuni esempi: fail2ban-client status fail2ban-client status dovecot fail2ban-client get dovecot failregex fail2ban-client get exim bantime fail2ban-client get exim findtime fail2ban-client get exim maxretry ===== Ban a lungo per indirizzi recidivi ===== Se un indirizzo viene bannato più di una volta, lo si può bannare più a lungo. Questa jail usa il log di fail2ban stesso per decidere chi è recidivo. Attenzione: non impostare il log di fail2ban a "DEBUG" altrimenti si affoga nei suoi stessi log. * Creare il file ''/etc/fail2ban/jail.d/recidive.local'' [recidive] enabled = true logpath = /var/log/fail2ban.log filter = recidive # find how many times it was banned today findtime = 86400 ; 1 day # if it banned 3 times maxretry = 3 # ban this user for 1 day bantime = 86400 * Se voglio un findtime o un bantime maggiore di 1 giorno, devo modificare la config di fail2ban (/etc/fail2ban/fail2ban.conf) per aumentare a piu` di un giorno il tempo di ritenzione del database, dal default di un giorno a un tempo maggiore o uguale a quello che usiamo nella jail recidive: dbpurgeage = 1d * Per finire ovviamente ricarico fail2ban ===== Eccessivo uso del disco (troppo i/o) ===== Mi e` capitato di trovare Fail2ban che faceva un mostruoso uso del disco, l' iowait era fisso al 60%, e questo creava problemi anche a tutto il resto delle macchine virtuali che giravano sullo stesso server, ovviamente. Nel mio caso specifico, la soluzione e` stata quella di disattivare l'uso di un database sqlite per contenere i dati storici degli indirizzi bannati. Questa impostazione si fa nel file ''/etc/fail2ban/fail2ban.conf'', andando a cercare l'opzione "dbfile" e mettendola a "None". Volendo poi potete anche cancellare il file sqlite che era usato per questa funzione. # Originale: dbfile = /var/lib/fail2ban/fail2ban.sqlite3 # Disattivare l'uso del db dbfile = None Questo sistema per me ha immediatamente risolto il problema. Un'altra possibilità è quella di dire a fail2ban di leggere solo l'ultimo pezzo dei log e non tutti i log pregressi. A me non è servito, ma nel caso, questa è la modifica da effettuare: Nelle configurazioni delle varie jail, occorre indicare il parametro ''logpath'' in modo diverso. Attenzione perchè il logpath può essere definito in ''/etc/fail2ban/jail.conf'' oppure dentro alle varie conf in ''jail.d'', occorre guardarci bene. In ogni caso la modifica consiste in questo: # Originale (esempio di sshd) logpath = %(sshd_log)s # modificato (aggiungo un "tail" alla fine della riga) logpath = %(sshd_log)s tail