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.
U log souborů vytvářených přes syslog jsou na studentských serverech dvě úpravy proti standardu
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í.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+)?
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
Aplikace CrowdSec z https://www.crowdsec.net/ je alternativou k fail2ban. Má několik výhod:
Má také několik nevýhod:
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
.
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
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