Fail2ban

Kategorie: Nástroje

„Selži a máš ban!“

Fail2ban je utilita, která provádí jak říká název: selži a máš ban. Je to souhrn konfiguračních souborů pro různé protokoly a služby. Slouží k limitování útoků na počítač hrubou silou pomocí ověřování. Monitoruje logy a podle jejich údajů vydává „rozkaz k zatčení“, takový rozkaz způsobí, že IP adresa útočníka je zablokována na danou dobu (dle nastavení). Na obrázku je vidět výpis stavu služby sshd.

Fail2ban ovládající službu sshd

Instalace

Pro instalaci stačí nainstalovat balíček fail2ban, který bývá součástí distribuce a také se může stát, že bude třeba v některých distribucích Linux spustit službu (service).

Alpine Linuxapk add fail2ban
Arch Linuxpacman -S fail2ban
CentOSyum install fail2ban
FreeBSDbalíčky py27-fail2ban, py37-fail2ban
OpenSUSEzypper in fail2ban
Ubuntu/Debian/Raspbianapt-get install fail2ban

Po instalaci se musí zapnout služba běžící v pozadí, která bude vše řídit, to udělám příkazem:

systemctl enable fail2ban.service
systemctl start fail2ban.service

Nastavení

Příkaz pro spuštění je fail2ban.

Soubory s nastavením jsou uložené v adresáři /etc/fail2ban.

Nastavení cest k logům se bude lišit podle distribuce Linux.

Nápověda se vyvolá příkazem fail2ban -h.

Zrestartováním služby se okamžitě provedou změny.

Jail.conf

Jail nebo-li žalář slouží k nastavení aktivních služeb ochrany. Pokud chci vytvořit aktivní ochranu některého z mnoha typů, edituji soubor /etc/fail2ban/jail.d/jail.conf.

  1. Hodnoty
  2. SSHd
  3. Apache-noscript

Hodnoty v jail.conf

Hodnoty se do konfiguračního souboru zapisují malými písmeny.

  • Enabled zapne a vypne službu.
  • Filter určuje protokol či služby, které chceme chránit.
  • Action je vykonavatel (firewall) rozsudku blokace, může mít ještě hodnotu iptables apod.
  • Backend řekne programu jak funguje systém a z čeho brát data.
  • Logpath značí cestu k souboru logů.
  • Maxretry udává počet pokusů k zablokování.
  • Port značí číslo portu služby (obvykle 22).
  • Bantime určuje dobu pro blokaci – h, d, w (hodiny, dny, týdny).
  • Findtime je doba po kterou se sledují pokusy – h, d, w (hodiny, dny, týdny).
  • Ignoreip jsou IP adresy, které chceme vynechat (mé a bezpečné IP adresy), oddělujeme mezerou.

SSHd a Fail2ban

Sleduje neúspěšná přihlášení z protokolu SSH.

V konfiguračním souboru SSHd je třeba změnit u LogLevel hodnotu na VERBOSE. Fail2ban potřebuje upovídaný log, aby mohl shromažďovat data, pak jen přidat pravidla do konfiguračního souboru jail.conf a zrestartovat PC nebo službu fail2ban.

  • V souboru /etc/ssh/sshd_config najdu řádek LogLevel, měl by být odkomentovaný a hodnota za ním musí být VERBOSE – čili upovídaný. Poté restartuji službu sshd. (Arch Linux – „sudo systemctl restart sshd.service“)
LogLevel VERBOSE
  • V souboru /etc/fail2ban/jail.d/jail.conf musí být něco jako:
[sshd]
enabled = true
filter = sshd
action = ufw
backend = systemd
maxretry = 1
port = 22
bantime = 12w
findtime = 5d
ignoreip = 198.168.40.50/16 10.21.45.09/24
  • Zrestartuji službu fail2ban, u systému Arch Linux je to příkazem: sudo systemctl restart fail2ban.service A nebo jen sshd: sudo fail2ban-client restart sshd
sudo systemctl restart fail2ban.service
  • sudo fail2ban-client status by měl napsat, že je aktivní, kolik a jaké protokoly anebo služby hlídá. V mém případě hlídá navíc ještě apache-noscript.
sudo fail2ban-client status
Status
|- Number of jail: 2
`- Jail list: apache-noscript, sshd
  • Podrobnější výpis získám upřesněním služby argumentem sshd:
sudo fail2ban-client status sshd

Apache-noscript

Pokud provozuji server, bude se mi hodit eliminovat nesmyslné a chybné požadavky pro přístup k serveru. Na základě chyb URL bude blokovat přístupy s danou specifikací a počtem chyb.

  • Nastavím si LogLevel pro Apache (httpd) alespoň na hodnotu warn, to provedu v souboru /etc/httpd/conf/httpd.conf do kterého nastavím:
LogLevel warn
  • V souboru /etc/fail2ban/jail.d/jail.conf musí být něco jako:
[apache-noscript]
enabled = true
port = http, https
filter = apache-noscript
logpath = /var/log/httpd/error_log
maxretry = 2
bantime = 8w
findtime = 1h
  • Zrestartuji službu fail2ban.service (Arch Linux) příkazem: sudo A nebo jen apache-noscript:
systemctl restart fail2ban.service
sudo fail2ban-client restart apache-noscript