Differences between revisions 11 and 12
Revision 11 as of 2022-03-14 16:27:49
Size: 5114
Editor: Kurgan
Comment:
Revision 12 as of 2022-06-19 13:59:50
Size: 6086
Editor: Kurgan
Comment:
Deletions are marked like this. Additions are marked like this.
Line 116: Line 116:

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

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

LinuxDebian/Fail2ban (last edited 2022-06-19 13:59:50 by Kurgan)