Blog / Baza Wiedzy

Jak zabezpieczyć Nginx za pomocą Fail2Ban

8 min czytania
Jak zabezpieczyć Nginx za pomocą Fail2Ban

Wstęp

Udostępnienie serwera WWW Nginx w publicznej sieci wiąże się z ciągłym strumieniem zautomatyzowanych prób ataków. Boty poszukują luk w zabezpieczeniach, próbują przejmować dane uwierzytelniające i zalewają logi błędnymi żądaniami. Jeśli uruchamiasz swoje usługi na VPS, potrzebujesz proaktywnego mechanizmu obronnego, który działa bez konieczności ciągłej, ręcznej interwencji.

Fail2Ban to branżowy standard w tej dziedzinie. Monitoruje logi serwera w czasie rzeczywistym, identyfikuje podejrzane wzorce - takie jak powtarzające się błędy 404 lub nieudane próby logowania - i automatycznie aktualizuje zaporę sieciową, aby blokować adresy IP sprawców. Podczas gdy Nginx zarządza ruchem, Fail2Ban pełni rolę automatycznego strażnika.

Ten przewodnik skupia się na czystej i łatwej w utrzymaniu instalacji na systemie Ubuntu. Unikamy powszechnego błędu bezpośredniej edycji domyślnych plików konfiguracyjnych, co gwarantuje, że reguły bezpieczeństwa przetrwają aktualizacje systemu. Po zakończeniu tego samouczka będziesz dysponować zabezpieczonym środowiskiem Nginx, skonfigurowanym do użycia backendu systemd w celu uzyskania optymalnej wydajności i minimalnego zużycia zasobów. Zakładamy, że posiadasz podstawową instalację Ubuntu z dostępem root lub sudo. Jeśli dopiero zaczynasz, upewnij się przed rozpoczęciem, że system jest zaaktualizowany, a zapora sieciowa jest włączona.

Wymagania wstępne

Przed rozpoczęciem upewnij się, że Twój serwer VPS spełnia poniższe wymagania. Uruchomienie tych usług wymaga co najmniej 1 GB pamięci RAM oraz 1 rdzenia procesora, aby zachować stabilną wydajność podczas operacji analizy logów.

Zweryfikuj, czy zegar systemowy jest zsynchronizowany przy użyciu NTP, ponieważ Fail2Ban polega na dokładnych znacznikach czasu przy obliczaniu czasu trwania blokad. Możesz to sprawdzić, wykonując polecenie timedatectl status. Na koniec upewnij się, że logi dostępowe Nginx są włączone i dostępne, ponieważ Fail2Ban będzie potrzebował uprawnień do odczytu, aby monitorować ruch przychodzący pod kątem złośliwej aktywności.

Krok 1: Instalacja Nginx oraz Fail2Ban

Na początku należy upewnić się, że lista pakietów jest aktualna, a następnie zainstalować niezbędne komponenty oprogramowania. Korzystanie z oficjalnych repozytoriów Ubuntu zapewnia otrzymywanie aktualizacji bezpieczeństwa oraz utrzymanie pełnej kompatybilności z architekturą systemu.

Wykonaj poniższe polecenia, aby zaktualizować indeks pakietów i zainstalować zarówno Nginx, jak i Fail2Ban:

## Aktualizacja listy pakietów oraz instalacja Nginx i Fail2Ban
sudo apt update
sudo apt install -y nginx fail2ban

Po zakończeniu instalacji Fail2Ban tworzy domyślny plik konfiguracyjny znajdujący się w /etc/fail2ban/jail.conf. Edycja tego pliku bezpośrednio nie jest zalecana, ponieważ aktualizacje pakietów mogą nadpisać wprowadzone zmiany. Zamiast tego tworzymy kopię lokalną, która ma pierwszeństwo.

## Utworzenie lokalnego pliku konfiguracyjnego w celu zachowania ustawień
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Nowoczesne dystrybucje Ubuntu wykorzystują systemd do zarządzania logami. W celu uzyskania optymalnej wydajności oraz skrócenia czasu między zdarzeniem naruszenia a nałożeniem blokady, należy skonfigurować Fail2Ban tak, aby korzystał z backendu systemd zamiast domyślnej metody odpytywania plików dziennika. Uruchom poniższe polecenie, aby zaktualizować konfigurację:

## Ustawienie backendu Fail2Ban na systemd
sudo sed -i 's/backend = auto/backend = systemd/g' /etc/fail2ban/jail.local

Po zastosowaniu tych ustawień środowisko jest gotowe na wprowadzenie szczegółowych reguł ochrony Nginx. W kolejnych krokach zdefiniujemy "jails" (więzienia), które będą monitorować ruch sieciowy.

Wyjście terminala pokazujące pomyślną instalację Nginx i Fail2Ban

Krok 2: Konfiguracja więzienia Fail2Ban

Skoro zaplecze jest już gotowe, należy utworzyć konkretną konfigurację więzienia (jail) dla Nginx. Więzienie określa, które pliki dziennika mają być monitorowane oraz jakie działania należy podjąć po przekroczeniu określonego progu. Domyślnie Fail2Ban nie monitoruje aktywnie Nginx, dopóki użytkownik nie włączy odpowiedniego więzienia w pliku jail.local.

Aby zdefiniować własną ochronę Nginx, otwórz lokalny plik konfiguracyjny w wybranym edytorze tekstu:

## Otwarcie lokalnego pliku konfiguracyjnego
sudo nano /etc/fail2ban/jail.local

Przewiń plik, aż znajdziesz sekcje [nginx-http-auth] lub [nginx-botsearch]. Możesz je włączyć, zmieniając parametr enabled z false na true. W celu uzyskania skutecznej konfiguracji upewnij się, że poniższe linie znajdują się w pliku i nie są zakomentowane:

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

[nginx-botsearch]
enabled = true
port    = http,https
filter  = nginx-botsearch
logpath = /var/log/nginx/access.log

Więzienie nginx-http-auth chroni witrynę przed atakami typu brute-force na stronach zabezpieczonych przy użyciu Basic Auth, natomiast nginx-botsearch blokuje złośliwe skanery próbujące odnaleźć ukryte katalogi administracyjne. Po dodaniu tych bloków zapisz plik, naciskając Ctrl + O, następnie Enter, a na koniec wyjdź za pomocą Ctrl + X.

Uwaga: Jeśli korzystasz z VPS przy dużym natężeniu ruchu, upewnij się, że ścieżki do logów są zgodne z rzeczywistą konfiguracją Nginx. Jeśli katalog logów został zmieniony, zaktualizuj odpowiednio wartość logpath, aby zapobiec problemom z uruchomieniem usługi.

Edycja pliku konfiguracyjnego jail.local w edytorze nano w celu włączenia więzień Nginx

Krok 3: Włączenie więzień Nginx

Po zaktualizowaniu konfiguracji jail.local ostatnim etapem jest zastosowanie zmian. Fail2Ban musi zostać poinstruowany, aby przeładował swoją konfigurację, dzięki czemu nowe więzienia dla Nginx zostaną zainicjowane, a usługa monitorowania rozpocznie śledzenie plików dziennika w poszukiwaniu podejrzanej aktywności.

Ponieważ zmodyfikowaliśmy główną konfigurację, musimy zrestartować usługę, aby zapisać te zmiany w pamięci. Wykonaj poniższe polecenia, aby włączyć usługę, zrestartować ją i zweryfikować, czy działa poprawnie:

## Włączenie, restart i weryfikacja statusu usługi Fail2Ban
sudo systemctl enable fail2ban
sudo systemctl restart fail2ban
sudo systemctl status fail2ban

Dane wyjściowe statusu powinny wskazywać, że usługa jest active (running). Możesz również zweryfikować, czy konkretne więzienia Nginx są aktywne, używając narzędzia fail2ban-client. Narzędzie to komunikuje się bezpośrednio z działającym demonem i potwierdza, że więzienia poprawnie analizują pliki dziennika:

## Weryfikacja, czy więzienia nginx-http-auth oraz nginx-botsearch są aktywne
sudo fail2ban-client status nginx-http-auth
sudo fail2ban-client status nginx-botsearch

Jeśli status zwraca "Currently failed: 0" oraz "Total failed: 0", konfiguracja jest gotowa. Usługa aktywnie skanuje teraz pliki w /var/log/nginx/ w poszukiwaniu wzorców pasujących do domyślnych filtrów. Jeśli zauważysz jakiekolwiek problemy z analizą logów, upewnij się, że uprawnienia do plików dziennika Nginx pozwalają użytkownikowi Fail2Ban na ich odczyt. W przypadku większości standardowych instalacji na serwerze VoxiHost VPS domyślne uprawnienia są wystarczające.

Weryfikacja statusu aktywnych więzień Fail2Ban dla Nginx

Krok 4: Weryfikacja działania Fail2Ban

Skoro usługa działa, a więzienia zostały zainicjowane, należy potwierdzić, że Fail2Ban faktycznie monitoruje logi i jest gotowy do blokowania złośliwego ruchu. Najbardziej niezawodnym sposobem na przetestowanie tego jest sprawdzenie statusu więzienia oraz symulacja nieudanej próby logowania.

Najpierw zweryfikuj, czy Fail2Ban aktywnie monitoruje pliki logów Nginx, sprawdzając podsumowanie więzień:

## Wyświetl listę aktualnie aktywnych więzień
sudo fail2ban-client status

W sekcji "Jail list" powinny być widoczne pozycje nginx-http-auth oraz nginx-botsearch. Jeśli się tam pojawiają, demon pomyślnie powiązał filtry z logami serwera Nginx.

Aby przetestować działanie filtra, celowo wywołaj nieudaną próbę uwierzytelnienia na serwerze. Jeśli posiadasz blok lokalizacji Nginx chroniony za pomocą Basic Auth, spróbuj zalogować się z błędnymi danymi kilka razy. W przypadku braku chronionej strony możesz zasymulować atak bota, żądając nieistniejącego pliku, co wywoła filtr nginx-botsearch.

Po wywołaniu błędu ponownie sprawdź status więzienia, aby zobaczyć, czy licznik wzrósł:

## Sprawdź status konkretnego więzienia, aby zobaczyć nieudane próby
sudo fail2ban-client status nginx-http-auth

Jeśli licznik "Currently failed" odzwierciedla wykonane próby, Fail2Ban poprawnie analizuje logi. Po osiągnięciu zdefiniowanego progu (ustawienie maxretry w pliku jail.local) Fail2Ban automatycznie wstawi regułę do zapory sieciowej, aby odrzucać przychodzący ruch z danego adresu IP. Możesz potwierdzić nałożenie blokady, sprawdzając logi:

## Wyświetl końcową część logu Fail2Ban, aby zobaczyć akcje blokowania w czasie rzeczywistym
sudo tail -f /var/log/fail2ban.log

Powinny pojawić się wpisy wskazujące, że dany adres IP został zablokowany.

Podsumowanie

Zabezpieczenie serwera WWW przy użyciu Fail2Ban stanowi kluczową warstwę ochrony przed zautomatyzowanymi atakami. Dzięki monitorowaniu logów Nginx w czasie rzeczywistym i dynamicznej aktualizacji firewalla skutecznie neutralizujesz próby ataków typu brute-force oraz ruch generowany przez złośliwe boty, zanim wpłyną one na zasoby Twojego systemu.

Na serwerze VoxiHost VPS to proaktywne podejście do bezpieczeństwa gwarantuje, że Twoje usługi pozostaną wydajne i dostępne dla legalnych użytkowników. Pamiętaj, że bezpieczeństwo nie jest jednorazową konfiguracją. Okresowo sprawdzaj ustawienia w pliku jail.local oraz monitoruj logi, aby upewnić się, że Twoje filtry pozostają skuteczne wobec ewoluujących zagrożeń.

Jeśli zdecydujesz się na modyfikację swoich polityk bezpieczeństwa, zawsze pamiętaj o sprawdzeniu składni plików konfiguracyjnych przed ponownym uruchomieniem usługi:

## Sprawdź poprawność składni konfiguracji pod kątem błędów
sudo fail2ban-client -t

W przypadku konieczności wprowadzenia aktualizacji do konfiguracji bezpieczeństwa najpierw zatrzymaj usługę, aby zapewnić czysty stan, wprowadź zmiany, a następnie załaduj ją ponownie:

## Bezpieczne zatrzymanie i ponowne uruchomienie Fail2Ban po zmianach w konfiguracji
sudo systemctl stop fail2ban
sudo systemctl start fail2ban

Dzięki uruchomieniu Fail2Ban znacząco zmniejszyłeś powierzchnię ataku swojego środowiska Linux. W celu dalszego wzmocnienia ochrony rozważ połączenie tego rozwiązania z odpowiednio skonfigurowanym firewallem UFW, co zostało szczegółowo opisane w naszym poradniku dotyczącym tego, jak skonfigurować firewall UFW na Ubuntu i Debianie. Zachowanie czujności oraz regularne aktualizowanie oprogramowania pozostają najlepszym sposobem na utrzymanie bezpiecznej i niezawodnej infrastruktury serwerowej.

Najczęściej zadawane pytania

Możesz użyć polecenia fail2ban-client status nginx, aby wyświetlić aktywne blokady dla więzienia Nginx na swoim serwerze VoxiHost.
Uruchom fail2ban-client set nginx unbanip TWÓJ_ADRES_IP, aby natychmiast usunąć swój adres IP z czarnej listy.
Backend systemd pozwala Fail2Ban na bezpośredni odczyt logów z dziennika systemowego, co jest znacznie bardziej wydajne i niezawodne w nowoczesnych dystrybucjach Linux.
Edytuj plik jail.local i dodaj swój adres IP do parametru ignoreip w sekcji [DEFAULT].
Fail2Ban nie zastępuje dedykowanego rozwiązania chroniącego przed DDoS, takiego jak VoxiHost Shield, ale pomaga ograniczyć próby brute-force na poziomie aplikacji.

Sugeruj poprawki na GitHubie

Zauważyłeś literówkę lub chcesz ulepszyć ten poradnik? Ten wpis jest open-source i możesz go edytować.

Edytuj ten wpis
Wróć do listy wpisów

Języki