Fail2ban (Polski)
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).]
- 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
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
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
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
- Może być konieczne ustawienie
LogLevel VERBOSEw/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=somethingdo pliku jednostki), możesz skonfigurować fail2ban do odczytywania tych logów, ustawiającbackendw następujący sposób:backend = systemd[journalfiles="/var/log/journal/*.something/system.journal"].]
.
- W przypadku korzystania z interfejsów użytkownika iptables, takich jak ufw, można użyć
banaction = ufwzamiast iptables. - Używając Shorewall, można użyć
banaction = shorewalli ustawićBLACKLISTnaALLw/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.