Jak zabezpieczyć serwer linuksowy za pomocą fail2ban?

Opublikowany: 2022-01-29
Stylizowane okno terminala działające na laptopie z systemem Linux w stylu Ubuntu.
Fatmawati Achmad Zaenuri/Shutterstock

Dzięki fail2ban komputer z systemem Linux automatycznie blokuje adresy IP, które mają zbyt wiele błędów połączenia. To samoregulujące się bezpieczeństwo! Pokażemy Ci, jak z niego korzystać.

Bezpieczeństwo Bezpieczeństwo Bezpieczeństwo

Księżna Windsoru, Wallis Simpson, powiedziała kiedyś słynne powiedzenie: „Nigdy nie możesz być za bogaty ani za chudy”. Zaktualizowaliśmy to dla naszego nowoczesnego, połączonego świata: nigdy nie możesz być zbyt ostrożny ani zbyt bezpieczny.

Jeśli Twój komputer akceptuje przychodzące żądania połączeń, takie jak połączenia Secure Shell (SSH) lub działa jako serwer WWW lub poczty e-mail, musisz chronić go przed atakami typu brute-force i odgadywaniem haseł.

Aby to zrobić, musisz monitorować żądania połączenia, które nie dostają się do konta. Jeśli w krótkim czasie wielokrotnie nie uda im się uwierzytelnić, należy im zabronić podejmowania dalszych prób.

Jedynym sposobem, w jaki można to osiągnąć w praktyce, jest zautomatyzowanie całego procesu. Przy odrobinie prostej konfiguracji, fail2ban będzie zarządzać monitorowaniem, banowaniem i odbanowaniem za Ciebie.

Reklama

fail2ban integruje się z iptables firewall Linuksa. Egzekwuje zakazy na podejrzanych adresach IP, dodając reguły do ​​zapory. Aby to wyjaśnienie było uporządkowane, używamy iptables z pustym zestawem reguł.

Oczywiście, jeśli martwisz się o bezpieczeństwo, prawdopodobnie masz zaporę sieciową skonfigurowaną z dobrze wypełnionym zestawem reguł. fail2ban tylko dodaje i usuwa własne reguły — zwykłe funkcje zapory pozostaną nietknięte.

Możemy zobaczyć nasz pusty zestaw reguł za pomocą tego polecenia:

 sudo iptables -L 

POWIĄZANE: Przewodnik dla początkujących po iptables, zapora systemu Linux

Instalowanie fail2ban

Instalacja fail2ban jest prosta we wszystkich dystrybucjach, których użyliśmy do zbadania tego artykułu. W Ubuntu 20.04 polecenie wygląda następująco:

 sudo apt-get install fail2ban 

W Fedorze 32 wpisz:

 sudo dnf zainstaluj fail2ban 

W Manjaro 20.0.1 użyliśmy pacman :

 sudo pacman -Sy fail2ban 

Konfiguracja fail2ban

Instalacja fail2ban zawiera domyślny plik konfiguracyjny o nazwie jail.conf. Ten plik jest nadpisywany po zaktualizowaniu fail2ban , więc utracimy nasze zmiany, jeśli dokonamy dostosowań w tym pliku.

Zamiast tego skopiujemy plik jail.conf do pliku o nazwie jail.local. Umieszczając nasze zmiany konfiguracyjne w jail.local, będą one utrwalane podczas aktualizacji. Oba pliki są automatycznie odczytywane przez fail2ban .

Oto jak skopiować plik:

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

Teraz otwórz plik w swoim ulubionym edytorze. Użyjemy gedit :

 sudo gedit /etc/fail2ban/jail.local
Reklama

Poszukamy w pliku dwóch sekcji: [DEFAULT] i [sshd]. Uważaj jednak, aby znaleźć właściwe sekcje. Etykiety te pojawiają się również u góry w sekcji, która je opisuje, ale nie o to nam chodzi.

/etc/fail2ban/jail.local otwarty w oknie gedit.

Sekcja [DEFAULT] znajduje się w okolicach linii 40. Jest to długa sekcja z wieloma komentarzami i wyjaśnieniami.

/etc/fail2ban/jail.local otwarty w oknie gedit i przewinięty do linii 89.

Przewiń w dół do linii 90, a znajdziesz następujące cztery ustawienia, o których musisz wiedzieć:

  • ignoreip: Biała lista adresów IP, które nigdy nie będą blokowane. Posiadają stałą kartę „Wyjdź z więzienia za darmo”. Adres IP hosta lokalnego ( 127.0.0.1 ) znajduje się domyślnie na liście wraz z jego odpowiednikiem IPv6 ( ::1 ). Jeśli istnieją inne adresy IP, o których wiesz, że nigdy nie powinny być blokowane, dodaj je do tej listy i zostaw spację między nimi.
  • bantime: czas, przez który adres IP jest zablokowany ("m" oznacza minuty). Jeśli wpiszesz wartość bez „m” lub „h” (dla godzin), zostanie ona potraktowana jako sekundy. Wartość -1 spowoduje trwałe zablokowanie adresu IP. Bądź bardzo ostrożny, aby nie zablokować się na stałe.
  • findtime: czas, w którym zbyt wiele nieudanych prób połączenia spowoduje zablokowanie adresu IP.
  • maxretry: wartość dla „zbyt wielu nieudanych prób”.

Jeśli połączenie z tego samego adresu IP wykona maxretry nieudane próby połączenia w okresie findtime , są one blokowane na czas bantime . Jedynymi wyjątkami są adresy IP z listy ignoreip .

fail2ban umieszcza adresy IP w więzieniu na określony czas. fail2ban obsługuje wiele różnych więzień, a każde z nich reprezentuje przechowuje ustawienia dotyczą jednego typu połączenia. Dzięki temu możesz mieć różne ustawienia dla różnych typów połączeń. Lub możesz mieć monitor fail2ban tylko wybrany zestaw typów połączeń.

Być może zgadłeś to z nazwy sekcji [DEFAULT], ale ustawienia, które przejrzeliśmy, są ustawieniami domyślnymi. Spójrzmy teraz na ustawienia więzienia SSH.

POWIĄZANE: Jak edytować pliki tekstowe graficznie w systemie Linux za pomocą gedit

Konfiguracja więzienia

Więzienia pozwalają przenosić typy połączeń do i z monitorowania fail2ban's . Jeśli domyślne ustawienia nie pasują do tych, które chcesz zastosować do więzienia, możesz ustawić określone wartości dla bantime , findtime i maxretry .

Reklama

Przewiń w dół do linii 280, a zobaczysz sekcję [sshd].

/etc/fail2ban/jail.local otwarty w oknie gedit i przewinięty do linii 280.

Tutaj możesz ustawić wartości dla więzienia połączenia SSH. Aby włączyć to więzienie do monitorowania i blokowania, musimy wpisać następującą linię:

 włączone = prawda

Wpisujemy również tę linię:

 maksymalna ponowna próba = 3

Domyślne ustawienie to pięć, ale chcemy być bardziej ostrożni z połączeniami SSH. Zmniejszyliśmy go do trzech, a następnie zapisaliśmy i zamknęliśmy plik.

Dodaliśmy to więzienie do monitoringu fail2ban's jedno z domyślnych ustawień. Więzienie może korzystać z kombinacji ustawień domyślnych i specyficznych dla więzienia.

Włączanie fail2ban

Do tej pory zainstalowaliśmy i skonfigurowaliśmy fail2ban . Teraz musimy włączyć go jako usługę automatycznego uruchamiania. Następnie musimy go przetestować, aby upewnić się, że działa zgodnie z oczekiwaniami.

Reklama

Aby włączyć fail2ban jako usługę, używamy polecenia systemctl :

 sudo systemctl włącz fail2ban

Używamy go również do uruchomienia usługi:

 sudo systemctl start fail2ban 

Status usługi możemy również sprawdzić za pomocą systemctl :

 status sudo systemctl fail2ban.service 

Wszystko wygląda dobrze – mamy zielone światło, więc wszystko jest w porządku.

Zobaczmy, czy fail2ban się zgadza:

 status klienta sudo fail2ban 

Odzwierciedla to, co stworzyliśmy. Uruchomiliśmy jedno więzienie o nazwie [sshd]. Jeśli dołączymy nazwę więzienia do naszego poprzedniego polecenia, możemy przyjrzeć się temu głębiej:

 sudo fail2ban-client status sshd 

Zawiera listę awarii i zabronionych adresów IP. Oczywiście wszystkie statystyki są w tej chwili zerowe.

Testowanie naszego więzienia

Na innym komputerze wyślemy żądanie połączenia SSH do naszej maszyny testowej i celowo błędnie wpiszemy hasło. Przy każdej próbie połączenia otrzymujesz trzy próby uzyskania hasła.

Reklama

Wartość maxretry zostanie wyzwolona po trzech nieudanych próbach połączenia, a nie po trzech nieudanych próbach podania hasła. Musimy więc trzykrotnie wpisać nieprawidłowe hasło, aby nie powiodła się jedna próba połączenia.

Następnie podejmiemy kolejną próbę połączenia i trzykrotnie wpiszemy niepoprawne hasło. Pierwsza niepoprawna próba podania hasła w trzecim żądaniu połączenia powinna wywołać fail2ban.

Po pierwszym nieprawidłowym haśle w trzecim żądaniu połączenia nie otrzymujemy odpowiedzi ze zdalnej maszyny. Nie otrzymujemy żadnego wyjaśnienia; po prostu dostajemy zimne ramię.

Musisz nacisnąć Ctrl+C, aby powrócić do wiersza polecenia. Jeśli spróbujemy jeszcze raz, otrzymamy inną odpowiedź:

 ssh [email protected] 

Wcześniej komunikat o błędzie brzmiał „Odmowa uprawnień”. Tym razem połączenie zostało odrzucone. Jesteśmy persona non grata. Zostaliśmy zbanowani.

Spójrzmy ponownie na szczegóły więzienia [sshd]:

 sudo fail2ban-client status sshd 

Reklama

Wystąpiły trzy awarie, a jeden adres IP (192.168.4.25) został zbanowany.

Jak wspomnieliśmy wcześniej, fail2ban wymusza bany, dodając reguły do ​​zestawu reguł zapory. Przyjrzyjmy się jeszcze raz zestawowi reguł (wcześniej był pusty):

 sudo iptables -L 

Do polityki INPUT dodano regułę wysyłającą ruch SSH do łańcucha f2b-sshd . Reguła w łańcuchu f2b-sshd odrzuca połączenia SSH z 192.168.4.25. Nie zmieniliśmy domyślnego ustawienia bantime , więc za 10 minut ten adres IP zostanie odblokowany i będzie mógł wysyłać nowe żądania połączenia.

Jeśli ustawisz dłuższy czas trwania bana (np. kilka godzin), ale chcesz, aby adres IP mógł wcześniej wysłać kolejne żądanie połączenia, możesz go wcześniej zwolnić warunkowo.

W tym celu wpisujemy następujące polecenie:

 sudo fail2ban-client set sshd unbanip 192.168.5.25 

Na naszym zdalnym komputerze, jeśli wykonamy kolejne żądanie połączenia SSH i wpiszemy poprawne hasło, będziemy mogli się połączyć:

 ssh [email protected] 

Prosty i skuteczny

Prostsze jest zwykle lepsze, a fail2ban to eleganckie rozwiązanie trudnego problemu. Zajmuje bardzo mało konfiguracji i nie nakłada prawie żadnych kosztów operacyjnych — dla Ciebie lub Twojego komputera.

POWIĄZANE: Najlepsze laptopy z systemem Linux dla programistów i entuzjastów