Fail2ban číta logy, počíta zhody s regulárnym výrazom a pridá pravidlo firewallu, keď počítadlo dosiahne strop. Celý úžitok je v nastavení — po inštalácii je aktívny jediný jail, a to pre SSH.

Kam patrí nastavenie

Súboru /etc/fail2ban/jail.conf sa nedotýkajte — prepíše sa pri aktualizácii balíka. Vlastné hodnoty patria do /etc/fail2ban/jail.local, ktorý musí obsahovať len to, čo meníte.

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

ignoreip je riadok, ktorý sa píše ako prvý. Bez neho skôr či neskôr zablokujete vlastnú adresu a potom sa dnu dostanete len cez konzolu v paneli hostingu.

K bantime

Predvolená hodnota desiatich minút je prakticky zbytočná: automatický hádač hesiel sa vráti a pokračuje. Jeden deň je rozumné minimum. Ešte lepšie je postupné navyšovanie:

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

Ten, kto sa vracia, potom dostáva čoraz dlhšie blokovania, zatiaľ čo jediné neúspešné prihlásenie skutočného používateľa nie je trestané tvrdo.

Jaily, ktoré sa oplatí zapnúť

sshd už beží. Ak ste prihlasovanie heslom úplne vypli, jail veľa úžitku neprinesie, ale ani neuškodí.

Autentifikácia webového servera. Ak je niečo chránené heslom cez server:

[nginx-http-auth]
enabled = true

[apache-auth]
enabled = true

Prihlasovací formulár vašej aplikácie. Hotový filter tu neexistuje — prihlasovací formulár webu zapisuje do vlastného logu aplikácie vo vlastnom formáte. Filter napíšete sami do /etc/fail2ban/filter.d/ a práve tento jail prináša najviac, lebo práve tam sa heslá hádajú.

Postfix a Dovecot, ak server obsluhuje poštu. Poštové porty sú vystavené hádaniu prinajmenšom rovnako ako SSH.

recidive — jail, ktorý číta vlastný log Fail2banu a udeľuje dlhé blokovania adresám, ktoré už boli zablokované viackrát:

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

Overte, že to naozaj funguje

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

Posledný príkaz je najdôležitejší a používa sa priveľmi zriedka. Ukáže, koľkým riadkom v logu filter skutočne zodpovedá. Nula zhôd znamená, že jail beží, ale nič nerobí — buď je zlá cesta k logu, alebo nesedí formát.

Je to zároveň najčastejší dôvod, prečo Fail2ban vyzerá funkčne, ale nikoho neblokuje: na Debiane 12 a Ubuntu 24.04 už /var/log/auth.log štandardne neexistuje. Riešením je buď nainštalovať rsyslog, alebo nasmerovať jail na žurnál:

[sshd]
backend = systemd

Odblokovanie seba samého

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

Toto je dobré vedieť vopred, nie vo chvíli, keď stojíte vonku.

Čo Fail2ban nedokáže

Pracuje s frekvenciou z jednej a tej istej adresy. Distribuovaný útok — tisíc adries po jednom pokuse — prejde priamo, lebo žiadne počítadlo nedosiahne strop. Je to principiálne obmedzenie, nie chyba v nastavení.

Nezastaví ani zraniteľnosť v aplikácii. Požiadavka, ktorá zneužije dieru v rozšírení, uspeje naprvýkrát a nezanechá po sebe žiadne neúspešné prihlásenie. Fail2ban odstraňuje šum na pozadí; nenahrádza včasné aktualizácie.

Praktická hodnota sa ukazuje v číslach v čase: koľko adries je zablokovaných teraz, ktorý jail sa spúšťa najčastejšie, či sa počet náhle nezmenil. Jail, ktorý prestal na čokoľvek reagovať, je znakom toho, že sa log presunul — a to si človek všimne, len keď sa pozerá. Ako to vyzerá na jednej stránke, ukazuje ukážka nižšie.