Jump to content

Fail2ban (Polski)

From ArchWiki

Fail2ban skanuje pliki dziennika (np. /var/log/httpd/error_log) i banuje adresy IP wykazujące podejrzane działania, takie jak zbyt wiele nieudanych prób uwierzytelnienia, skanowanie w poszukiwaniu podatności itp. Zazwyczaj Fail2ban jest używany do aktualizacji reguł firewall w celu odrzucania adresów IP na określony czas, chociaż można również skonfigurować dowolną inną akcję (np. wysłanie e-maila).]

Warning
  • Użycie oprogramowania blokującego adresy IP zatrzyma trywialne ataki, ale wymaga dodatkowego demona i prawidłowego rejestrowania zdarzeń.
  • Zwykle nie ma sensu używać fail2ban z sshd, gdy włączone jest tylko uwierzytelnianie za pomocą klucza publicznego lub podobne.
  • Nie zastępuje on sieci VPN. Nie udostępniaj swoich usług w Internecie, chyba że jest to konieczne.
  • Dodatkowo, jeśli atakujący zna Twój adres IP, może wysłać pakiety ze sfałszowanym nagłówkiem źródła i doprowadzić do zablokowania Twojego adresu IP. Upewnij się, że określiłeś swój adres IP w ignoreip.

Instalacja

Install pakiet fail2ban

Używanie

Configure Fail2ban and enable/start fail2ban.service.

fail2ban-client

Fail2ban-client pozwala monitorować jails (reload, restart, status, itp.). Aby wyświetlić wszystkie dostępne polecenia:

$ fail2ban-client

Aby wyświetlić wszystkie włączone jails:

# fail2ban-client status

Aby sprawdzić status jail, np. dla „sshd”:

# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 1
|  |- Total failed:     9
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   0.0.0.0

Kompaktowa wersja dla wszystkich jail, w tym zablokowanych IP:

# fail2ban-client banned
[{'sshd': ['192.168.100.50']}, {'apache-auth': []}]

Konfiguracja

This article or section needs expansion.

Reason: Add a note about dbpurgeage, see [1]. (Discuss in Talk:Fail2ban (Polski))

Ze względu na możliwość utworzenia Pacnew and Pacsave files dla /etc/fail2ban/jail.conf podczas upgrade, jail.conf(5) § CONFIGURATION FILES FORMAT zaleca użytkownikom create pliku /etc/fail2ban/jail.local w celu „ułatwienia aktualizacji”.

Na przykład, aby zmienić domyślny czas bana na 1 dzień:

/etc/fail2ban/jail.local
[DEFAULT]
bantime = 1d

Możesz też utworzyć osobne pliki name.local w katalogu /etc/fail2ban/jail.d, np. /etc/fail2ban/jail.d/sshd.local.

Reload fail2ban.service, aby zastosować zmiany konfiguracji.

Włączanie jails

Domyślnie wszystkie jail są wyłączone. Append enabled = true do jail, który chcesz użyć, na przykład aby włączyć jail OpenSSH:

/etc/fail2ban/jail.local
[sshd]
enabled = true

Zobacz #Custom SSH jail.

Otrzymaj powiadomienie e-mailem

Jeśli chcesz otrzymywać wiadomość e-mail po zablokowaniu użytkownika, musisz skonfigurować klienta SMTP (np. msmtp) i zmienić domyślne działanie, jak opisano poniżej.

/etc/fail2ban/jail.local
[DEFAULT]
destemail = yourname@example.com
sender = yourname@example.com

# to ban & send an e-mail with whois report to the destemail.
action = %(action_mw)s

# same as action_mw but also send relevant log lines
#action = %(action_mwl)s

Firewall i usługi

Domyślnie Fail2ban używa iptables. Jednak konfiguracja większości firewall i usług jest prosta. Na przykład, aby użyć nftables:

/etc/fail2ban/jail.local
[DEFAULT]
banaction = nftables
banaction_allports = nftables[type=allports]

Zobacz /etc/fail2ban/action.d/, aby zapoznać się z innymi przykładami, np. ufw.conf.

Porady i wskazówki

Custom SSH jail

Warning Jeśli atakujący zna Twój adres IP, może wysłać pakiety z fałszywym nagłówkiem źródłowym i spowodować zablokowanie dostępu Twojego adresu IP do serwera. SSH keys stanowią eleganckie rozwiązanie problemu ataku siłowego bez tych problemów.

Edytuj /etc/fail2ban/jail.d/sshd.local, dodaj tę sekcję i zaktualizuj listę zaufanych adresów IP w ignoreip:

/etc/fail2ban/jail.d/sshd.local
[sshd]
enabled   = true
filter    = sshd
banaction = iptables
backend   = systemd
maxretry  = 5
findtime  = 1d
bantime   = 2w
ignoreip  = 127.0.0.1/8 ::1
Note
  • Może być konieczne ustawienie LogLevel VERBOSE w /etc/ssh/sshd_config, aby umożliwić pełne monitorowanie fail2ban, w przeciwnym razie nieudane logowania mogą nie być poprawnie logowane.
  • Fail2ban obsługuje IPv6 od wersji 0.10. Dostosuj odpowiednio swoją firewall, np. start/enable ip6tables.service.
  • Podczas korzystania z journal namespaces (poprzez dodanie LogNamespace=something do pliku jednostki), możesz skonfigurować fail2ban do odczytywania tych logów, ustawiając backend w następujący sposób: backend = systemd[journalfiles="/var/log/journal/*.something/system.journal"].]

.


Tip
  • W przypadku korzystania z interfejsów użytkownika iptables, takich jak ufw, można użyć banaction = ufw zamiast iptables.
  • Używając Shorewall, można użyć banaction = shorewall i ustawić BLACKLIST na ALL w /etc/shorewall/shorewall.conf; w przeciwnym razie reguła ban dodana do adresu IP będzie dotyczyć tylko nowych połączeń.

systemd backend: journald filtering

W przypadku korzystania z zaplecza „systemd” w celu poprawy wydajności, skonfiguruj filtr za pomocą journalmatch. Na przykład, aby analizować tylko komunikaty dziennika na poziomie jądra:

/etc/fail2ban/filter.d/fwdrop.local
[Definition]
failregex = ^.*DROP_.*SRC=<ADDR> DST=.*$
journalmatch = _TRANSPORT=kernel

Zobacz także systemd.journal-fields(7).

Service hardening

Obecnie Fail2ban musi być uruchamiany jako 'root'. Z tego powodu zaleca się hardening procesu za pomocą systemd.

Create a drop-in file dla fail2ban.service:

/etc/systemd/system/fail2ban.service.d/override.conf
[Service]
PrivateDevices=yes
PrivateTmp=yes
ProtectHome=read-only
ProtectSystem=strict
ReadWritePaths=-/var/run/fail2ban
ReadWritePaths=-/var/lib/fail2ban
ReadWritePaths=-/var/log/fail2ban.log
ReadWritePaths=-/var/spool/postfix/maildrop
ReadWritePaths=-/run/xtables.lock
CapabilityBoundingSet=CAP_AUDIT_READ CAP_DAC_READ_SEARCH CAP_NET_ADMIN CAP_NET_RAW

Parametry CAP_DAC_READ_SEARCH zestawu CapabilityBoundingSet umożliwią Fail2banowi pełny dostęp do odczytu każdego katalogu i pliku. CAP_NET_ADMIN i CAP_NET_RAW umożliwiają Fail2banowi działanie na dowolnej zaporze sieciowej z interfejsem command-line shell. Więcej informacji można znaleźć w capabilities(7).

Dzięki użyciu ProtectSystem=strict hierarchia filesystem będzie dostępna tylko do odczytu, ReadWritePaths umożliwia Fail2banowi dostęp do zapisu na wymaganych ścieżkach.

Na koniec wykonaj polecenie daemon-reload, aby zastosować zmiany w jednostce i restart fail2ban.service.

Zobacz także