Přejít na obsah

Nastavení cookies

Zvolte, které druhy cookies povolíte. Svou volbu můžete kdykoli změnit přes Nastavení cookies v dolní části každé stránky. Prohlášení o ochraně osobních údajů

Nezbytné

Vždy zapnuté

Potřebné pro přihlášení, uchování košíku a zapamatování vašich voleb. Jsou vždy zapnuté.

Které cookies?
  • weboke_sessie, weboke_klant, weboke_remember: vaše relace a trvalé přihlášení
  • weboke_basket: váš košík
  • wkBtwIncl: zobrazení cen s DPH nebo bez DPH
  • wok_cookies: vaše volba cookies, 12 měsíců

Měří, která reklama vede k návštěvě nebo objednávce, abychom neplatili za reklamy, které nic nepřinášejí.

Které cookies?
  • Google Ads přes Google Tag Manager (_gcl_au, _gcl_aw), až 90 dní
  • OpenAI Ads, reklamy v ChatGPT
  • wok_aff: partner, který vás k nám doporučil (partnerský program), 60 dní

4,6

Země a jazyk

Každá země má vlastní web s cenami a DPH dané země.

Zobrazit

fail2ban proti pokusům o uhodnutí hesla

Modul 5: Zabezpečení sítě · Doba čtení: 10 min.

Cíl lekce: Po této lekci budete umět nastavit fail2ban pro SSH, číst jeho stav a log, znovu odblokovat adresu a vysvětlit, co fail2ban chrání a co ne.

Klíčové pojmy: brute force, jail, filtr, akce (banaction), maxretry, findtime, bantime, bantime.increment, ignoreip, backend systemd, jail.conf, jail.local a jail.d, fail2ban-client, recidive

Zkoušeči klik na internetu

Podívejte se den po instalaci do logu SSH a uvidíte to: stovky pokusů o přihlášení se jmény jako root, admin, test, ubuntu a oracle, z adres z celého světa.

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 se služba jmenuje ssh, na AlmaLinux a Rocky sshd. Název procesu může být sshd nebo sshd-session, podle verze OpenSSH.) To je útok hrubou silou (brute force): boti, kteří prostě zkoušejí všechna běžná jména a hesla. Pokud se přihlašujete klíči a přihlášení heslem máte vypnuté (lekce 2.2), nikdy se dovnitř nedostanou, ať to zkoušejí jakkoli často. Zaplňují ale Váš log, stojí trochu výpočetního výkonu a u služeb, kde heslo potřeba je (webmail, administrační panel), mohou být opravdu nebezpeční.

fail2ban čte logy, rozpoznává neúspěšné pokusy a adresu, která selže příliš často, na nějakou dobu zablokuje ve firewallu.

Jak fail2ban uvažuje: jaily

fail2ban pracuje s jaily (celami). Jail kombinuje tři věci:

  • filtr: regulární výrazy, které v logu rozpoznají neúspěšné pokusy (například řádek "Invalid user ... from <adres>");
  • akci: co se stane při příliš mnoha pokusech, obvykle pravidlo firewallu, které adresu zablokuje (banaction, na Debianu 13 standardně přes nftables);
  • prahové hodnoty: kolik neúspěšných pokusů (maxretry) za jakou dobu (findtime) vede k blokaci na jak dlouho (bantime).

Výchozí hodnoty z jail.conf jsou: maxretry = 5, findtime = 10m, bantime = 10m. Tedy: pět neúspěšných pokusů během deseti minut znamená deset minut blokace.

Instalace a past Debianu 12

anna@web1:~$ sudo apt install fail2ban
anna@web1:~$ sudo systemctl status fail2ban

Na Debianu a Ubuntu je jail pro SSH ([sshd]) po instalaci už zapnutý, a to přes soubor /etc/fail2ban/jail.d/defaults-debian.conf.

Existuje jedna známá past. fail2ban musí vědět, kde log je. Dříve to byl textový soubor /var/log/auth.log. Od Debianu 12 se rsyslog standardně neinstaluje a zprávy jsou jen v journalu systemd (lekce 6.2). Balíček fail2ban v Debianu 12 stále hledal /var/log/auth.log, nenašel ho a nespustil se. Debian 13 to vyřešil tím, že v defaults-debian.conf nastavil pro SSH backend = systemd. Na Debianu 12 to vyřešíte sami (viz níže) stejným způsobem. Ubuntu má rsyslog standardně stále nainstalovaný, ale backend = systemd funguje i tam.

Vaše vlastní nastavení: jail.local

Soubor jail.conf nikdy neupravujte: při aktualizaci se nahradí. Vlastní nastavení dejte do /etc/fail2ban/jail.local nebo do souboru v /etc/fail2ban/jail.d/ s pří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

Co jednotlivé řádky dělají:

  • bantime = 1h: hodina blokace místo deseti minut.
  • bantime.increment = true: kdo se po blokaci vrátí, dostane pokaždé delší blokaci.
  • ignoreip: adresy, které se nikdy neblokují. Uveďte sem pevnou IP adresu své kanceláře, pokud ji máte. Nedávejte sem "pro jistotu" velké rozsahy.
  • backend = systemd: číst journal místo textového souboru (nutné na Debianu 12, doporučené všude). K tomu musí být nainstalovaný balíček python3-systemd; obvykle už je nainstalovaný jako závislost.

Znovu načíst a zkontrolovat:

anna@web1:~$ sudo fail2ban-client -t            # otestovat konfiguraci
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

Čtení stavu, blokování a odblokování

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" jsou adresy, které už pokusy udělaly, ale zatím nepřekročily práh. "Currently banned" jsou adresy, které jsou právě zablokované.

Pokud jste zablokovali sami sebe (například tím, že jste to několikrát zkusili se špatným klíčem nebo uživatelským jménem), přihlaste se přes jinou síť nebo konzoli a svou adresu odblokujte:

anna@web1:~$ sudo fail2ban-client set sshd unbanip 198.51.100.20

Log samotného fail2ban je v /var/log/fail2ban.log a ukazuje, kdy byla která adresa zablokována a odblokována:

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

Někteří boti se po každé blokaci prostě vrátí. Proti nim máte dva prostředky. bantime.increment (viz výše) prodlužuje blokaci pokaždé. Kromě toho existuje jail recidive: čte log samotného fail2ban a adresu, která byla během jednoho dne často blokována, zablokuje na týden na všech portech. Zapnete ho ve svém souboru .local:

[recidive]
enabled = true

Co fail2ban dělá a co ne

fail2ban je užitečný, ale není to zámek na dveřích. Zámkem je přihlašování klíčem s vypnutými hesly (lekce 2.2). Proto také vězte, co fail2ban nedokáže:

  • Rozprostřený útok z tisíců adres, z nichž každá udělá jeden nebo dva pokusy, nikdy nepřekročí maxretry.
  • Slabé heslo zůstane slabé. fail2ban hádání zpomalí, nic víc.
  • Jen to, co je v logu: službu, která neúspěšné pokusy nezaznamenává, nebo log, který fail2ban nečte, neuvidí.
  • Docker: blokace v běžném řetězci firewallu neplatí pro publikované porty kontejnerů (lekce 9.3). Pro služby v kontejnerech je potřeba zvláštní nastavení (akce na řetězci DOCKER-USER).

Co fail2ban dělá dobře: udržuje log v klidu, snižuje zátěž od botů a chrání služby, kde (zatím) používáte hesla, například webmail nebo administrační panel. Pro takové služby existují filtry pro nginx, Postfix, Dovecot a mnoho dalších.

Na AlmaLinux a Rocky Linux

fail2ban tam pochází z EPEL: dnf install epel-release a pak dnf install fail2ban. Balíček fail2ban nainstaluje i propojení s firewalld. Služba SSH se jmenuje sshd. Samotný jail zapněte v souboru .local; na rozdíl od Debianu není zapnutý automaticky.

Shrnutí

  • Boti se celý den pokoušejí přihlásit; s klíči a vypnutým přihlášením heslem se dovnitř nedostanou, fail2ban je navíc drží v odstupu.
  • Jail je filtr + akce + prahové hodnoty (maxretry, findtime, bantime); standardně 5 pokusů za 10 minut, 10 minut blokace.
  • Vlastní nastavení patří do jail.local nebo jail.d/*.local, nikdy do jail.conf; používejte backend = systemd (nutné na Debianu 12).
  • fail2ban-client status sshd zobrazí zablokované adresy, set sshd unbanip je odblokuje; recidive a bantime.increment řeší opakované útočníky.
  • fail2ban nezastaví rozprostřené útoky ani slabá hesla a porty Dockeru sám od sebe nevidí.

Kvíz

1. Na Debianu 12 jste nainstalovali fail2ban a ten se nespustí se zprávou, že pro jail sshd neexistuje soubor logu. Co je příčinou?



2. Proč dáváte svá nastavení do jail.local, a ne do jail.conf?



3. Výchozí nastavení jsou maxretry = 5, findtime = 10m, bantime = 10m. Adresa udělá neúspěšný pokus v 14:00, 14:03, 14:05, 14:08 a 14:09. Co se stane?



4. Váš server dostává každý den tisíce pokusů o přihlášení, rozprostřených mezi desítky tisíc adres, z každé jeden pokus. Co proti tomu fail2ban udělá?



5. Zablokovali jste sami sebe tím, že jste několikrát zadali špatné uživatelské jméno. Jaké je správné řešení?



Úkol

Úkol Z5.3: Čtení logu o vniknutí. Ve vzorovém souboru ssh-journal-1.txt je část journalu SSH serveru s fail2ban a k tomu výstup fail2ban-client status sshd. Odpovězte: která adresa zkoušela nejvíce uživatelských jmen, která adresa se dokázala přihlásit klíčem a jako který uživatel, která adresa je zablokovaná a v kolik hodin, a byla by tato adresa zablokovaná i při výchozím nastavení (maxretry = 5, findtime = 10m)? Program odpovědi porovná s pevným klíčem. Pokud máte vlastní server s fail2ban, podívejte se tam také na fail2ban-client status sshd.

Úkol Z5.3: Čtení logu o vniknutí

Soubor k tomuto úkolu: ssh-journal-1.txt








Co vyplníte a co zjistíme, neukládáme. Váš prohlížeč si pamatuje Vaše odpovědi a to, zda jste úkol splnili. Pokud jste přihlášeni, ukládáme v sekci Moje kurzy pouze to, že jste úkol měli (téměř) správně; i to tam můžete odstranit.

Doporučujeme k přečtení

Chvíli strpení…

Nastavení vašich domén

U každé domény nastavte jmenné servery, propojení s hostingem a to, kdo bude držitelem.

Načítání vašich domén…