Fail2ban to narzędzie, które automatycznie blokuje adresy IP na komputerach z systemem Linux po zbyt wielu nieudanych próbach połączeń. To forma samoregulującego się zabezpieczenia! W tym artykule pokażemy, jak w pełni wykorzystać jego możliwości.
Bezpieczeństwo na pierwszym miejscu
Wallis Simpson, znana jako Księżna Windsoru, kiedyś stwierdziła: „Nigdy nie możesz być zbyt bogaty ani zbyt chudy”. W dzisiejszym zglobalizowanym świecie warto zaktualizować to powiedzenie do: nigdy nie można być zbyt ostrożnym ani zbyt bezpiecznym.
Jeżeli Twój komputer przyjmuje przychodzące połączenia, takie jak Secure Shell (SSH) lub działa jako serwer WWW czy e-mail, to niezwykle istotne jest, aby chronić go przed atakami siłowymi oraz próbami odgadywania haseł.
Aby skutecznie to zrobić, należy monitorować nieudane próby połączeń. W przypadku zbyt wielu nieudanych prób w krótkim czasie, konieczne jest ich zablokowanie.
Najlepszym sposobem na osiągnięcie tego celu jest automatyzacja całego procesu. Dzięki niewielkiej konfiguracji, fail2ban zajmie się monitorowaniem, blokowaniem i odblokowywaniem adresów IP za Ciebie.
Fail2ban współpracuje z zaporym systemu Linux, iptables, i umożliwia dodawanie reguł blokujących podejrzane adresy IP. Aby wyjaśnić ten proces, użyjemy iptables z pustym zestawem reguł.
Jeśli jednak jesteś zaniepokojony bezpieczeństwem, prawdopodobnie już masz zaporę skonfigurowaną z odpowiednimi regułami. Fail2ban dodaje i usuwa własne reguły, podczas gdy Twoje standardowe ustawienia zapory pozostają niezmienione.
Możemy sprawdzić nasz pusty zestaw reguł, używając następującego polecenia:
sudo iptables -L
Jak zainstalować fail2ban
Instalacja fail2ban jest prosta we wszystkich dystrybucjach, które były używane do przygotowania tego artykułu. W systemie Ubuntu 20.04 odpowiednie polecenie to:
sudo apt-get install fail2ban
W Fedorze 32 należy wpisać:
sudo dnf install fail2ban
Dla Manjaro 20.0.1 używamy pacmana:
sudo pacman -Sy fail2ban
Konfiguracja fail2ban
Podczas instalacji fail2ban tworzony jest domyślny plik konfiguracyjny o nazwie jail.conf. Należy jednak pamiętać, że wszelkie modyfikacje w tym pliku zostaną utracone podczas aktualizacji fail2ban.
Zamiast tego powinniśmy skopiować plik jail.conf do jail.local. Umieszczając nasze zmiany w jail.local, zachowamy je nawet po aktualizacji. Fail2ban automatycznie odczytuje oba pliki.
Aby skopiować plik, używamy polecenia:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Teraz otwórz plik w wybranym edytorze tekstu. Przykład użycia gedit:
sudo gedit /etc/fail2ban/jail.local
W pliku poszukaj dwóch sekcji: [DEFAULT] i [sshd]. Upewnij się, że znajdujesz się w odpowiednich sekcjach, ponieważ te etykiety mogą się pojawiać także w innych kontekstach.
W sekcji [DEFAULT], która znajduje się około linii 40, znajdziesz wiele ustawień z komentarzami i wyjaśnieniami.
Przewiń do linii około 90, aby znaleźć cztery kluczowe ustawienia:
ignoreip: Lista adresów IP, które nigdy nie będą blokowane. Mają tzw. „Kartę Get Out of Jail Free”. Na liście znajduje się domyślny adres IP hosta lokalnego (127.0.0.1) oraz jego odpowiednik w IPv6 (::1). Jeśli znasz inne adresy IP, które nie powinny być blokowane, dodaj je do tej listy, oddzielając spacjami.
bantime: Czas, przez jaki adres IP będzie zablokowany (litera „m” oznacza minuty). Gdy wpiszesz wartość bez „m” lub „h” (dla godzin), będzie to traktowane jako sekundy. Ustawienie -1 spowoduje trwałe zablokowanie adresu IP. Należy uważać, aby nie zablokować się na stałe.
findtime: Okres czasu, w którym zbyt wiele nieudanych prób połączenia skutkuje zablokowaniem adresu IP.
maxretry: Maksymalna liczba „zbyt wielu nieudanych prób”.
Jeśli połączenie z jednego adresu IP przekroczy maxretry w okresie findtime, zostanie zablokowane na czas bantime. Wyjątkiem są adresy IP z listy ignoreip.
Fail2ban umieszcza adresy IP w „więzieniu” na określony czas. Oprogramowanie to obsługuje wiele różnych „więzień”, z których każde może mieć różne ustawienia dla różnych typów połączeń. Dzięki temu możesz mieć różne ustawienia dla różnych rodzajów połączeń lub monitorować tylko wybrane typy połączeń.
Jak można się domyślić z nazewnictwa sekcji [DEFAULT], omówione ustawienia są domyślne. Teraz przyjrzyjmy się ustawieniom dla więzienia SSH.
Ustawienia więzienia
Więzienia pozwalają na dodawanie lub usuwanie typów połączeń do monitorowania przez fail2ban. Jeśli domyślne ustawienia nie pasują do Twoich potrzeb, możesz skonfigurować konkretne wartości dla bantime, findtime oraz maxretry.
Przewiń do około linii 280, gdzie znajdziesz sekcję [sshd].
W tej sekcji możesz ustawić parametry dla połączeń SSH. Aby włączyć to więzienie do monitorowania, należy dodać następujący wiersz:
enabled = true
Dodaj także ten wiersz:
maxretry = 3
Domyślnie wartość ta wynosi pięć, ale w przypadku połączeń SSH wolimy być bardziej ostrożni. Zmniejszamy ją do trzech, a następnie zapisujemy i zamykamy plik.
Dzięki temu więzienie jest aktywne w fail2ban, a jedno z ustawień domyślnych zostało zmienione. Więzienie może korzystać zarówno z domyślnych, jak i specyficznych dla więzienia ustawień.
Uruchamianie fail2ban
Dotychczas zainstalowaliśmy fail2ban i skonfigurowaliśmy go. Teraz musimy go uruchomić jako usługę automatycznego startu. Następnie przetestujemy, czy działa prawidłowo.
Aby aktywować fail2ban jako usługę, używamy polecenia systemctl:
sudo systemctl enable fail2ban
Uruchamiamy również usługę przy użyciu:
sudo systemctl start fail2ban
Możemy sprawdzić status usługi również za pomocą systemctl:
sudo systemctl status fail2ban.service
Wygląda na to, że wszystko działa poprawnie – mamy zielony wskaźnik, co oznacza, że system działa bez zarzutu.
Sprawdźmy, czy fail2ban działa poprawnie:
sudo fail2ban-client status
To polecenie wyświetla aktualny stan. Włączyliśmy jedno więzienie o nazwie [sshd]. Możemy dodać nazwę więzienia do wcześniejszego polecenia, aby uzyskać więcej informacji:
sudo fail2ban-client status sshd
Wyświetla ono listę błędów oraz zablokowanych adresów IP. Na ten moment wszystkie statystyki powinny wynosić zero.
Testowanie działania więzienia
Na innym komputerze wyślemy żądanie połączenia SSH do naszej maszyny testowej, celowo wprowadzając błędne hasło. Mamy trzy próby na podanie poprawnego hasła przy każdej próbie połączenia.
Wartość maxretry zostanie osiągnięta po trzech nieudanych próbach połączenia, a nie po trzech błędnych próbach hasła. Musimy więc trzykrotnie wpisać błędne hasło, aby połączenie zostało odrzucone.
Po kolejnej próbie połączenia, w której trzykrotnie wprowadzimy błędne hasło, pierwsza nieprawidłowa próba w trzecim żądaniu powinna aktywować fail2ban.
Po pierwszym błędnym haśle przy trzecim żądaniu połączenia nie otrzymamy żadnej odpowiedzi z zdalnego komputera. Nie będziemy mieć żadnego wyjaśnienia, po prostu nie uzyskamy odpowiedzi.
Aby wrócić do wiersza polecenia, należy nacisnąć Ctrl + C. Jeśli spróbujemy ponownie, otrzymamy inną odpowiedź:
ssh dave@ubuntu20-04.local
Wcześniej komunikat brzmiał „Odmowa uprawnień”. Teraz połączenie jest odrzucane. Zostaliśmy zablokowani.
Sprawdźmy ponownie szczegóły więzienia [sshd]:
sudo fail2ban-client status sshd
Widzimy trzy nieudane próby oraz jeden zablokowany adres IP (192.168.4.25).
Jak wcześniej wspomniano, fail2ban wymusza blokady, dodając reguły do zestawu reguł zapory. Sprawdźmy ponownie zestaw reguł (wcześniej był pusty):
sudo iptables -L
Do polityki INPUT dodano regułę kierującą ruch SSH do łańcucha f2b-sshd. Reguła w tym łańcuchu odrzuca połączenia SSH z adresu 192.168.4.25. Ponieważ nie zmieniliśmy domyślnego ustawienia bantime, po 10 minutach adres IP zostanie odblokowany i będzie mógł ponownie wysyłać żądania połączenia.
Jeśli zastosujesz dłuższy czas trwania blokady (np. kilka godzin), ale chcesz umożliwić adresowi IP wcześniejsze wysyłanie kolejnych żądań połączenia, możesz go odblokować wcześniej.
Aby to zrobić, wpisujemy:
sudo fail2ban-client set sshd unbanip 192.168.5.25
Na naszym zdalnym komputerze, jeśli ponownie zażądamy połączenia SSH i wpiszemy poprawne hasło, zyskamy dostęp:
ssh dave@ubuntu20-04.local
Prosta i skuteczna metoda
Prostota często idzie w parze z efektywnością, a fail2ban to eleganckie rozwiązanie dla złożonego problemu. Wymaga minimalnej konfiguracji i nie generuje znaczących kosztów operacyjnych – ani dla Ciebie, ani dla Twojego komputera.
newsblog.pl
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.