Obsah

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

  1. datum a čas jsou ve formátu 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í.
  2. 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:

Má také několik nevýhod:

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