Modul 5 · 5.3
Slovenčina
fail2ban proti pokusom o uhádnutie hesla
Modul 5: Ochrana siete · Čas čítania: 10 minút
Cieľ lekcie: Po tejto lekcii dokážete nastaviť fail2ban pre SSH, čítať jeho stav a log, znovu odblokovať adresu a vysvetliť, pred čím fail2ban chráni a pred čím nie.
Kľúčové pojmy: brute force, jail, filter, akcia (banaction), maxretry, findtime, bantime, bantime.increment, ignoreip, backend systemd, jail.conf, jail.local a jail.d, fail2ban-client, recidive
Skúšači kľučiek na internete
Pozrite sa deň po inštalácii do logu SSH a uvidíte to: stovky pokusov o prihlásenie s menami ako root, admin, test, ubuntu a oracle, z adries z celého sveta.
anna@web1:~$ sudo journalctl -u ssh --since today | grep -c "Invalid user"
412
anna@web1:~$ sudo journalctl -u ssh --since today | grep "Invalid user" | tail -n 3
nov 09 14:02:11 web1 sshd-session[20311]: Invalid user admin from 203.0.113.77 port 51522
nov 09 14:02:13 web1 sshd-session[20313]: Invalid user oracle from 203.0.113.77 port 51544
nov 09 14:02:16 web1 sshd-session[20315]: Invalid user test from 203.0.113.77 port 51560(Na Ubuntu sa služba volá ssh, na AlmaLinux a Rocky sshd. Názov procesu môže byť sshd alebo sshd-session, podľa verzie OpenSSH.) Ide o útok hrubou silou (brute force): boty jednoducho skúšajú všetky bežné mená a heslá. Ak sa prihlasujete kľúčmi a prihlasovanie heslom je vypnuté (lekcia 2.2), nikdy sa dnu nedostanú, nech to skúšajú akokoľvek často. Zapĺňajú však váš log, stoja trochu výpočtového výkonu a pri službách, kde sa heslo predsa len vyžaduje (webmail, administračný panel), môžu byť naozaj nebezpečné.
fail2ban číta logy, rozpoznáva neúspešné pokusy a adresu, ktorá zlyhá príliš často, na istý čas zablokuje vo firewalle.
Ako fail2ban uvažuje: jaily
fail2ban pracuje s jailmi (celami). Jail kombinuje tri veci:
- filter: regulárne výrazy, ktoré v logu rozpoznajú neúspešné pokusy (napríklad riadok "Invalid user ... from <adres>");
- akciu: čo sa stane pri príliš veľa pokusoch, zvyčajne pravidlo firewallu, ktoré adresu zablokuje (
banaction, na Debiane 13 štandardne cez nftables); - prahy: koľko neúspešných pokusov (
maxretry) v akom čase (findtime) vedie k blokovaniu na aký dlhý čas (bantime).
Predvolené hodnoty v jail.conf sú: maxretry = 5, findtime = 10m, bantime = 10m. Teda: päť neúspešných pokusov v priebehu desiatich minút znamená desať minút blokovania.
Inštalácia a pasca Debianu 12
anna@web1:~$ sudo apt install fail2ban
anna@web1:~$ sudo systemctl status fail2banNa Debiane a Ubuntu je jail pre SSH ([sshd]) po inštalácii už zapnutý, a to cez súbor /etc/fail2ban/jail.d/defaults-debian.conf.
Existuje jedna známa pasca. fail2ban musí vedieť, kde sa log nachádza. Kedysi to bol textový súbor /var/log/auth.log. Od Debianu 12 sa rsyslog štandardne neinštaluje a hlásenia sú len v journale systemd (lekcia 6.2). Balík fail2ban v Debiane 12 stále hľadal /var/log/auth.log, nenašiel ho a nespustil sa. Debian 13 to vyriešil tak, že v defaults-debian.conf nastavil pre SSH backend = systemd. Na Debiane 12 to vyriešite sami (pozri nižšie) rovnakým spôsobom. Ubuntu má rsyslog štandardne stále nainštalovaný, ale backend = systemd funguje aj tam.
Vaše vlastné nastavenia: jail.local
Súbor jail.conf nikdy neupravujte: pri aktualizácii sa nahradí. Vlastné nastavenia uložte do /etc/fail2ban/jail.local alebo do súboru v /etc/fail2ban/jail.d/ s príponou .local:
# /etc/fail2ban/jail.d/eigen.local
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
bantime.increment = true
ignoreip = 127.0.0.1/8 ::1 198.51.100.20
[sshd]
enabled = true
backend = systemdČo jednotlivé riadky robia:
bantime = 1h: hodina blokovania namiesto desiatich minút.bantime.increment = true: kto sa po zablokovaní vráti, dostane zakaždým dlhšie blokovanie.ignoreip: adresy, ktoré sa nikdy nezablokujú. Ak máte pevnú IP adresu kancelárie, zadajte ju sem. Nezadávajte sem veľké rozsahy „pre istotu“.backend = systemd: čítať journal namiesto textového súboru (potrebné na Debiane 12, odporúčané všade). Na to musí byť nainštalovaný balíkpython3-systemd; zvyčajne už je ako závislosť.
Opätovné načítanie a kontrola:
anna@web1:~$ sudo fail2ban-client -t # otestovať konfiguráciu
OK: configuration test is successful
anna@web1:~$ sudo systemctl reload fail2ban
anna@web1:~$ sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshdČítanie stavu, blokovanie a odblokovanie
anna@web1:~$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 3
| |- Total failed: 1288
| `- Journal matches: _SYSTEMD_UNIT=ssh.service + _COMM=sshd
`- Actions
|- Currently banned: 2
|- Total banned: 117
`- Banned IP list: 203.0.113.77 198.51.100.140"Currently failed" sú adresy, ktoré už pokusy urobili, ale ešte neprekročili prah. "Currently banned" sú adresy, ktoré sú práve zablokované.
Ak ste zablokovali sami seba (napríklad tým, že ste niekoľkokrát skúsili nesprávny kľúč alebo používateľské meno), prihláste sa cez inú sieť alebo cez konzolu a svoju adresu odblokujte:
anna@web1:~$ sudo fail2ban-client set sshd unbanip 198.51.100.20Log samotného fail2ban sa nachádza v /var/log/fail2ban.log a ukazuje, kedy bola ktorá adresa zablokovaná a odblokovaná:
2026-11-09 14:02:16,903 fail2ban.actions [811]: NOTICE [sshd] Ban 203.0.113.77
2026-11-09 15:02:17,120 fail2ban.actions [811]: NOTICE [sshd] Unban 203.0.113.77Opakovaní útočníci: recidive
Niektoré boty sa po každom zablokovaní jednoducho vrátia. Na to existujú dva prostriedky. bantime.increment (vyššie) predlžuje blokovanie zakaždým. Okrem toho je tu jail recidive: číta log samotného fail2ban a adresu, ktorá bola v priebehu dňa často zablokovaná, zablokuje na týždeň na všetkých portoch. Zapnete ho vo svojom súbore .local:
[recidive]
enabled = trueČo fail2ban robí a čo nie
fail2ban je užitočný, ale nie je to zámok na dverách. Zámkom je prihlasovanie kľúčom s vypnutými heslami (lekcia 2.2). Preto vedzte aj to, čo fail2ban nedokáže:
- Distribuovaný útok z tisícov adries, každá s jedným alebo dvoma pokusmi, nikdy neprekročí
maxretry. - Slabé heslo zostáva slabé. fail2ban hádanie spomalí, nič viac.
- Len to, čo je v logu: službu, ktorá neúspešné pokusy nezapisuje, alebo log, ktorý fail2ban nečíta, nevidí.
- Docker: blokovanie v bežnej reťazi firewallu neplatí pre publikované porty kontajnerov (lekcia 9.3). Pre služby v kontajneroch je potrebné samostatné nastavenie (akcia na reťazi
DOCKER-USER).
Čo fail2ban robí dobre: udržiava log v pokoji, znižuje záťaž od botov a chráni služby, kde (zatiaľ) používate heslá, napríklad webmail alebo administračný panel. Pre takéto služby existujú filtre pre nginx, Postfix, Dovecot a mnohé ďalšie.
Na AlmaLinux a Rocky Linux
fail2ban tam pochádza z EPEL: dnf install epel-release a potom dnf install fail2ban. Balík fail2ban nainštaluje aj prepojenie s firewalld. Služba SSH sa volá sshd. Samotný jail zapnite v súbore .local; na rozdiel od Debianu nie je zapnutý automaticky.
Zhrnutie
- Boty sa celý deň pokúšajú prihlásiť; s kľúčmi a vypnutým prihlasovaním heslom sa dnu nedostanú, fail2ban ich navyše drží v odstupe.
- Jail je filter + akcia + prahy (
maxretry,findtime,bantime); predvolene 5 pokusov za 10 minút, 10 minút blokovania. - Vlastné nastavenia patria do
jail.localalebojail.d/*.local, nikdy dojail.conf; používajtebackend = systemd(potrebné na Debiane 12). fail2ban-client status sshdzobrazí zablokované adresy,set sshd unbanipich odblokuje; recidive abantime.incrementriešia opakovaných útočníkov.- fail2ban nezastaví distribuované útoky ani slabé heslá a porty Dockera sám od seba nevidí.
Kvíz
Úloha
Úloha Z5.3: Čítanie logu s pokusmi o prienik. V ukážkovom súbore ssh-journal-1.txt je časť journalu SSH servera s fail2ban a k tomu výstup fail2ban-client status sshd. Odpovedzte: ktorá adresa skúšala najviac používateľských mien, ktorej adrese sa podarilo prihlásiť kľúčom a ako ktorý používateľ, ktorá adresa je zablokovaná a o koľkej, a bola by táto adresa zablokovaná aj pri predvolených nastaveniach (maxretry = 5, findtime = 10m)? Program odpovede porovná s pevným kľúčom. Ak máte vlastný server s fail2ban, pozrite si tam tiež fail2ban-client status sshd.
Ďalšie čítanie
- Zabezpečenie VPS: prvých päť minút
- Je môj prístup zablokovaný? Vaša IP adresa a náš firewall
- fail2ban, predvolená konfigurácia
jail.conf: https://github.com/fail2ban/fail2ban/blob/master/config/jail.conf - Manuál
jail.conf(5): https://manpages.debian.org/trixie/fail2ban/jail.conf.5.en.html
