Blog / Baza Wiedzy

Jak skonfigurować fail2ban na AlmaLinux, CentOS, Rocky Linux i Fedora: Kompletny przewodnik serwera

4 min czytania
VoxiHost Team
Jak skonfigurować fail2ban na AlmaLinux, CentOS, Rocky Linux i Fedora: Kompletny przewodnik serwera

fail2ban monitoruje logi autoryzacji i automatycznie banuje adresy IP które gromadzą zbyt wiele nieudanych prób logowania. Na serwerze z publicznym IP, cicho blokuje setki zautomatyzowanych skanerów które w przeciwnym razie przetaczałyby przez twoje porty w poszukiwaniu słabych danych uwierzytelniających.

Dla serwerów działających na AlmaLinux, CentOS Stream, Rocky Linux lub Fedorze, konfiguracja jest prawie identyczna z dowolnym innym systemem Linux. Jedna znacząca różnica to backend zapory: te dystrybucje używają firewalld, i fail2ban musi o tym wiedzieć tak aby wstawiaj bany przez firewalld zamiast próbować surowe polecenia iptables które mogą być w konflikcie.

Podczas gdy dostawcy premium jak VoxiHost preinstalują fail2ban na swoich szablonach z działającą konfiguracją bazową, większość domyślnych obrazów Linuksa tego nie robi. Ten przewodnik przeprowadzi przez instalację i dostrojenie go do twoich specyficznych potrzeb.

Instalowanie fail2ban

Na systemach opartych na RHEL, fail2ban jest dostępny z EPEL (Extra Packages for Enterprise Linux). Jeśli nie jest jeszcze zainstalowany:

Uruchamianie sudo dnf install epel-release -y na AlmaLinux, CentOS, Rocky Linux i Fedorze aby zainstalować epel-release

sudo dnf install epel-release -y
sudo dnf install fail2ban -y

Na Fedorze, jest w głównych repozytoriach:

sudo dnf install fail2ban -y

Włącz i uruchom go:

Uruchamianie sudo systemctl enable --now fail2ban na AlmaLinux, CentOS, Rocky Linux i Fedorze aby włączyć i uruchomić fail2ban

sudo systemctl enable --now fail2ban

Konfigurowanie więzień fail2ban

Zachowanie fail2ban jest kontrolowane przez "więzienia", każdy z nich obserwuje konkretny log pod kątem wzorców niepowodzeń i banuje obciążające IP.

Nie edytuj bezpośrednio /etc/fail2ban/jail.conf. Aktualizacje pakietów go nadpisują. Zamiast tego utwórz lokalne nadpisanie:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

Ustawienia globalne

[DEFAULT]
# Nigdy nie banuj tych IP
ignoreip = 127.0.0.1/8 ::1 TWOJ.DOMOWY.IP.ADRES
# Czas trwania banu w sekundach (86400 = 24 godziny, -1 = stały)
bantime = 3600
# Okno do zliczania niepowodzeń w
findtime = 600
# Niepowodzenia przed banem
maxretry = 5
# Użyj dziennik systemd (poprawny backend dla tych dystrybucji)
backend = systemd

Dodaj swój domowy IP do ignoreip, oszczędza cię przed frustrującą samoblokadą.

Integracja firewalld

To jest krytyczna różnica od systemów opartych na Debian. fail2ban domyślnie używa iptables, które są w konflikcie z firewalld. Ustaw poprawny backend:

[DEFAULT]
# Użyj firewalld do banowania (wymagane na RHEL/Fedora)
banaction = firewallcmd-ipset
banaction_allports = firewallcmd-allports

Bez tego, fail2ban może wydawać że działa ale tak naprawdę nic nie blokuje, lub tworzy reguły iptables których firewalld ignoruje.

Więzienie SSH

Znajdź lub dodaj sekcję [sshd]:

[sshd]
enabled = true
port = ssh
# Jeśli zmieniłeś port SSH:
# port = 2222
filter = sshd
logpath = %(sshd_log)s
maxretry = 3
bantime = 86400

Trzy uderzenia i jesteś na 24 godzin to rozsądna polityka dla SSH.

Włączanie i weryfikowanie fail2ban

Zastosuj konfigurację:

sudo systemctl restart fail2ban

Sprawdź status więzienia SSH:

Uruchamianie sudo fail2ban-client status sshd na AlmaLinux, CentOS, Rocky Linux i Fedorze aby sprawdzić status więzienia SSH

sudo fail2ban-client status sshd

Oczekiwany wynik:

Status for the jail: sshd
|- Filter
|  |- Currently failed: 1
|  |- Total failed: 34
|  `- Journal matches: _SYSTEMD_UNIT=sshd.service
`- Actions
|  |- Currently banned: 2
|  |- Total banned: 8
|  `- Banned IP list: 203.0.113.45 198.51.100.12

Jeśli Currently banned jest niezerowe, coś już próbowało i niepowiodło przeciwko twojemu SSH. Dobrze, działa.

Zweryfikuj że firewalld faktycznie egzekwuje bany:

sudo firewall-cmd --list-rich-rules | grep fail2ban

Powinieneś zobaczyć wymienione reguły fail2ban-sshd. Jeśli to polecenie nic nie zwraca, banaction nie było ustawione poprawnie, wróć i sprawdź jail.local.

Odbanowanie IP

Aby natychmiast usunąć konkretny ban:

sudo fail2ban-client set sshd unbanip 203.0.113.45

Nie jest wymagany restart. Reguła firewalld jest usuwana na miejscu.

Sprawdzanie logów

Obserwuj co fail2ban robi w czasie rzeczywistym:

sudo tail -f /var/log/fail2ban.log

Na publicznym serwerze zobaczysz że to szybko się zapełnia. Zdarzenia banowania, zdarzenia odbanowania i okazjonalne błędy jeśli coś jest źle skonfigurowane. Jeśli przestałeś widzieć bany ale wiesz że SSH jest ciągle atakowane, sprawdź czy fail2ban wciąż działa:

Uruchamianie sudo systemctl status fail2ban na AlmaLinux, CentOS, Rocky Linux i Fedorze aby sprawdzić status fail2ban

sudo systemctl status fail2ban

Ochrona usług WWW

fail2ban dostarcza filtry dla Nginx i Apache. Dodaj więzienia dla nich:

[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 5

[nginx-limit-req]
enabled = true
filter = nginx-limit-req
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 10

Zrestartuj po dodaniu więzień:

sudo systemctl restart fail2ban
sudo fail2ban-client status

Polecenie status pokazuje wszystkie aktywne więzienia. Każde które włączyłeś powinno pojawić się z własnym licznikiem.

Uwaga o SELinux

Na systemach gdzie SELinux jest egzekwowane (co jest domyślne), fail2ban generalnie działa bez problemów ponieważ wchodzi w interakcję z firewalld na wyższym poziomie. Jeśli zobaczysz odmowy uprawnień w /var/log/audit/audit.log związane z fail2ban, sprawdź:

sudo ausearch -m avc -ts recent | grep fail2ban

Najczęstsze problemy są rozwiązywane przez instalowanie pakietu fail2ban przez oficjalne repozytoria (które zawierają poprawne konteksty SELinux) zamiast instalacji ręcznej.

Jeśli chcesz czysty serwer oparty na RHEL do przetestowania tej konfiguracji, nasze plany Budget VPS pozwalają cię uruchomić, skonfigurować i eksperymentować bez dotykania czegokolwiek ważnego.

Języki