fail2ban sorveglia un file di registro cercando uno schema, conta le corrispondenze per indirizzo e aggiunge una regola al firewall quando il conteggio viene superato. Fa soltanto questo, e saperlo ti dice esattamente in cosa aiuta e in cosa no.
Cosa ferma
- I tentativi ripetuti di password su SSH — che però le chiavi già fermano.
- Gli accessi falliti e ripetuti su un modulo, se quei fallimenti vengono registrati.
- Le scansioni semplici che percorrono un elenco di percorsi noti.
Cosa non ferma
È reattivo: interviene dopo più fallimenti, quindi un solo tentativo andato a segno non lo vede mai. Non può nulla nemmeno contro un attacco spalmato su mille indirizzi che provano due volte ciascuno — ed è così che si presenta un tentativo serio.
Una cella per un accesso web
# /etc/fail2ban/filter.d/mysite-login.conf
[Definition]
failregex = ^<HOST> .* "POST /login" 401
ignoreregex =
# /etc/fail2ban/jail.local
[mysite-login]
enabled = true
filter = mysite-login
logpath = /var/log/nginx/access.log
maxretry = 5
findtime = 600
bantime = 3600
Prova lo schema prima di attivarlo
fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/mysite-login.conf
Stampa quante righe hanno corrisposto. Zero corrispondenze significa che la cella non scatterà mai e che ti crederai protetto.
Non bloccare te stesso
ignoreip = 127.0.0.1/8 ::1 YOUR.OFFICE.IP.HERE
Dietro una rete di distribuzione ogni richiesta porta l'indirizzo del proxy, perciò il primo blocco blocca il proxy e con esso tutti i tuoi visitatori. Configura prima l'indirizzo reale del client — vedi l'articolo sullo stare dietro una rete di distribuzione.
fail2ban-client status mysite-login
fail2ban-client set mysite-login unbanip 1.2.3.4
Comincia con un blocco di un'ora, non definitivo. Un elenco di blocchi definitivi cresce, non viene mai riletto, e prima o poi contiene un cliente.