Kamarád si přečetl pár článků na Živě a na dlouhé zimní večery si udělal v cloudu malý linuxový server na hraní. Nicméně poměrně brzy mu jej někdo hacknul – slabé heslo. Rozjel jej znova a zkusil logovat přihlášení – a světe div se byly to stovky, ne-li tisíce pokusů denně.
A když mě požádal o radu co s tím, tip na další článek byl na světě. Již poměrně dlouho existuje služba s názvem fail2ban, kterou jsem mu poradil nasadit. Nějak se totiž ještě necítil na bezpečnější přihlašování ssh klíčem. Fail2ban funguje asi tak jak byste podle názvu očekávali – po určitém, Vámi nastaveném počtu nepovedených pokusů o přihlášení hodí danou IP adresu, ze které pokus probíhal, na block list.
Instalace na Ubuntu
Instalaci provedete jednoduše příkazem:
sudo apt update && sudo apt install fail2ban
Po instalaci se služba rovnou sama spustí a zavede i pro opětovné spouštění po restartu. Zkontrolovat zda běží můžete příkazem:
sudo systemctl status fail2ban
Pokud Status hlásí Active, je všechno v cajku. Nyní si zkopírujeme výchozí konfiguraci, kterou následně upravíme k obrazu svému:
sudo cp /etc/fail2ban/jail.{conf,local}
A potom zmiňovaná úprava:
sudo nano /etc/fail2ban/jail.local
V konfiguračním souboru doporučuji změnit následující položky:
Odkomentujte řádek ignoreip a přidejte do něj svou veřejnou IP adresu, nebo klidně celý subnet, pokud jde o server v lokální síti. Tím dáte explicitně tyto adresy na allow list – tedy nebudou nikdy banované a vy se tak při opětovných pokusech o zadání zapomenutého hesla neodstříhnete. Jednotlivé adresy se oddělují mezerou.
🤖 Tenhle web je bez reklam! 🤖 💸 Nesbírám a neprodávám data návštěvníků. 💸 🕵️♂️ Respektuji Vaše soukromí. 🕵️♂️ 🌎 Píšu pro dobro lidstva. 🌎 ❤️ Líbí se Vám článek? ❤️
ignoreip = 127.0.0.1/8 ::1 77.88.77.14 192.168.0.0/24
Zásady banování definují následující parametry:
bantime = 1d
Bantime definuje, na jak dlouho bude daná IP blokována – v tomto případě 1 den. Pokud ji chcete zabanovat na vždy, nastavte -1.
findtime = 10m
Findtime spolupracuje s další hodnotu, maxretry. V tomto případě to znamená, že pokud bude pět neúspěšných pokusů (maxretry) během 10 minut (findtime), tak dojde k blokaci.
maxretry = 5
Defaultně (Johnňák by se obracel v hrobě) je nastavena hodnota 5 pokusů, což by mělo být v pohodě, pokud si na první dobrou nevzpomenete.
Nastavení co jsem doporučil kamarádovi – je přísné, používá passwordmanager a tak by heslo neměl zapomenout, současně by měl ale blokovat i pomalejší brute force pokusy o prolomení, které se snaží vyhnout detekci:
bantime = 30d findtime = 1d maxretry = 3
Jaily
V základu je povolen jen jail pro SSH, ale můžete si přidat i další, pro každou službu jiné. Pomocí jailů definujete rozdílně parametry pro každou službu. Jail mají v konfiguračním samostatnou sekci kam je lze definovat a vypadají pak třeba takto:
[proftpd] enabled = true port = ftp,ftp-data,ftps,ftps-data logpath = %(proftpd_log)s backend = %(proftpd_backend)s
A jak jsem říkal, každá služba může mít své nastavení a jail vždy povolujete tak že nastavíte enable na true.
[sshd]
enabled = true
maxretry = 3
findtime = 1d
bantime = 4w
ignoreip = 127.0.0.1/8 77.88.77.14
Pokud ale plánujete řešit pouze SSH, jako kámoš, tak jaily nemusíte řešit.
Po každé změně v konfiguráku je potřeba službu otočit:
sudo systemctl restart fail2ban
Sledování a ovládání
Asi Vás bude zajímat, jak sledovat kolik adres se Vám pokoušelo přihlásit k vašemu Miláškovi. To zjistíte zadáním příkazu:
sudo fail2ban-client status sshd
Pokud byste chtěli znát třeba stav pro jailové proftpd tak jen na koci příkazu změníte službu. 😉
Pokud byste nějakou adresu chtěli přidat na allow list (ex whitelist), provedete to tímto příkazem:
sudo fail2ban-client set sshd unbanip 77.88.77.14
A pokud byste chtěli někoho zabanovat růčo fůčo, pak zas tímto:
sudo fail2ban-client set sshd banip 77.88.77.14
🤖 Tenhle web je bez reklam! 🤖 💸 Nesbírám a neprodávám data návštěvníků. 💸 🕵️♂️ Respektuji Vaše soukromí. 🕵️♂️ 🌎 Píšu pro dobro lidstva. 🌎 ❤️ Líbí se Vám článek? ❤️