Konfigurowanie Fail2Ban w systemie Linux w celu ochrony SSH, Apache, MySQL, Exim

Fail2ban umożliwia blokowanie dostępu do serwera lub uruchamiania usług na podstawie analizy dzienników dostępu i połączeń. Fail2Ban może automatycznie tworzyć reguły zapory, aby blokować określone adresy IP, jeśli działania z tego adresu IP zostaną wykryte jako podejrzane. Tak więc Fail2Ban może chronić Twój serwer przed zgadywaniem hasła za pośrednictwem SSH, ataków DDoS, wykorzystywania prób wykorzystania i wykonywania zabronionych działań.

Każda usługa serwera, której porty są otwarte na świat zewnętrzny, jest potencjalnie podatna na ataki. Porty niektórych usług można zamknąć, ale nie wszystkie mogą to zrobić. Na przykład, jeśli chcesz, aby usługa pocztowa SMTP działała w pełni, nie możesz jej wyłączyć ani zablokować portu w zaporze ogniowej, a od czasu do czasu możesz zobaczyć dzienniki w dziennikach dotyczące próby wybrania hasła do konta. Dzieje się tak w przypadku innych usług..

Zwykle na wszystkich moich serwerach zamykam dostęp SSH z zewnątrz, ponieważ Łączę się z moimi serwerami z mojego statycznego adresu IP lub poprzez połączenie OpenVPN. Ale nie zawsze jest to możliwe. Zastąpienie standardowych portów przychodzi na ratunek lub skonfigurować na serwerze usług fail2ban. W tym przykładzie pokażemy, jak zainstalować i używać fail2ban na CentOS, jednak możesz użyć tej instrukcji również w innych dystrybucjach Linuksa..

Treść

  • Instalacja i wstępna konfiguracja Fail2Ban w CentOS 8/7
  • Używanie Fail2Ban do ochrony SSH przed sprawdzeniem hasła
  • Dzienniki Fail2Ban
  • Zabezpieczanie Apache za pomocą Fail2Ban
  • Konfigurowanie pakietów Fail2Ban i Nginx
  • Zabezpieczanie MySQL za pomocą Fail2Ban
  • Fail2Ban Rules for Exim
  • Fail2Ban Biała lista IP, odblokowanie adresu IP

Instalacja i wstępna konfiguracja Fail2Ban w CentOS 8/7

Pakiet do instalacji fail2ban znajduje się w repozytorium Epel, połączymy go:

# yum zainstaluj epel-release -y

Po podłączeniu repozytorium możesz zainstalować fail2ban przez yum lub dnf (na CentOS 8):

# yum zainstaluj fail2ban -y

Jak każda inna usługa, fail2ban należy dodać do uruchamiania, aby uruchamiał się automatycznie po ponownym uruchomieniu systemu:

[root @ server ~] # systemctl włącz fail2ban

Utworzono symlink /etc/systemd/system/multi-user.target.wants/fail2ban.service → /usr/lib/systemd/system/fail2ban.service.

Service fail2ban przechowuje pliki konfiguracyjne w katalogu / etc / fail2ban. Główny plik konfiguracyjny - /etc/fail2ban/jail.conf. Ponieważ ten plik można zastąpić podczas aktualizacji usługi, do pracy musisz utworzyć plik jail.local. Także pliki w katalogu /etc/fail2ban/jail.d/ można użyć do zastąpienia ustawień w powyższych plikach. Pliki są stosowane w następującej kolejności:

  • /etc/fail2ban/jail.conf
  • /etc/fail2ban/jail.d/*.conf
  • /etc/fail2ban/jail.local
  • /etc/fail2ban/jail.d/*.local

Używanie Fail2Ban do ochrony SSH przed sprawdzeniem hasła

Utwórz plik i wprowadź ustawienia:

# nano /etc/fail2ban/jail.local

I dodaj do niego zawartość:

[DEFAULT] # Banowanie hostów na godzinę: bantime = 3600 # Przesłonięcie /etc/fail2ban/jail.d/00-firewalld.conf: banaction = iptables-multiport [sshd] enabled = true

Ta konfiguracja ustanawia nowy czas blokowania adresów IP dla wszystkich usług, ustawia użycie iptables dla blokad i ochrona sshd jest włączona.

Aby użyć zapory ogniowej do filtrowania, określ:

banaction = firewallcmd-ipset

Po zmianie ustawień uruchom ponownie usługę:

# systemctl restart fail2ban

Aby wyświetlić status fail2ban i sprawdzić listę chronionych usług, uruchom polecenie:

[root @ server ~] # status fail2ban-client

Status | - Liczba więzień: 1 '- Lista więzień: sshd 

Możesz zażądać bieżącego stanu blokady fail2ban dla określonej usługi:

# status klienta fail2ban sshd

W pliku jail.conf Potrafi opisać ogólne parametry, które nie zostaną zastąpione jail.local.

Odblokuj linię:

ignoreip = 127.0.0.1/8

Zmień następujące wartości:
bantime = 10m - czas, na który zostanie zablokowany adres IP
findtime = 10m - czas, w którym liczone będą nieudane próby autoryzacji.
maxretry = 3 - liczba prób przed zablokowaniem

Aby otrzymywać powiadomienia e-mail, musisz skonfigurować następujące opcje:
destemail = [email protected] -odbiorca
nadawca = [email protected] - nadawca
mta = postfiks - Usługa SMTP, za pośrednictwem której następuje wysyłanie

Aby skonfigurować blokowanie dla poszczególnych usług, w pliku /etc/fail2ban/jail.local po bloku [DOMYŚLNY] tworzony jest blok dla żądanej usługi, na przykład jak w przypadku sshd. Dodaj do tego kilka ustawień:

[sshd] enabled = true port = ssh logpath =% (sshd_log) s

Wskazaliśmy, który port należy zablokować i gdzie zapisać dzienniki blokujące. Zwróć uwagę na katalog /etc/fail2ban/filter.d, tam opisano filtry, za pomocą których będą analizowane wpisy w dzienniku i sprawdzanie, czy ten lub inny wpis wskazuje na nieudane uwierzytelnienie. Jeśli wyświetlasz listę plików w katalogu, możesz znaleźć reguły fail2ban dla najpopularniejszych usług:
# ls /etc/fail2ban/filter.d

Pliki są szczegółowo opisane i możesz przestudiować, czego potrzebujesz, aby zrozumieć, w jaki sposób sprawdzane są dzienniki..

Dzienniki Fail2Ban

Aby sprawdzić dziennik fail2ban, uruchom polecenie:

# journalctl -b -u fail2ban

Możesz także sprawdzić dzienniki w czasie rzeczywistym:

# tail -F /var/log/fail2ban.log

Dane wyjściowe dziennika:

05.12.2019 12: 13: 26.914 fail2ban.actions [9750]: UWAGA [sshd] Ban przywracania 222.186.180.17 2019-12-05 12: 13: 26.930 fail2ban.actions [9750]: UWAGA [sshd] Ban przywracania 222.186 .180.223 2019-12-05 12: 13: 26 944 fail2ban.actions [9750]: UWAGA [sshd] Przywróć zakaz 36.72.82.10 2019-12-05 12: 13: 26 958 fail2ban.actions [9750]: UWAGA [sshd] Przywróć Zakaz 40.117.135.57 2019-12-05 12: 13: 26.973 fail2ban.actions [9750]: UWAGA [sshd] Przywróć Zakaz 45.55.155.224 2019-12-05 12: 13: 26.988 fail2ban.actions [9750]: UWAGA [sshd ] Przywróć zakaz 67.205.135.127 2019-12-05 12: 13: 27 003 fail2ban.actions [9750]: UWAGA [sshd] Przywróć zakaz 83.171.107.216 2019-12-05 12: 13: 43,362 fail2ban.filter [9750]: INFO [sshd] Znaleziono 183.87.134.98 - 2019-12-05 12:13:42 2019-12-05 12: 13: 45,571 fail2ban.filter [9750]: INFO [sshd] Znaleziono 183.87.134.98 - 2019-12-05 12 : 13: 45 05.12.2019 12: 15: 46,109 fail2ban.filter [9750]: INFO [sshd] Znaleziono 112.64.170.178 - 2019-12-05 12:15:45 2019-12-05 12: 17: 05,317 fail2ban.actions [9750]: NOTICE [sshd] Unba n 222,186,175,216

Jak widzisz, fail2ban działa i okresowo blokuje lub usuwa blokowanie adresów IP.

Aby sprawdzić, które adresy IP są zablokowane w iptables przez fail2ban, wykonaj:

# iptables -L

Jak widać, z ssh otwartym na zewnątrz, od czasu do czasu ktoś próbuje wybrać hasło i zalogować się. Jeśli po pewnym czasie sprawdzisz statystyki, zobaczysz, że liczba zablokowanych adresów IP rośnie.

Zabezpieczanie Apache za pomocą Fail2Ban

Jeśli chcesz dostosować fail2ban dla swojego apache (httpd) dodaj następujące ustawienia do jail.local:

# wykrywanie nieudanych prób podania hasła [apache] włączone = true port = http, https filter = apache-auth logpath = / var / log / httpd / error_log maxretry = 3 # blokuje adresy IP, które bezpośrednio uzyskują dostęp do skryptów z rozszerzeniem php, asp, exe, pl, cgi, scgi [apache-noscript] włączone = true port = http, filtr https = apache-noscript ścieżka_logowania = / var / log / httpd / error_log maxretry = 3 # wykryj próby przepełnienia Apache [przepełnienie apache] włączone = true port = http, https filter = przepełnienie apache logpath = / var / log / httpd / error_log maxretry = 2 # wykryj nieudane próby wyszukiwania w katalogu domowym na serwerze [apache-nohome] włączony = true port = http, https filter = apache -nohome logpath = / var / log / httpd / * error_log maxretry = 2

Po zmianie pliku konfiguracyjnego ponownie uruchamiamy usługę i sprawdzamy status:

[root @ server ~] # apache stanu fail2ban-client

Status więzienia: apache | - Filtr | | - Aktualnie nie powiodło się: 0 | | - Razem nieudane: 0 | „- Lista plików: / var / log / httpd / error_log” - Działania | - Aktualnie zbanowany: 0 | - Całkowicie zbanowany: 0 '- Lista zbanowanych adresów IP:

Do testu zainstalowałem na serwerze Joomla, po czym próbowałem otworzyć nieistniejący plik i fail2ban zablokował mnie:

[root @ server httpd] # fail2ban-client status apache-noscript

Status więzienia: apache-noscript | - Filtr | | - Obecnie nie powiodło się: 1 | | - Razem nieudane: 6 | „- Lista plików: / var / log / httpd / error_log” - Działania | - Aktualnie zbanowany: 1 | - Całkowicie zbanowany: 1 '- Lista zbanowanych adresów IP: *. *. *. *

Konfigurowanie pakietów Fail2Ban i Nginx

Jeśli jesteś serwerem internetowym nginx a witryna zawiera sekcje wymagające autoryzacji, możesz również mieć problemy z próbami wyliczenia haseł. Dla fail2ban możemy określić użycie pliku nginx-http-auth.conf, Domyślnie jest to już opisane w pliku konfiguracyjnym. /etc/fail2ban/jail.conf:

[root @ server ~] # cat /etc/fail2ban/jail.conf | grep nginx

[nginx-http-auth] logpath =% (nginx_error_log) s # Aby użyć więzienia „nginx-limit-req”, powinieneś mieć „ngx_http_limit_req_module” # i zdefiniować „limit_req” i „limit_req_zone” zgodnie z opisem w dokumentacji nginx # http: / /nginx.org/en/docs/http/ngx_http_limit_req_module.html # lub na przykład patrz w „config / filter.d / nginx-limit-req.conf” [nginx-limit-req] logpath =% (nginx_error_log) s [ nginx-botsearch] logpath =% (nginx_error_log) s logpath =% (nginx_access_log) s

Czy musimy to uwzględnić w pliku konfiguracyjnym? /etc/fail2ban/jail.local dodając:

[nginx-http-auth] włączone = prawda

Po wszystkich ustawieniach nie zapomnij ponownie uruchomić usługi:

# systemctl restart fail2ban

Zabezpieczanie MySQL za pomocą Fail2Ban

Aby chronić MySQL, musisz dodać osobny blok do pliku konfiguracyjnego jail.local:

[mysqld-auth] enabled = true filter = mysqld-auth port = 3306 ścieżka dziennika = /var/log/mysql/error.log

To ustawienie ochroni Cię przed zgadywaniem hasła dla użytkownika mysql (jest to bardzo częsta brutalna siła).

Fail2Ban Rules for Exim

Aby skonfigurować zabezpieczenia usługi poczty Exim, wykonaj następującą konfigurację:

[exim] włączone = true filter = exim action = iptables-multiport [name = exim, port = "25 655 587]] ścieżka_logu = / var / log / exim / mainlog

Możesz więc dostosować fail2ban do pracy z prawie wszystkimi popularnymi usługami, a Twój serwer stanie się tak bezpieczny, jak to możliwe.

Fail2Ban Biała lista IP, odblokowanie adresu IP

Aby odblokować zablokowany adres IP fail2ban, użyj polecenia:

# klient fail2ban ustawiono SEKCJA unbanip IP - gdzie SECTION to nazwa sekcji w pliku konfiguracyjnym, zgodnie z zasadami, dla których Twój adres IP został zablokowany. Na przykład:

# fail2ban-client ustaw apache-noscript unbanip 185. *. *. *

Możesz dodać określone adresy IP do wyjątków fail2ban (biała lista). Aby to zrobić, w pliku konfiguracyjnym jail.conf wprowadź adres IP w wierszu:

ignoreip = 185. *. *. *

Dodając mój adres IP do wyjątków, przeprowadziłem kilka ataków, takich jak poprzedni, i nie doszło do blokowania.

Jak widać, fai2ban jest dość łatwy w konfiguracji, ale jest to dość skuteczny sposób dodatkowej ochrony twojego serwera przed złośliwymi użytkownikami. Niestety w systemie Windows nie widziałem bezpłatnych programów o podobnej funkcjonalności (możesz spróbować zaimplementować blokowanie adresów IP za pomocą programu PowerShell - zobacz artykuł Ochrona RDP przed sprawdzeniem hasła).