S pomocí fail2ban váš linuxový systém automaticky blokuje IP adresy, které zaznamenají příliš mnoho neúspěšných pokusů o připojení. Jedná se o automatický bezpečnostní mechanismus! Ukážeme vám, jak ho efektivně používat.
Zabezpečení na prvním místě
Slavná Wallis Simpsonová, vévodkyně z Windsoru, kdysi prohlásila: „Nikdy nemůžete být příliš bohatí nebo příliš štíhlí.“ Pro moderní digitální svět to aktualizujeme na: Nikdy nemůžete být příliš opatrní nebo příliš zabezpečení.
Pokud váš počítač přijímá příchozí požadavky na připojení, například Secure Shell (SSH) připojení, nebo funguje jako webový či e-mailový server, je klíčové chránit ho před útoky hrubou silou a hádáním hesel.
Proto je nutné sledovat neúspěšné pokusy o přístup k uživatelským účtům. Pokud se v krátkém časovém úseku opakovaně nepodaří ověření, měl by být další pokus zablokován.
Jediný praktický způsob, jak toho dosáhnout, je automatizovat celý proces. S pomocí jednoduché konfigurace dokáže fail2ban zajistit monitorování, blokování a odblokování zcela automaticky.
fail2ban je integrován s linuxovým firewallem iptables. Zakazuje podezřelé IP adresy přidáním pravidel do firewallu. Pro zjednodušení tohoto vysvětlení budeme pracovat s prázdnou sadou pravidel iptables.
Samozřejmě, pokud máte bezpečnost na srdci, pravděpodobně již máte firewall s robustní sadou pravidel. Fail2ban pouze přidává a odstraňuje vlastní specifická pravidla, vaše stávající nastavení firewallu zůstane beze změny.
Aktuální prázdnou sadu pravidel můžeme zobrazit pomocí tohoto příkazu:
sudo iptables -L
Instalace fail2ban
Instalace fail2ban je jednoduchá na všech distribucích, které jsme testovali. Pro Ubuntu 20.04 použijte tento příkaz:
sudo apt-get install fail2ban
Pro Fedoru 32 zadejte:
sudo dnf install fail2ban
Na Manjaro 20.0.1 jsme použili správce balíčků pacman:
sudo pacman -Sy fail2ban
Konfigurace fail2ban
Instalace fail2ban obsahuje výchozí konfigurační soubor s názvem `jail.conf`. Tento soubor se však při aktualizaci fail2ban přepíše, takže jakékoli vlastní úpravy by byly ztraceny.
Místo úpravy `jail.conf` doporučujeme zkopírovat tento soubor do `jail.local`. Změny v `jail.local` zůstanou zachovány i po aktualizacích, protože fail2ban automaticky načítá oba soubory.
Soubor zkopírujete následujícím příkazem:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Nyní otevřete soubor ve vašem oblíbeném textovém editoru. My použijeme gedit:
sudo gedit /etc/fail2ban/jail.local
V tomto souboru budeme hledat dvě sekce: `[DEFAULT]` a `[sshd]`. Dávejte pozor, abyste našli skutečné sekce, nikoli jen popisky v komentářích.
Sekci `[DEFAULT]` najdete přibližně kolem řádku 40. Je to poměrně dlouhá sekce s mnoha komentáři a vysvětleními.
Přejděte na řádek 90, kde najdete následující čtyři nastavení, která jsou klíčová:
ignoreip: Seznam IP adres, které nebudou nikdy zablokovány. Mají „volnou kartu z vězení“. IP adresa localhost (127.0.0.1) je standardně zahrnuta spolu s jejím ekvivalentem IPv6 (::1). Pokud máte další IP adresy, o kterých víte, že by neměly být nikdy zablokovány, přidejte je do tohoto seznamu oddělené mezerami.
bantime: Doba, po kterou je IP adresa zablokována (m = minuty). Pokud zadáte hodnotu bez „m“ nebo „h“ (hodiny), bude se s ní zacházet jako se sekundami. Hodnota -1 trvale zablokuje IP adresu, buďte proto opatrní, abyste se trvale nezablokovali.
findtime: Časový úsek, během kterého příliš mnoho neúspěšných pokusů o připojení povede k zablokování IP adresy.
maxretry: Hodnota pro „příliš mnoho neúspěšných pokusů“.
Pokud připojení z dané IP adresy zaznamená `maxretry` neúspěšných pokusů v intervalu `findtime`, bude zablokováno na dobu trvání `bantime`. Jedinou výjimkou jsou adresy uvedené v seznamu `ignoreip`.
Fail2ban umisťuje IP adresy do „vězení“ na stanovenou dobu. Podporuje mnoho různých „vězení“, přičemž každé z nich má vlastní sadu pravidel pro specifický typ připojení. To vám umožňuje mít různá nastavení pro různé typy připojení, nebo můžete fail2ban omezit na monitorování pouze vybraných typů.
Jak jste možná uhodli z názvu sekce `[DEFAULT]`, nastavení, která jsme si prohlédli, jsou výchozí. Nyní se podíváme na nastavení pro „vězení“ SSH.
Konfigurace „vězení“
„Vězení“ vám umožňují zahrnovat nebo vylučovat typy připojení z monitorování fail2ban. Pokud vám výchozí nastavení nevyhovují, můžete nastavit specifické hodnoty pro `bantime`, `findtime` a `maxretry` pro jednotlivá „vězení“.
Přejděte na řádek 280, kde uvidíte sekci `[sshd]`.
Zde můžete nakonfigurovat nastavení pro „vězení“ připojení SSH. Abychom toto „vězení“ zařadili do monitorování a blokování, musíme zadat následující řádek:
enabled = true
Dále přidáme následující řádek:
maxretry = 3
Výchozí hodnota byla pět, ale pro připojení SSH chceme být opatrnější. Snížili jsme hodnotu na tři a soubor uložili a zavřeli.
Právě jsme aktivovali sledování tohoto „vězení“ a přepsali jedno z výchozích nastavení. „Vězení“ mohou kombinovat výchozí nastavení s vlastními specifickými hodnotami.
Aktivace fail2ban
Zatím jsme nainstalovali a nakonfigurovali fail2ban. Nyní ho musíme aktivovat, aby se spouštěl jako služba s automatickým startem. Následně musíme ověřit, že funguje správně.
K aktivaci fail2ban jako služby používáme příkaz systemctl:
sudo systemctl enable fail2ban
Stejný příkaz použijeme pro spuštění služby:
sudo systemctl start fail2ban
Stav služby můžeme ověřit opět pomocí systemctl:
sudo systemctl status fail2ban.service
Vše vypadá dobře – svítí zelená, takže je vše v pořádku.
Ověříme, zda s tím souhlasí i fail2ban:
sudo fail2ban-client status
Odpovídá to našemu nastavení. Aktivovali jsme jedno „vězení“, a to `[sshd]`. Pokud do předchozího příkazu zahrneme název „vězení“, můžeme se podívat na více detailů:
sudo fail2ban-client status sshd
Zobrazuje se zde počet selhání a zablokovaných IP adres. Všechny statistiky jsou prozatím samozřejmě nulové.
Testování našeho „vězení“
Z jiného počítače se pokusíme připojit k našemu testovacímu počítači pomocí SSH a záměrně zadáme špatné heslo. Při každém pokusu o připojení máme tři pokusy na zadání správného hesla.
Hodnota `maxretry` se aktivuje po třech neúspěšných pokusech o připojení, nikoli po třech neúspěšných zadáních hesla. To znamená, že musíme třikrát zadat špatné heslo, aby se pokus o připojení nezdařil.
Poté se pokusíme připojit znovu a opět třikrát zadáme špatné heslo. První neúspěšný pokus o heslo při třetím pokusu o připojení by měl spustit fail2ban.
Po prvním neúspěšném heslu u třetího pokusu o připojení už nedostáváme ze vzdáleného počítače žádnou odpověď. Nedostáváme žádné vysvětlení, jsme ignorováni.
Pro návrat do příkazového řádku je nutné stisknout Ctrl+C. Pokud to zkusíme znovu, dostaneme jinou odpověď:
ssh [email protected]
Původní chybová zpráva byla „Oprávnění odepřeno“. Tentokrát je připojení přímo odmítnuto. Jsme persona non grata, dostali jsme zákaz.
Znovu se podíváme na detaily „vězení“ `[sshd]`:
sudo fail2ban-client status sshd
Zaznamenali jsme tři selhání a IP adresa 192.168.4.25 byla zablokována.
Jak jsme zmínili dříve, fail2ban vynucuje zákazy přidáváním pravidel do firewallu. Podívejme se tedy znovu na pravidla (která byla na začátku prázdná):
sudo iptables -L
Do zásady INPUT bylo přidáno pravidlo, které odesílá provoz SSH do řetězce `f2b-sshd`. Pravidlo v řetězci `f2b-sshd` odmítá připojení SSH z IP adresy 192.168.4.25. Neměnili jsme výchozí nastavení pro `bantime`, takže po 10 minutách bude IP adresa odblokována a bude moci opět zkoušet odesílat požadavky na připojení.
Pokud jste nastavili delší dobu trvání zákazu (např. několik hodin), ale potřebujete IP adresu odblokovat dříve, můžete to provést předčasně.
Použijte k tomu tento příkaz:
sudo fail2ban-client set sshd unbanip 192.168.5.25
Pokud na vzdáleném počítači znovu odešleme požadavek na SSH připojení a zadáme správné heslo, budeme se moci připojit:
ssh [email protected]
Jednoduché a efektivní
Jednodušší řešení je obvykle lepší a fail2ban je elegantní řešení pro ošemetný problém. Vyžaduje minimální konfiguraci a má zanedbatelnou režii, ať už pro vás, nebo pro váš počítač.