Zainstaluj Fail2ban i powiąż go z SSH i Nginx

Gdy mamy zamontowany serwer z Linuksem i chcemy nim zarządzać z internetu przez zdalne sterowanie SSH, może się zdarzyć, że zaczniemy otrzymywać ataki mające na celu wejście do systemu i możliwość sterowania nim na jego potrzeby. Ataki te są zwykle przeprowadzane przez programy komputerowe (boty), które przez długi czas próbują uzyskać dostęp do systemu przy użyciu brutalnej siły.

W poprzednich postach mówiłem o tym, jak skonfigurować usługę SSH, ale niektóre zaawansowane boty nie wchodzą do usługi, ale mogą zabić usługę SSH na serwerze, wyłączając zdalny dostęp.

Kompletna instrukcja obsługi SSH (Secure Shell)

Możemy tego uniknąć, korzystając z narzędzie fail2ban, jest bardzo praktyczny i oferuje duży margines bezpieczeństwa. Aby wyjaśnić trochę, jak to działa. Jest w stanie tworzyć iptables przed każdą nieudaną próbą logowania więcej niż 5 razy z rzędu, odrzucając każdy rodzaj połączenia po zbanowaniu.

Zainstaluj Fail2ban


Instalację można wykonać bezpośrednio z apt. Najpierw aktualizujemy system, a następnie instalujemy Fail2ban.
 apt-get update && apt-get -y upgrade
 apt-get install fail2ban
To nie tylko instaluje program, ale także pozostawia go w ruchu i uruchamia się z systemem.

Konfiguracja Fail2ban


Usługa Fail2ban ma swoje ustawienia w katalogu / etc / fail2ban. Masz kilka wstępnie skonfigurowanych opcji w jail.conf, najlepszą rzeczą w tym przypadku jest skopiowanie pliku i nie dokonywanie w nim modyfikacji bezpośrednio, podczas aktualizacji fail2ban te pliki są nadpisywane i możesz utracić wszystkie wprowadzone wcześniej zmiany.

W tym przypadku kopiujemy plik i nazywamy go jail.local, aby mógł go znaleźć.

 sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Po skopiowaniu możemy go otworzyć i zobaczyć, jak działa.
 vim /etc/fail2ban/jail.local
Wewnątrz pliku mamy kilka parametrów, które możemy dostosować. Każdy parametr znajdujący się pod tagiem [DEFAULT] zostanie zastosowany do wszystkich usług włączonych przez Fail2ban, takich jak SSH, NGINX, APACHE, nazwiemy to globalnym, wtedy będziemy mieć określone sekcje dla każdej usługi.

Zaczniemy od dodania parametrów do sekcji globalnej.

 ignorowaćip = 127.0.0.1
Dodajemy naszego localhosta w ten sposób zignoruje cały lokalny ruch, możemy dodać dodatkowe adresy oddzielając je spacją.
 czas bani = 600
Bantime to czas, przez który klient zostanie zbanowany po zablokowaniu. Jednostka jest w sekundach. 600 sekund to 10 minut to wartość domyślna.
 findtime = 600 maxretry = 3
Następnie mamy findtime i maxretry. Odpowiadają za ustalenie warunków, aby klient został domyślnie zbanowany, można przeczytać, że każdy użytkownik, który ma więcej niż 3 nieudane próby w czasie krótszym niż 10 minut, zostanie zbanowany.
 destemail = root @ localhost nazwa nadawcy = Fail2Ban mta = sendmail
Jeśli chcemy tworzyć alerty dla zbanowanych użytkowników, te 3 parametry są niezbędne, określimy miejsce docelowe, do którego należy wysłać e-mail z alertem, kto będzie odpowiedzialny za jego wysłanie i wreszcie mta, aby określić, z jakiej usługi e-mail będziemy korzystać .
 akcja = $ (działanie_) s
Tutaj określimy, jakie działania podjąć, gdy wymagany jest ban. Wartość action_ jest domyślną akcją, która opiera się na odrzucaniu ruchu klienta do czasu wygaśnięcia czasu bana.

Jeśli chcemy wysłać alert pocztą, musimy zmienić wartość na action_mw, ale jeśli chcemy, aby dołączał również wiersze logu w treści maila, użyjemy action_mwl. Przed zmianą tej wartości musimy upewnić się, że ustawienia poczty są prawidłowe.

Ustawienia według usługi


Po zakończeniu konfiguracji globalnych dodamy parametry, które będą stosowane wyłącznie do

Usługa SSH, upewniamy się, że dodajemy opcje pod tagiem [SSH].

 włączone = prawda
Domyślnie usługa SSH jest włączona, ale możemy ją w razie potrzeby zmodyfikować w tej opcji.

Cała ta sekcja może działać z wartościami, które opiszę później, ale możesz je zmodyfikować, aby dostosować je do swoich potrzeb lub pozostawić je wszystkie domyślnie.

Kolejną konfiguracją są filtry, które wskazują, czy logowanie było poprawne, czy nie i można je dodać dla innych usług, np. mamy serwer z nginxem i część strony jest chroniona hasłem, ale klient atakuje z brutalną siłą , możemy to zatrzymać, dodając następujące elementy pod tagiem [nginx-http-auth].

 [nginx-http-auth] enabled = true filter = nginx-http-auth port = http, https logpath = /var/log/nginx/error.log
Teraz, jeśli użytkownik ma więcej niż 3 nieudane próby logowania, zostanie to odzwierciedlone w dziennikach, a fail2ban zadziała i zablokuje cały ruch użytkownika.

Środowisko testowe


Po zrozumieniu podstaw zrobimy małe środowisko testowe, w którym będziemy chronić SSH i Nginx poprzez Fail2ban, tworząc politykę banowania, która powiadomi nas o zbanowanym adresie IP.

Najpierw zainstalujemy Nginx, jeśli nie jest zainstalowany

 apt-get zainstaluj nginx
zainstalujemy usługę pocztową dla powiadomień, może to być sendmail
 apt-get install sendmail
na koniec chcemy, aby nasze iptables były trwałe po uruchomieniu, możemy albo utworzyć skrypt rc.0, albo zainstalować pakiet iptables-persistent.
 apt-get install iptables-persistent
Zostanie zainstalowany.

Ustanowienie naszej zapory sieciowej


Po zainstalowaniu powyższego musimy zaimplementować firewall, aby mógł blokować ruch. Stworzę podstawową zaporę sieciową w późniejszych postach, więcej o iptables.

Zezwolimy na nawiązywanie połączeń, ruch serwerowy, taki jak aktualizacje, oraz ruch przeznaczony dla portów SSH i Nginx. Cały pozostały ruch zostanie odrzucony.

 sudo iptables -A WEJŚCIE -i lo -j AKCEPTUJ sudo iptables -A WEJŚCIE -m conntrack --ctstate USTANOWIONE, POWIĄZANE -j AKCEPTUJ sudo iptables -A WEJŚCIE -p tcp --dport 22 -j AKCEPTUJ sudo iptables -A WEJŚCIE -p tcp --dport 80 -j AKCEPTUJ sudo iptables -A WEJŚCIE -j UPUŚĆ
Zmiany możemy zobaczyć za pomocą:
 iptables -S
Powinno to dać podobny wynik.
 -P AKCEPTUJ WEJŚCIE -P AKCEPTUJ PRZEKAZ -P AKCEPTUJ WYJŚCIE -N fail2ban-ssh -A WEJŚCIE -p tcp -m multiport --dports 22 -j fail2ban-ssh -A WEJŚCIE -i lo -j AKCEPTUJ -A WEJŚCIE -m conntrack --ctstate POWIĄZANE, USTANOWIONE -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban -ssh -j POWRÓT

Dostosowywanie ustawień Fail2ban


Teraz musimy skonfigurować plik jail.local według naszej wygody.
 vi /etc/fail2ban/jail.local
Możemy wydłużyć czas zbanowania użytkownika o co najmniej 30 minut, pamiętaj, aby ustawić wartość w sekundach.
 czas bani = 1800
Musimy skonfigurować e-mail, który otrzyma wszystkie alerty o banach fail2ban, poszukajmy wartości e-maila w pliku i wstawmy e-mail.
 destemail = [email protected]
Możemy zmienić nadawcę, który będzie wysyłał alert, który zwykle umieszczam pod nazwą fail2ban, dzięki czemu możemy lepiej filtrować wszystkie logi.

Po zmianie wartości akcji mamy 2 opcje:

  • akcja_mw: wysyła alert z raportem podobnym do polecenia whois zbanowanego klienta.
  • action_mwl: wyślij znacznie bardziej szczegółowy alert, umieszczając dziennik w treści wiadomości.

W tym wykorzystamy drugą opcję:

 akcja =% (action_mwl) s 
Następnie przejdziemy do sekcji [SSH] i będziemy mogli edytować maksymalną ilość prób przed banem, zostawimy to na 5:
 maksymalna ponowna próba = 5
Jeśli mamy usługę SSH na porcie innym niż 22, co jest wysoce zalecane, musimy wspomnieć o jego porcie.
 port = 45024
Następnie poszukamy tagu [nginx-http-auth], pozostawimy go bez zmian.
 [nginx-http-auth] włączone = prawda
Skończyliśmy i możemy zapisać i zamknąć plik.

Ponowne uruchamianie usługi Fail2ban


Aby wszystkie zmiany zostały zastosowane, zalecam zatrzymanie usługi.
 zatrzymanie usługi fail2ban 
Wtedy możemy je ponownie uruchomić
 usługa fail2ban start
Zajmie to chwilę, po około 5 minutach możemy ponownie zobaczyć nasze zasady za pomocą
 iptables -S
 -P AKCEPTUJ WEJŚCIE -P AKCEPTUJ DALEJ -P AKCEPTUJ WYJŚCIE -N fail2ban-nginx-http-auth -N fail2ban-ssh -A WEJŚCIE -p tcp -m multiport --dports 80 443 -j fail2ban-nginx-http-auth -A WEJŚCIE -p tcp -m multiport --dports 22 -j fail2ban-ssh -A WEJŚCIE -i lo -j AKCEPTUJ -A WEJŚCIE -m conntrack --ctstate POWIĄZANE, USTANOWIONE -j AKCEPTUJ -A WEJŚCIE -p tcp -m tcp - -dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban-nginx-http-auth -j RETURN -A fail2ban-ssh -j RETURN
Widzimy, jak fail2ban dodał nowe polityki, może się to różnić w zależności od konfiguracji zdefiniowanej w /etc/fail2ban/jail.local.

WnioskiZainstalowaliśmy fail2ban i skonfigurowaliśmy do pracy z SSH i NGINX, w przypadku APACHE musimy zmienić etykiety i katalog logów, ale jest bardzo podobny do nginx. Skonfigurowaliśmy tylko podstawy, możesz tworzyć filtry i znacznie bardziej zaawansowane reguły, polecam trochę poczytać ich stronę podręcznika, pliki konfiguracyjne są dobrze skomentowane, polecam odkrywać wszystkie jego funkcje krok po kroku.

Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt
wave wave wave wave wave