Jak zabezpieczyć serwer Linux za pomocą fail2ban

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

Bezpieczeństwo Bezpieczeństwo Bezpieczeństwo

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

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

Aby to zrobić, musisz monitorować żądania połączeń, które nie trafiają na konto. Jeśli w krótkim okresie wielokrotnie nie uda im się uwierzytelnić, należy zakazać im dalszych prób.

Jedynym sposobem, w jaki można to praktycznie osiągnąć, jest zautomatyzowanie całego procesu. Przy odrobinie prostej konfiguracji fail2ban będzie zarządzać monitorowanie, blokowanie i odblokowywanie dla Was.

fail2ban integruje się z firewall Linux iptables. Wymusza 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 obawiasz się o bezpieczeństwo, prawdopodobnie masz skonfigurowaną zaporę z dobrze wypełnionym zestawem reguł. tylko fail2ban dodaje i usuwa własne reguły—Twoje zwykłe funkcje zapory pozostaną niezmienione.

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

sudo iptables -L

sudo iptables -L w oknie terminala.

Instalowanie fail2ban

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

sudo apt-get install fail2ban

sudo apt-get install fail2ban w oknie terminala.

W Fedorze 32 wpisz:

sudo dnf install fail2ban

sudo dnf install fail2ban w oknie terminala.

W Manjaro 20.0.1 użyliśmy pacmana:

sudo pacman -Sy fail2ban

sudo pacman -Sy fail2ban w oknie terminala.

Konfiguracja fail2ban

Instalacja fail2ban zawiera domyślny plik konfiguracyjny o nazwie jail.conf. Ten plik jest nadpisywany po uaktualnieniu 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 utrzymywać się podczas aktualizacji. Oba pliki są automatycznie odczytywane przez fail2ban.

Oto jak skopiować plik:

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

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local w oknie terminala.

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

sudo gedit /etc/fail2ban/jail.local

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

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

Znajdziesz plik [DEFAULT] sekcja gdzieś w okolicach linii 40. Jest to długa sekcja z wieloma komentarzami i wyjaśnieniami.

/etc/fail2ban/jail.local otworzył się w oknie gedit i przewinął do wiersza 89.

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

ignoreip: Biała lista adresów IP, które nigdy nie zostaną zbanowane. Mają stałą kartę „Get Out of Jail Free”. Plik adres IP hosta lokalnego (127.0.0.1) jest domyślnie na liście wraz z jego odpowiednikiem w IPv6 (:: 1). Jeśli istnieją inne adresy IP, o których wiesz, że nigdy nie powinny być zbanowane, dodaj je do tej listy i zostaw spację między nimi.
bantime: czas, przez jaki adres IP jest blokowany (litera „m” oznacza minuty). Jeśli wpiszesz wartość bez „m” lub „h” (dla godzin), zostanie to potraktowane jako sekundy. Wartość -1 spowoduje trwałe zablokowanie adresu IP. Uważaj, 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ść „zbyt wielu nieudanych prób”.

Jeśli połączenie z tego samego adresu IP powoduje maxretry nieudane próby połączenia w okresie wyszukiwania, 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żdy z nich reprezentuje ustawienia stosowane do jednego typu połączenia. Dzięki temu możesz mieć różne ustawienia dla różnych typów połączeń. Lub możesz monitorować fail2ban tylko dla wybranego zestawu typów połączeń.

Można się tego domyślić z pliku [DEFAULT] nazwa sekcji, ale ustawienia, którym przyjrzeliśmy się, są domyślne. Spójrzmy teraz na ustawienia więzienia SSH.

Konfigurowanie więzienia

Jailsy umożliwiają przenoszenie typów połączeń do i z monitorowania fail2ban. Jeśli domyślne ustawienia nie pasują do tych, które chcesz zastosować w więzieniu, możesz ustawić określone wartości dla bantime, findtime i maxretry.

Przewiń w dół do około linii 280, a zobaczysz plik [sshd] Sekcja.

/etc/fail2ban/jail.local otworzył się w oknie gedit i przewinął do wiersza 280.

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

enabled = true

Wpisujemy również ten wiersz:

maxretry = 3

Domyślnym ustawieniem było pięć, ale chcemy być bardziej ostrożni w przypadku połączeń SSH. Zrzuciliśmy go na trzy, a następnie zapisaliśmy i zamknęliśmy plik.

Dodaliśmy to więzienie do monitorowania fail2ban i zastąpiliśmy jedno z ustawień domyślnych. Więzienie może używać kombinacji ustawień domyślnych i specyficznych dla więzienia.

Włączanie fail2ban

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

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

sudo systemctl enable fail2ban

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

sudo systemctl start fail2ban

sudo systemctl włącz fail2ban w oknie terminala.

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

sudo systemctl status fail2ban.service

sudo systemctl status fail2ban.service w oknie terminala.

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

Zobaczmy, czy fail2ban się zgadza:

sudo fail2ban-client status

stan klienta sudo fail2ban w oknie terminala.

To odzwierciedla to, co stworzyliśmy. Włączyliśmy jedno więzienie o nazwie [sshd]. Jeśli dodamy nazwę więzienia do naszego poprzedniego polecenia, możemy przyjrzeć się temu dokładniej:

sudo fail2ban-client status sshd

sudo fail2ban-client status sshd w oknie terminala.

Zawiera listę błędów i zablokowanych adresów IP. Oczywiście wszystkie statystyki w tej chwili wynoszą zero.

Testowanie naszego więzienia

Na innym komputerze wyślemy żądanie połączenia SSH do naszej maszyny testowej i celowo wprowadzimy błędne hasło. Masz trzy próby uzyskania prawidłowego hasła przy każdej próbie połączenia.

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

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

ssh dave@ubtuntu20-04.local w oknie terminala z wieloma nieudanymi próbami podania hasła.

Po pierwszym niepoprawnym haśle przy trzecim żądaniu połączenia nie otrzymujemy odpowiedzi ze zdalnego komputera. 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]

ssh dave@ubuntu20-04.local w oknie terminala z odpowiedzią na odmowę połączenia.

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 na szczegóły [sshd] więzienie znowu:

sudo fail2ban-client status sshd

sudo fail2ban-client status sshd w oknie terminala.

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

sudo iptables -L w oknie terminala.

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 blokady (np. Kilka godzin), ale chcesz zezwolić adresowi IP na szybsze wysyłanie kolejnych żądań połączenia, możesz zwolnić je wcześniej.

Aby to zrobić, wpisujemy:

sudo fail2ban-client set sshd unbanip 192.168.5.25

sudo fail2ban-client ustawia sshd unbanip 192.168.5.25 w oknie terminala.

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

ssh [email protected]

ssh dave@ubuntu20-04.local w oknie terminala.

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.