====== Poznámky k instalaci Fail2ban ====== Aplikace fail2ban je nainstalovaná na bis.vse.cz, v adresáři /etc/fail2ban se můžete inspirovat. Lokální úpravy se zapisují do souborů s koncovkou ''.local''. Např. k souboru ''jail.conf'' jsou lokální úpravy v ''jail.local'' či k souboru ''common.conf'' v souboru ''common.local''. Obvykle soubor zkopíruji do .local a poté upravím. ===== fail2ban - formát záznamu v logách ===== U log souborů vytvářených přes syslog jsou na studentských serverech dvě úpravy proti standardu - datum a čas jsou ve formátu [[https://en.wikipedia.org/wiki/ISO_8601|ISO 8601]]. Např. místo ''Fri Dec 29 14:25:59.883277 2023'' je čas ''2023-12-29T14:25:59.883277+01:00''. Záznamy dle času ISO 8601 lze řadit, obsahují časovou zónu, nejsou závislé na nastavení národního prostředí. - záznamy obsahují prioritu (severity). Místo záznamu ''Fri Dec 29 14:25:59.883277 2023 auth sshd[2354015]: Connection from 146.102.18.88 port 49656 on 146.102.18.5 port 22 rdomain ""'' je záznam ''2023-12-29T14:25:59.883277+01:00 info auth sshd[2354015]: Connection from 146.102.18.88 port 49656 on 146.102.18.5 port 22 rdomain ""''. Za časem je položka priorita (severity) označující závažnost upozornění z pohledu autora aplikace, jedna z hodnot ''debug'', ''info'', ''notice'', ''warning'', ''err'', ''crit'', ''alert'', ''emerg''. První úpravu fail2ban akceptuje, pro druhou je potřeba upravit regulární výraz ve filter.d/common.conf, tj. vytvořit soubor filter.d/common.local s následujícím obsahem (můžete zkopírovat i z bis.vse.cz): [DEFAULT] __prefix_line = \s*\S+\s+\S+\s+%(__daemon_combs_re)s?\s(?:%(__daemon_extra_re)s\s+)? ===== fail2ban - whitelist ===== Při neúspěšných přihlášení může fail2ban zablokovat přístup z příslušné IP adresy. Je vhodné nastavit IP adresy, které se nikdy nezablokují - já obvykle nastavuji celý školní IP rozsah. K souboru jail.conf vytvořím soubor jail.local s následujícím obsahem: [DEFAULT] # "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not # ban a host which matches an address in this list. Several addresses can be # defined using space separator. ignoreip = 127.0.0.1/8 146.102.0.0/16 ::1/128 2001:718:1e02::/48 ===== CrowdSec ===== Aplikace CrowdSec z https://www.crowdsec.net/ je alternativou k fail2ban. Má několik výhod: * automaticky sdílí údaje se službou CrowdSec - na www.crowdsec.net si můžete zřídit účet a po registraci serveru vidíte základní údaje na dashboardu, * automaticky získáváte seznam podezřelých IP adres (community-blocklist) - IP adresy, které detekovali ostatní. Tento seznam můžete použít k filtrování. Vámi detekované podezřelé přihlášení se započítávají do seznamu podezřelých IP adres. Fail2ban umí odesílat údaje na obdobné služby blocklist.de či abuseipdb, ale stahování seznamů IP adres pro nastavení firewallu musíte udělat mimo. * základní nastavení včetně filtrování mi přijde trochu jednodušší. Při instalaci se spustí wizard, který zjistí spuštěné služby a na základě toho nastaví detekci. * podporuje specifické akce - např. vynucení captcha při přihlášení z problematické IP adresy, * můžete získat další seznamy IP adres a ty použít k blokování či jiné akci, * lze získávat externí informace (tzv. enrichers), např. k IP adrese stát, kde je pravděpodobně umístěna. Má také několik nevýhod: * součástí distribuce Debianu je zastaralá verze, nainstalujte aktuální z crowdsec.net (viz https://docs.crowdsec.net/docs/next/getting_started/install_crowdsec/) * používá odlišné pojmy, má odlišnou strukturu aplikace, * některé funkce jsou placené - jedná se ale o funkcionality, které fail2ban nemá (firemní dashboard, centralizovaná konfigurace, některé seznamy IP adres, ...), ===== crowdsec a filtrování ===== Akce provádí tzv. bouncer - je potřeba je instalovat samostatně, může jich být více. Pro firewall použijte nftables, konkrétně následující balíček\\ ''apt install crowdsec-firewall-bouncer-nftables'' Není potřeba dále upravovat. Pravidla nftables si zobrazíte příkazem ''nft list ruleset''. ===== crowdsec a analýza logů ===== Stejně jako u fail2ban je potřeba upravit parser. Nestudoval jsem, jak to lze udělat trvale (tj. aby se při aktualizaci změna nepřepsala). Rychlá cesta je upravit soubor /etc/crowdsec/patterns/linux-syslog - zakomentovat stávající definici SYSLOGBASE2 a nahradit ji novou #SYSLOGBASE2 (?:%{SYSLOGTIMESTAMP:timestamp}|%{TIMESTAMP_ISO8601:timestamp8601}) (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource}+(?: %{SYSLOGPROG}:|) SYSLOGBASE2 (?:%{SYSLOGTIMESTAMP:timestamp}|%{TIMESTAMP_ISO8601:timestamp8601}) %{WORD:priority} (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource}+(?: %{SYSLOGPROG}:|) Ověřit úpravy můžete následujícím příkazem pro vysvětlení analýzy řádků: cscli explain --log '2023-12-28T16:13:26.26013+01:00 info authpriv sshd[4962]: Failed password for invalid user root from 128.199.150.10 port 52826 ssh2' --type syslog --verbose Ke konci výpisu by měla být informace, že řádek spadá pod čtyři scénáře ├ Scenarios ├ 🟢 crowdsecurity/ssh-bf ├ 🟢 crowdsecurity/ssh-bf_user-enum ├ 🟢 crowdsecurity/ssh-slow-bf └ 🟢 crowdsecurity/ssh-slow-bf_user-enum ===== crowdsec a whitelist ===== Viz https://docs.crowdsec.net/docs/whitelist/format a https://docs.crowdsec.net/docs/whitelist/create/ Tj. vytvořit soubor /etc/crowdsec/parsers/s02-enrich/vsewhitelist.yaml s následujícím obsahem (jedná se o formát yaml, závisí na odsazení): name: crowdsecurity/whitelists description: "Whitelist events from vse addresses" whitelist: reason: "VSE ipv4/ipv6 ip/ranges" ip: - "127.0.0.1" - "::1" cidr: - "146.102.0.0/16" - "193.84.68.0/24" - "2001:718:1e02::/48" - "2001:4de8:5e:1000::/64" Poté znovunačíst konfiguraci pomocí ''systemctl reload crowdsec'' Použité parsery lze vypsat pomocí ''cscli parsers list''