Prejsť na obsah

Nastavenia súborov cookie

Vyberte, aké druhy súborov cookie povolíte. Svoj výber môžete kedykoľvek zmeniť cez Nastavenia súborov cookie v dolnej časti každej stránky. Vyhlásenie o ochrane osobných údajov

Nevyhnutné

Vždy zapnuté

Potrebné na prihlásenie, uchovanie košíka a zapamätanie vašich volieb. Sú vždy zapnuté.

Ktoré súbory cookie?
  • weboke_sessie, weboke_klant, weboke_remember: vaša relácia a trvalé prihlásenie
  • weboke_basket: váš košík
  • wkBtwIncl: zobrazovanie cien s DPH alebo bez DPH
  • wok_cookies: váš výber súborov cookie, 12 mesiacov

Merajú, ktorá reklama vedie k návšteve alebo objednávke, aby sme neplatili za reklamy, ktoré nič neprinášajú.

Ktoré súbory cookie?
  • Google Ads cez Google Tag Manager (_gcl_au, _gcl_aw), najviac 90 dní
  • OpenAI Ads, reklamy v ChatGPT
  • wok_aff: ktorý partner vás k nám odporučil (partnerský program), 60 dní

4,6

Krajina a jazyk

Každá krajina má vlastný web s cenami a DPH danej krajiny.

Zobraziť

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 fail2ban

Na 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ík python3-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.20

Log 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.77

Opakovaní ú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.local alebo jail.d/*.local, nikdy do jail.conf; používajte backend = systemd (potrebné na Debiane 12).
  • fail2ban-client status sshd zobrazí zablokované adresy, set sshd unbanip ich odblokuje; recidive a bantime.increment riešia opakovaných útočníkov.
  • fail2ban nezastaví distribuované útoky ani slabé heslá a porty Dockera sám od seba nevidí.

Kvíz

1. Na Debian 12 ste nainštalovali fail2ban a nespustí sa s hlásením, že pre jail sshd neexistuje súbor logu. Čo je príčinou?



2. Prečo ukladáte nastavenia do jail.local a nie do jail.conf?



3. Predvolené nastavenia sú maxretry = 5, findtime = 10m, bantime = 10m. Adresa urobí neúspešný pokus o 14:00, 14:03, 14:05, 14:08 a 14:09. Čo sa stane?



4. Váš server dostáva každý deň tisíce pokusov o prihlásenie, rozložených na desaťtisíce adries, každá s jedným pokusom. Čo proti tomu urobí fail2ban?



5. Zablokovali ste sami seba tým, že ste niekoľkokrát zadali nesprávne používateľské meno. Aké je čisté riešenie?



Ú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.

Úloha Z5.3: Čítanie logu s pokusmi o prienik

Súbor k tejto úlohe: ssh-journal-1.txt








Čo vyplníte a čo nájdeme, neukladáme. Váš prehliadač si pamätá vaše odpovede a to, či ste úlohu splnili. Po prihlásení si v sekcii Moje kurzy uchovávame iba to, že úloha bola (takmer) správne vyriešená; aj to tam môžete odstrániť.

Ďalšie čítanie

Chvíľu strpenia…

Nastavte svoje domény

Pri každej doméne nastavte nameservery, prepojenie s hostingom a to, kto bude jej vlastníkom.

Načítavajú sa vaše domény…