Fail2ban citește jurnale, numără potrivirile cu o expresie regulată și adaugă o regulă de firewall când contorul atinge plafonul. Tot folosul stă în configurare — după instalare este activ un singur jail, cel pentru SSH.

Unde se pun setările

Fișierul /etc/fail2ban/jail.conf nu trebuie atins — se suprascrie la actualizarea pachetului. Valorile tale merg în /etc/fail2ban/jail.local, care trebuie să conțină doar ceea ce schimbi.

[DEFAULT]
bantime  = 24h
findtime = 1h
maxretry = 5
ignoreip = 127.0.0.1/8 203.0.113.25

ignoreip este linia pe care o scrii prima. Fără ea, mai devreme sau mai târziu îți blochezi propria adresă, iar apoi intri doar prin consola din panoul găzduirii.

Despre bantime

Valoarea implicită de zece minute este practic inutilă: cel care ghicește parole automat revine și continuă. O zi este un minim rezonabil. Și mai bine este creșterea treptată:

bantime.increment = true
bantime.factor    = 2
bantime.maxtime   = 30d

Astfel, cine revine primește blocări tot mai lungi, în timp ce o singură autentificare eșuată a unui utilizator real nu este pedepsită dur.

Jail-uri care merită activate

sshd rulează deja. Dacă ai dezactivat complet autentificarea cu parolă, jail-ul nu aduce mare folos, dar nici nu strică.

Autentificarea serverului web. Dacă ceva este protejat cu parolă prin server:

[nginx-http-auth]
enabled = true

[apache-auth]
enabled = true

Formularul de autentificare al aplicației tale. Aici nu există filtru gata făcut — formularul de parolă al site-ului scrie în jurnalul propriu al aplicației, în format propriu. Filtrul îl scrii singur în /etc/fail2ban/filter.d/, iar tocmai acest jail aduce cel mai mult, pentru că exact acolo se ghicesc parolele.

Postfix și Dovecot, dacă serverul deservește poșta. Porturile de e-mail sunt supuse ghicirii cel puțin la fel de mult ca SSH.

recidive — un jail care citește jurnalul propriu al Fail2ban și acordă blocări lungi adreselor deja blocate de mai multe ori:

[recidive]
enabled  = true
bantime  = 4w
findtime = 1d
maxretry = 3

Verifică dacă chiar funcționează

sudo fail2ban-client status
sudo fail2ban-client status sshd
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

Ultima comandă este cea mai importantă și se folosește mult prea rar. Arată câte linii din jurnal potrivește efectiv filtrul. Zero potriviri înseamnă că jail-ul rulează, dar nu face nimic — fie calea către jurnal este greșită, fie formatul nu se potrivește.

Este totodată cel mai frecvent motiv pentru care Fail2ban pare să funcționeze fără să blocheze pe nimeni: pe Debian 12 și Ubuntu 24.04 fișierul /var/log/auth.log nu mai există implicit. Soluția este fie instalarea rsyslog, fie îndreptarea jail-ului către jurnal:

[sshd]
backend = systemd

Deblocarea proprie

sudo fail2ban-client set sshd unbanip 203.0.113.25
sudo fail2ban-client unban --all

Este bine să știi asta din timp, nu în momentul în care rămâi pe dinafară.

Ce nu poate Fail2ban

Lucrează cu frecvența de la una și aceeași adresă. Un atac distribuit — o mie de adrese cu câte o încercare fiecare — trece direct, pentru că niciun contor nu își atinge plafonul. Este o limitare de principiu, nu o greșeală de configurare.

Nici vulnerabilitatea din aplicație nu o oprește. O cerere care exploatează o breșă dintr-o extensie reușește din prima și nu lasă în urmă nicio autentificare eșuată. Fail2ban elimină zgomotul de fond; nu înlocuiește actualizările făcute la timp.

Valoarea practică se vede în cifrele urmărite în timp: câte adrese sunt blocate acum, care jail se declanșează cel mai des, dacă numărul s-a schimbat brusc. Un jail care a încetat să mai prindă ceva este semn că un jurnal s-a mutat — iar asta se observă doar dacă cineva se uită. Cum arată totul pe o singură pagină arată demonstrația de mai jos.