Fail2ban čte logy, počítá shody s regulárním výrazem a přidá pravidlo firewallu, když čítač dosáhne stropu. Celý užitek je v nastavení — po instalaci je aktivní jediný jail, a to pro SSH.
Kam patří nastavení
Souboru /etc/fail2ban/jail.conf se nedotýkejte — přepíše se při aktualizaci balíčku. Vlastní hodnoty patří do /etc/fail2ban/jail.local, který musí obsahovat jen to, co měníte.
[DEFAULT]
bantime = 24h
findtime = 1h
maxretry = 5
ignoreip = 127.0.0.1/8 203.0.113.25
ignoreip je řádek, který se píše jako první. Bez něj dříve nebo později zablokujete vlastní adresu a pak se dovnitř dostanete jen přes konzoli v panelu hostingu.
K bantime
Výchozí hodnota deseti minut je prakticky zbytečná: automatický hádač hesel se vrátí a pokračuje. Jeden den je rozumné minimum. Ještě lepší je postupné navyšování:
bantime.increment = true
bantime.factor = 2
bantime.maxtime = 30d
Ten, kdo se vrací, pak dostává stále delší blokace, zatímco jediné neúspěšné přihlášení skutečného uživatele není trestáno tvrdě.
Jaily, které stojí za zapnutí
sshd už běží. Pokud jste přihlašování heslem zcela vypnuli, jail moc užitku nepřinese, ale ani neuškodí.
Autentizace webového serveru. Pokud je něco chráněno heslem přes server:
[nginx-http-auth]
enabled = true
[apache-auth]
enabled = true
Přihlašovací formulář vaší aplikace. Hotový filtr zde neexistuje — přihlašovací formulář webu zapisuje do vlastního logu aplikace ve vlastním formátu. Filtr napíšete sami do /etc/fail2ban/filter.d/ a právě tento jail přináší nejvíc, protože právě tam se hesla hádají.
Postfix a Dovecot, pokud server obsluhuje poštu. Poštovní porty jsou vystaveny hádání přinejmenším stejně jako SSH.
recidive — jail, který čte vlastní log Fail2banu a uděluje dlouhé blokace adresám, jež už byly zablokovány několikrát:
[recidive]
enabled = true
bantime = 4w
findtime = 1d
maxretry = 3
Ověřte, že to skutečně funguje
sudo fail2ban-client status
sudo fail2ban-client status sshd
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
Poslední příkaz je nejdůležitější a používá se příliš zřídka. Ukáže, kolika řádkům v logu filtr skutečně odpovídá. Nula shod znamená, že jail běží, ale nic nedělá — buď je špatná cesta k logu, nebo nesedí formát.
Je to zároveň nejčastější důvod, proč Fail2ban vypadá funkčně, ale nikoho neblokuje: na Debianu 12 a Ubuntu 24.04 už /var/log/auth.log standardně neexistuje. Řešením je buď nainstalovat rsyslog, nebo nasměrovat jail na žurnál:
[sshd]
backend = systemd
Odblokování sebe sama
sudo fail2ban-client set sshd unbanip 203.0.113.25
sudo fail2ban-client unban --all
Tohle je dobré vědět předem, ne ve chvíli, kdy stojíte venku.
Co Fail2ban neumí
Pracuje s frekvencí z jedné a téže adresy. Distribuovaný útok — tisíc adres po jednom pokusu — projde přímo, protože žádný čítač nedosáhne stropu. Je to principiální omezení, ne chyba v nastavení.
Nezastaví ani zranitelnost v aplikaci. Požadavek, který zneužije díru v rozšíření, uspěje napoprvé a nezanechá po sobě žádné neúspěšné přihlášení. Fail2ban odstraňuje šum na pozadí; nenahrazuje včasné aktualizace.
Praktická hodnota se ukazuje v číslech v čase: kolik adres je zablokováno teď, který jail se spouští nejčastěji, zda se počet náhle nezměnil. Jail, který přestal na cokoli reagovat, je známkou toho, že se log přesunul — a to si člověk všimne, jen když se dívá. Jak to vypadá na jedné stránce, ukazuje ukázka níže.