Blog / Baza Wiedzy

Jak skonfigurować fail2ban na Ubuntu i Debian: Kompletny przewodnik serwera

4 min czytania
VoxiHost Team
Jak skonfigurować fail2ban na Ubuntu i Debian: Kompletny przewodnik serwera

fail2ban monitoruje logi autoryzacji i automatycznie banuje adresy IP które gromadzą zbyt wiele nieudanych prób logowania. To jedno z tych narzędzi które działa cicho w tle i ujawnia się tylko gdy sprawdzasz listę banów i zdajesz sobie sprawę że zablokowało setki adresów które młotały twój port SSH w poszukiwaniu słabych danych uwierzytelniających.

To nie jest srebrna kula, jeśli już skonfigurowałeś uwierzytelnianie oparte na kluczach SSH z wyłączonymi hasłami, ataki siłowe przeciwko SSH są już bezużyteczne. Ale fail2ban obejmuje wszystko inne: usługi WWW, serwery pocztowe, dowolna aplikacja która loguje niepowodzenia autoryzacji. I dla serwerów gdzie uwierzytelnianie hasłowe jest wciąż używane dla niektórych usług, jest to praktyczna pierwsza linia obrony.

fail2ban jest często nie instalowany domyślnie na świeżych obrazach Linuksa, chociaż dostawcy premium jak VoxiHost preinstalują go na swoich szablonach z rozsądną konfiguracją bazową. Jeśli musisz go zainstalować od zera lub dostroić do swoich specyficznych potrzeb, ten przewodnik to obejmuje również.

Instalowanie fail2ban

Jeśli nie jest jeszcze zainstalowany:

Uruchamianie sudo apt install fail2ban -y na Ubuntu lub Debian aby zainstalować fail2ban z repozytorium apt

sudo apt update
sudo apt install fail2ban -y

Po zainstalowaniu, usługa uruchamia się automatycznie. Zweryfikuj:

Uruchamianie sudo systemctl status fail2ban na Ubuntu aby zweryfikować że usługa fail2ban jest aktywna i działająca

sudo systemctl status fail2ban

Konfigurowanie więzień fail2ban

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

Nigdy nie edytuj bezpośrednio /etc/fail2ban/jail.conf. Ten plik jest nadpisywany przez aktualizacje pakietów. Zamiast tego utwórz lokalne nadpisanie:

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

Teraz edytuj jail.local:

sudo nano /etc/fail2ban/jail.local

Ustawienia globalne

Na górze pliku ustaw globalne ustawienia które stosują się do wszystkich więzień:

[DEFAULT]
# Biała lista IP, nigdy nie banuj tych
ignoreip = 127.0.0.1/8 ::1 TWOJ.DOMOWY.IP.ADRES
# Czas trwania banu w sekundach (3600 = 1 godzina, -1 = stały)
bantime = 3600
# Okno do zliczania niepowodzeń w
findtime = 600
# Niepowodzenia przed banem
maxretry = 5
# Użyj dziennik systemd (lepszy backend dla nowoczesnych Ubuntu/Debian)
backend = systemd

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

Integracja z ufw

Domyślnie fail2ban używa iptables do banowania IP. Jeśli używasz ufw, powiedz fail2ban aby używał go zamiast tego dla spójności:

W jail.local pod [DEFAULT]:

banaction = ufw

To wstawia reguły ufw deny dla zbanowanych IP, co ładnie współgra z twoją istniejącą konfiguracją zapory.

Więzienie SSH

Przewiń w dół do sekcji [sshd] lub dodaj ją:

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

Krótszy maxretry i dłuższy bantime niż ustawienia globalne są rozsądne dla SSH, trzy nieudane próby w oknie banują na cały dzień.

Włączanie i weryfikowanie fail2ban

Zastosuj konfigurację:

sudo systemctl restart fail2ban

Sprawdź status więzienia SSH:

Uruchamianie sudo fail2ban-client status sshd na Ubuntu aby sprawdzić ile adresów IP jest zbanowanych w więzieniu SSH

sudo fail2ban-client status sshd

Oczekiwany wynik:

Status for the jail: sshd
|- Filter
|  |- Currently failed: 2
|  |- Total failed: 47
|  `- File list: /var/log/auth.log
`- Actions
|  |- Currently banned: 3
|  |- Total banned: 12
|  `- Banned IP list: 203.0.113.1 198.51.100.5 ...

To "currently banned" i "total banned" to dowód że działa.

Odbanowanie IP

Jeśli przypadkowo zbanowałeś się lub legalnego użytkownika:

sudo fail2ban-client set sshd unbanip 203.0.113.1

Zastąp IP tym który musisz odbanować. Zmiany wchodzą w życie natychmiast, nie jest wymagany restart.

Sprawdzanie logów fail2ban

Obserwuj co fail2ban robi w czasie rzeczywistym:

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

Na serwerze publicznym zobaczysz że to szybko się zapełnia. Zdarzenia banowania, 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:

sudo systemctl status fail2ban

Ochrona Nginx i Apache

fail2ban dostarcza filtry dla popularnych usług WWW. Aby dodać ochronę Nginx:

[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

Dla Apache:

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

Zrestartuj po dodaniu więzień:

sudo systemctl restart fail2ban
sudo fail2ban-client status

Ostatnie polecenie status pokazuje wszystkie aktywne więzienia i ich liczniki banów.

Jeśli chcesz czysty serwer VPS do przetestowania tej konfiguracji przed wdrożeniem produkcyjnym, nasze plany Budget VPS są wystarczająco tanie aby przejść przez całą konfigurację bez ryzyka.

Języki