Chcete-li opravit Fail2ban na Linuxovém serveru , ověřte, zda jsou služba a jaily spuštěny, zkontrolujte soubor /var/log/fail2ban.log, zda neobsahují chyby, ověřte cestu k protokolu a backend (journald nebo soubor) každého jailu pro každou distribuci, otestujte filtry pomocí regulárního výrazu fail2ban, ujistěte se, že akce firewallu odpovídají iptables/nftables/UFW/firewalld, poté znovu načtěte nebo restartujte Fail2ban a znovu otestujte bany.
Pokud řešíte problém s chybou Fail2ban v prostředí serverů Linux, tato příručka vás provede rychlou diagnostikou a přesnými opravami.
Dozvíte se, jak Fail2ban detekuje útoky, proč se jailům nepodaří zablokovat přístup a jak přesně opravit filtry, logovací cesty a akce firewallu, aby váš server opět blokoval pokusy o hrubou sílu.
Jak funguje Fail2ban (rychlý úvod)
Fail2ban chrání linuxové servery čtením protokolů (souborů nebo journaldu), porovnáváním škodlivých vzorců pomocí filtrů a aplikací akcí (např. pravidel firewallu) k zablokování IP adres. Jeho základní části:

- Věznice: Povolte ochranu pro službu (např. sshd).
- Filtry: Pravidla regulárních výrazů, která detekují podezřelé položky protokolu.
- Akce: Co se děje v zápase (zablokování/odblokování přes firewall).
- back-end: Odkud se načítají logy (soubor nebo systemd/journald).
Záměr vyhledávání: Kontrolní seznam pro rychlé opravy
Pokud Fail2ban nezakazuje, viníkem je obvykle jeden z těchto:
- Služba/jaily Fail2ban neběží nebo jsou špatně nakonfigurované.
- Špatná cesta k protokolu nebo backend (protokoly v journaldu vs. souboru).
- Regulární výraz filtru neodpovídá vašim protokolům.
- Akce firewallu je nekompatibilní s iptables/nftables/UFW/firewalld.
- Příliš přísné/volné parametry: bantime, findtime, maxretry, ignoreip.
- Konflikty s cloudovými firewally nebo vlastními síťovými zásadami.
Jak opravit Fail2ban na Linuxovém serveru (krok za krokem)
1) Ověřte stav služby a vězení
Nejprve se ujistěte, že je Fail2ban nainstalován , povolen a že jsou aktivní očekávané jaily.
# Service health
sudo systemctl status fail2ban
sudo systemctl enable fail2ban
# See what Fail2ban thinks is running
sudo fail2ban-client ping
sudo fail2ban-client status
sudo fail2ban-client status sshd # replace sshd with your jail namePokud potřebná věznice není v seznamu uvedena, není povolena. Věznice povolíte v souboru jail.local (ne v souboru jail.conf).
2) Přečtěte si protokoly Fail2ban a dočasně povolte ladění
Funkce Fail2ban vám ve vlastním protokolu sdělí, proč nebyla provedena blokace. Hledejte chyby jako „Nelze přečíst soubor protokolu“, „Nenalezen žádný ID selhání“ nebo „Příkaz pro spuštění akce vrátil chybu“.
# Primary log
sudo tail -n 200 /var/log/fail2ban.log
# Temporarily increase verbosity (revert after fix)
sudo sed -i 's/^loglevel.*/loglevel = DEBUG/' /etc/fail2ban/fail2ban.conf
sudo systemctl restart fail2ban
sudo tail -f /var/log/fail2ban.logPo opravě nastavte úroveň protokolování zpět na INFO a restartujte, abyste se vyhnuli zašuměným protokolům.
3) Oprava neshod v protokolových cestách a backendu
Většina selhání zakazování pochází z nesprávných zdrojů protokolů. Linuxové distribuce se liší:
- Debian / Ubuntu: SSH přihlásí se
/var/log/auth.logve výchozím stavu. - RHEL/CentOS/AlmaLinux/Rocky: SSH přihlásí se
/var/log/secure. - Čistá nastavení journaldu: Použití
backend = systemd(pro některé věznice není logpath potřeba).
# Example: choose one depending on your system
[DEFAULT]
# If you use classic log files
backend = auto
# OR for journald systems
# backend = systemdZkontrolujte si vězení logpath odpovídá vašemu operačnímu systému. Pokud je rsyslog zakázán a protokoly se odesílají pouze do journald, nastavte backend = systemd ve [VÝCHOZÍ] nebo v dané věznici.
4) Ověření filtrů pomocí fail2ban-regex
Filtry nemusí odpovídat lokálním formátům protokolů, zejména po upgradu verze nebo po použití vlastních formátů protokolů. Otestujte filtr ve svých protokolech.
# For file-based logs
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
# For RHEL-like
sudo fail2ban-regex /var/log/secure /etc/fail2ban/filter.d/sshd.conf
# Print matches to confirm
sudo fail2ban-regex --print-all-matched /var/log/auth.log /etc/fail2ban/filter.d/sshd.confPokud se navzdory zjevným chybám v protokolu nenajdou žádné shody, je váš filtr nebo cesta protokolu nesprávná. Aktualizujte filtr (nebo vyberte správný) a znovu jej otestujte.
5) Zajistěte kompatibilitu akcí firewallu (iptables, nftables, UFW, firewalld)
Fail2ban musí použít akci, která odpovídá vašemu firewallu. Chybné akce vedou k chybám „ban succeeded = no“ nebo k chybám obnovy.
- iptables (dědictví):
action = iptables-multiport - nftables:
action = nftables-multiport(Fail2ban 0.11+) - UFW:
action = ufw - firewalld:
action = firewallcmd-rich-rules
# Example per-jail override
[sshd]
enabled = true
port = ssh
filter = sshd
backend = auto
logpath = /var/log/auth.log
maxretry = 5
findtime = 10m
bantime = 1h
# Pick the action that matches your firewall
# action = iptables-multiport
# action = nftables-multiport
# action = ufw
# action = firewallcmd-rich-rulesTaké se ujistěte, že nedochází ke konfliktům cloudového firewallu (např. AWS Security Groups) nebo upstreamového WAF s lokálními zákazy. Cloudové firewally neblokují odchozí data, takže lokální zákazy stále hrají roli.
6) Použijte jail.local, nikoli jail.conf (a restartujte správně)
Nikdy neupravovat /etc/fail2ban/jail.conf; je přepsáno aktualizacemi. Proveďte změny. /etc/fail2ban/jail.local or /etc/fail2ban/jail.d/*.confPo změnách znovu načtěte nebo restartujte službu.
# Safer reload (keeps bans)
sudo fail2ban-client reload
# Full restart (drops state)
sudo systemctl restart fail2ban7) Práce SSH příklady vězení (rodina Ubuntu/Debian a RHEL)
# /etc/fail2ban/jail.local
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1
bantime = 1h
findtime = 10m
maxretry = 5
backend = auto
# For pure journald setups you can use:
# backend = systemd
[sshd]
enabled = true
port = ssh
filter = sshd
# Ubuntu/Debian
logpath = /var/log/auth.log
# RHEL/CentOS/AlmaLinux/Rocky (use this instead)
# logpath = /var/log/secure
# Choose an action compatible with your firewall
# action = nftables-multiport
# action = iptables-multiport
# action = ufw
# action = firewallcmd-rich-rulesPo uložení znovu nainstalujte a ověřte:
sudo fail2ban-client reload
sudo fail2ban-client status sshd
sudo tail -f /var/log/fail2ban.log8) Logika zákazu ladění: doba zákazu, doba hledání, maxretry, ignoreip, opakování
Příliš volné nastavení může minout pachatele; příliš přísné nastavení může zablokovat legitimní uživatele.
- zákaz: Jak dlouho je IP adresa zablokována (např. 1h, 24h, -1 pro trvalý zákaz).
- najít čas: Okno pro počítání selhání (např. 10 m).
- maxretry: Počet selhání v rámci doby hledání před zablokováním (např. 5).
- ignorovatip: CIDR nikdy nebyly zakázány (vaše kancelář/VPN; omylem se vyhněte 0.0.0.0/0).
- recidiva: Vězení, které déle zakazuje recidivistům trestat. Umožněte to zahrnutím poskytnutého vězení pro recidivisty a použitím dlouhé doby trestu.
# Example: enable recidive for chronic attackers
[recidive]
enabled = true
filter = recidive
logpath = /var/log/fail2ban.log
bantime = 7d
findtime = 1d
maxretry = 5
# action must match your firewall stack9) SELinux/AppArmor a oprávnění
Fail2ban běží jako root a obvykle může číst protokoly. Pokud se zobrazí chyby oprávnění, ověřte oprávnění souboru protokolu a zamítnutí SELinuxu. V systémech SELinux zkontrolujte /var/log/audit/audit.log pro AVC. Upravte oprávnění rsyslog/journal nebo dočasně nastavte permisivní režim pouze pro testování (nedoporučuje se v produkčním prostředí).
# Check SELinux denials
sudo ausearch -m avc -ts recent
# Temporarily permissive (testing only)
# sudo setenforce 0
# sudo setenforce 1 # turn back enforcing10) Znovu načtěte, restartujte a povolte při spuštění
Po opravě konfigurace restartujte systém, aby se změny projevily bez zrušení stávajících zákazů. Povolte službu při spuštění.
sudo fail2ban-client reload
sudo systemctl restart fail2ban # if needed
sudo systemctl enable fail2ban
sudo fail2ban-client statusČtěte také: Oprava Dockeru na Linuxovém serveru – Průvodce obnovou Dockeru
Časté chyby a rychlé opravy
- „Žádný takový soubor nebo adresář“ pro logpath: Opravte
logpathdo souboru protokolu vašeho operačního systému nebo přepněte nabackend = systemd. - Chyby při obnovení iptables nebo nft: Přepněte na příslušnou akci (
iptables-multiportvsnftables-multiport) nebo nainstalujte balíček firewallu. - Vězení nenalezeno: Vězení není povoleno v
jail.localnebo soubor vjail.dmá syntaktické chyby. - Žádné shody v regulárním výrazu fail2ban: Váš filtr neodpovídá formátu protokolu; aktualizujte filtr nebo uveďte správný protokol.
- Objeví se zákaz, ale provoz stále prochází: Jiný řetězec firewallu, cloudový firewall nebo síťová cesta přepisuje lokální pravidla; zkontrolujte kompletní zásady firewallu a směrování.
10krokový návod na zotavení (kopírování/vkládání)
- stav systemctl fail2ban
- stav klienta fail2ban; stav sshd
- tail -n 200 /var/log/fail2ban.log
- Nastavení úrovně protokolu = DEBUG, restart, opětovná kontrola protokolů
- Ověřte cestu k protokolu (auth.log vs. secure) nebo nastavte backend = systemd
- Filter protokolu fail2ban regulárních výrazů (filter.d/sshd.conf)
- Vyberte správnou akci (iptables, nftables, ufw, firewalld)
- Přesunout úpravy do jail.local; znovu načíst Fail2ban
- Tune bantime/findtime/maxretry; nastavit ignoreip
- Povolit při spuštění; znovu otestovat s kontrolovanými neúspěšnými přihlášeními
Nejlepší postupy pro udržení efektivity Fail2ban
- Používejte na základě klíče SSH autorizovat a změnit SSH přístav pouze jako doplňkové opatření.
- Povolit recidivisty a delší zákazy pro opakované pachatele.
- Udržujte filtry aktualizované; nové verze démonů mění formáty protokolů.
- Monitorujte Fail2ban pomocí systémových protokolů nebo externích upozornění.
- Spojte Fail2ban se zesílenou základní linií firewallu a minimálním povrchem pro útok.
Odborná pomoc: Kdy zavolat odborníky
Pokud se vám stále nedaří spolehlivě zablokovat přístup pomocí Fail2banu, můžete mít hlubší konflikty firewallu, vlastní protokolování nebo distribuované vstupní body. YouStableJe managed VPS a dedikované servery Zahrnují praktické posílení zabezpečení, ladění firewallu a konfiguraci Fail2ban. Naši technici mohou provést audit vašeho stacku a implementovat odolnou, monitorovanou strategii zákazů bez prostojů.
Užitečná referenční příkady
# Check jail status and bans
sudo fail2ban-client status
sudo fail2ban-client status sshd
# Unban/ban an IP
sudo fail2ban-client set sshd unbanip 1.2.3.4
sudo fail2ban-client set sshd banip 1.2.3.4
# Test a filter against a log
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
# Switch action (example)
# In /etc/fail2ban/jail.local:
# action = nftables-multiport
# Restart/reload
sudo fail2ban-client reload
sudo systemctl restart fail2banNejčastější dotazy
Proč Fail2ban nezakazuje? SSH útočníci?
Typicky proto, že SSH Jail není povolen, cesta k protokolu je nesprávná (auth.log vs. secure), filtr neodpovídá formátu protokolu nebo akce firewallu není kompatibilní. Spusťte. fail2ban-client status sshd, otestujte s fail2ban-regexa ujistěte se, že akce odpovídá vašemu firewallu (iptables, nftables, UFW nebo firewalld).
Jaký je rozdíl mezi bantime a findtime?
Parametr bantime udává, jak dlouho zůstává IP adresa blokována po spuštění zákazu. findtime je časové okno, během kterého se počítají maxretry neúspěšné pokusy. Například s findtime=10m a maxretry=5 vede pět neúspěšných pokusů během 10 minut k zákazu s trvalou platností (např. 1h nebo 24h).
Jak zruším nebo znovu zablokuji IP adresu ve Fail2banu?
Použijte příkazy specifické pro jail: sudo fail2ban-client set <jail> unbanip 1.2.3.4 zrušit zákaz a sudo fail2ban-client set <jail> banip 1.2.3.4 vynutit zákaz. Potvrďte pomocí fail2ban-client status <jail> a pravidla vašeho firewallu.
Funguje Fail2ban s Cloudflare nebo cloudový vyrovnávač zátěže?
Ano, ale ujistěte se, že Fail2ban vidí skutečné IP adresy klientů. Pokud se vaše služba nachází za... Cloudflare nebo LB, nakonfigurujte skutečné IP hlavičky a protokoly (např. real_ip for Nginx), aby filtry odpovídaly klientům, nikoli IP adrese proxy. Zvažte zákaz na úrovni aplikace nebo v případě potřeby prostřednictvím API firewallu poskytovatele.
Mám použít backend=systemd nebo souborové protokoly?
Pokud rsyslog zapisuje do souborů, použijte protokoly založené na souborech, například /var/log/auth.log or /var/log/secure. Použití backend = systemd Pokud jsou logy pouze v journaldu. Vyberte si takový, který odpovídá vašemu prostředí; míchání způsobuje zmeškané shody a neúspěšné zákazy.
