= 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 }}}