Chronić Apache przed atakami brutalnej lub DDOS przy użyciu modułów MOD_Security i Mod_Evasive

Chronić Apache przed atakami brutalnej lub DDOS przy użyciu modułów MOD_Security i Mod_Evasive

Dla tych z was w branży hostingowej lub jeśli hostujesz własne serwery i narażasz je na Internet, zabezpieczenie systemów przeciwko atakującym musi być wysokim priorytetem.

mod_security (Silnik wykrywania i zapobiegania włamaniom na otwartym poziomie dla aplikacji internetowych, które bezproblemowo integruje się z serwisem internetowym) i mod_evasive to dwa bardzo ważne narzędzia, które można użyć do ochrony serwera WWW przed brutalną siłą lub (d) atakami DOS.

Powiązany artykuł: Jak zainstalować wykrywanie złośliwego oprogramowania Linux za pomocą CLAMAV jako silnika antywirusowego

mod_evasive, Jak sama nazwa wskazuje, zapewnia wymijowe możliwości podczas ataku, działając jako parasol, który chroni serwery internetowe przed takimi zagrożeniami.

Zainstaluj mod_security i mod_evasive, aby chronić Apache

W tym artykule omówimy sposób instalacji, konfigurowania i umieszczenia ich wraz z Apache Rhel/Centos 8 I 7 jak również Fedora. Ponadto symulujemy ataki, aby sprawdzić, czy serwer odpowiednio reaguje.

Zakłada się, że masz w systemie zainstalowany serwer lampy. Jeśli nie, sprawdź ten artykuł przed dalszym przejściem.

  • Jak zainstalować serwer LAMP na CentOS 8
  • Jak zainstalować stos lampy w RHEL/CENTOS 7

Będziesz także musiał skonfigurować iptables jako domyślny front front-end zamiast zapory, jeśli biegasz RHEL/CENTOS 8/7 Lub Fedora. Robimy to, aby użyć tego samego narzędzia w obu Rhel/Centos 8/7 I Fedora.

Krok 1: Instalowanie zapory ogniowej IPTABLES na RHEL/CENTOS 8/7 i Fedora

Na początek, zatrzymaj się i wyłącz Firewalld:

# SystemCtl Stop Firewalld # Systemctl Wyłącz zaporę ogniową 
Wyłącz usługę zapory ogniowej

Następnie zainstaluj usługi iptables pakiet przed włączeniem iptables:

# Yum Update && Yum Instaluj usługi iptables-usługi # Systemctl Włącz IPTABLES # Systemctl Start IPTABABABALE # SystemCTL Status IPTABLES 
Zainstaluj zaporę ogniową iptables

Krok 2: Instalowanie MOD_Security i mod_evasive

Oprócz konfiguracji lampy, będziesz musiał również włączyć repozytorium EPEL w Rhel/Centos 8/7 Aby zainstalować oba pakiety. Użytkownicy Fedora nie muszą włączać żadnego repozytorium, ponieważ EPEL jest już częścią projektu Fedora.

# Yum Update && Yum Instaluj mod_security mod_evasive --------------- Centos/Rhel 8 --------------- # DNF Zainstaluj https: // pkgs.Dyn.SU/EL8/BASE/x86_64/RAVEN-RELEASE-1.0-1.El8.Noarch.RPM # dnf --enablerepo = Raven-Extras instaluj mod_evasive 

Po zakończeniu instalacji znajdziesz pliki konfiguracyjne dla obu narzędzi w /etc/httpd/conf.D.

# ls -l/etc/httpd/conf.D 
konfiguracje MOD_Security + mod_evasive

Teraz, aby zintegrować te dwa moduły z Apache i poproś je, gdy się uruchomi, upewnij się, że następujące linie pojawiają się w sekcji najwyższego poziomu mod_evasive.conf I mod_security.conf, odpowiednio:

Moduły loadModule20_Module/mod_evasive24.Tak więc moduły loadModule2_Module/mod_security2.Więc 

Zauważ, że moduły/mod_security2.Więc I moduły/mod_evasive24.Więc są względne ścieżki z /etc/httpd katalog do pliku źródłowego modułu. Możesz to zweryfikować (i w razie potrzeby zmienić to), wymieniając zawartość /etc/httpd/moduły informator:

# cd/etc/httpd/modules # pwd # ls -l | grep -ei '(wymijający | bezpieczeństwo)' 
Sprawdź moduły mod_security + mod_evasive

Następnie uruchom ponownie Apache i sprawdź, czy ładuje mod_evasive I mod_security:

# Systemctl restart httpd 

Zrzuć listę załadowanych modułów statycznych i wspólnych.

# httpd -m | grep -ei '(wymijający | bezpieczeństwo)' 
Sprawdź załadowane moduły MOD_Security + mod_evasive

Krok 3: Instalowanie zestawu reguł podstawowych i konfigurowanie MOD_Security

W kilku słowach Zestaw reguł podstawowych (znany jako Crs) zapewnia serwer WWW z instrukcjami dotyczącymi zachowania w określonych warunkach. Firma deweloperska mod_security zapewnia bezpłatne Crs zwany OWASP (Otwórz projekt bezpieczeństwa aplikacji internetowych) ModSecurity CRS, które można pobrać i zainstalować w następujący sposób.

1. Pobierz OWASP CRS do katalogu utworzonego w tym celu.

# mkdir/etc/httpd/crs-tecmint # cd/etc/httpd/crs-tecminint # wget -c https: // github.com/Spiderlabs/OWASP-Modsecurity-Crs/Archive/V3.2.0.smoła.GZ -o Master 
Pobierz reguły podstawowe MOD_Security

2. Untar Crs złożyć i zmień nazwę katalogu dla jednej z naszych wygody.

# TAR XZF Master # MV OWASP-Modsecurity-Crs-3.2.0 OWASP-Modsecurity-Crs 

3. Teraz nadszedł czas, aby skonfigurować mod_security. Skopiuj przykładowy plik z regułami (OWASP-Modsecurity-Crs/modSecurity_Crs_10_Setup.conf.przykład) w innym pliku bez .przykład rozszerzenie:

# CD OWASP-Modsecurity-Crs/ # CP CRS-SETUP.conf.Przykład CRS-zestaw.conf 

i powiedzieć Apache Aby użyć tego pliku wraz z modułem poprzez wkładanie następujących wierszy w głównym pliku konfiguracyjnym serwera WWW /etc/httpd/conf/httpd.conf plik. Jeśli zdecydujesz się rozpakować Tarball w innym katalogu, musisz edytować ścieżki po dyrektywach:

 Dołącz CRS-TecMint/OWASP-Modsecurity-Crs/CRS-SETUP.Conf to CRS-Tecmint/OWASP-Modsecurity-Crs/Reguls/*.conf  

Wreszcie zaleca się utworzenie własnego pliku konfiguracyjnego w ramach /etc/httpd/modSecurity.D katalog, w którym umieścimy nasze spersonalizowane dyrektywy (nazwiemy to Tecmint.conf w poniższym przykładzie) zamiast modyfikować Crs pliki bezpośrednio. To pozwoli łatwiejsze uaktualnienie CRSS w miarę wydawania nowych wersji.

 SecruleNgine on SecrequestBodyAccess na SecresponseBodyAccess na SecresponseBodyMimeType Text/Plain Text/HTML Text/XML Application/Outte-Stream SecDatadir/TMP  

Możesz zapoznać się z repozytorium ModSecurity Github SpiderLabs, aby uzyskać pełny przewodnik objaśniający mod_security Dyrektywy konfiguracyjne.

Krok 4: Konfigurowanie mod_evasive

mod_evasive jest konfigurowany za pomocą dyrektyw w /etc/httpd/conf.d/mod_evasive.conf. Ponieważ nie ma żadnych zasad do aktualizacji podczas aktualizacji pakietu, nie potrzebujemy osobnego pliku, aby dodać niestandardowe dyrektywy, w przeciwieństwie do mod_security.

Domyślny mod_evasive.conf Plik ma włączone następujące dyrektywy (pamiętaj, że ten plik jest mocno skomentowany, więc usunęliśmy komentarze, aby podkreślić poniższe dyrektywy konfiguracyjne):

 Doshashtablesise 3097 Dospagecount 2 DossiteCount 50 dospageinterval 1 Dossiteinterval 1 dosblockingeriod 10  

Objaśnienie dyrektyw:

  • Doshashtablesise: Ta dyrektywa określa rozmiar tabeli skrótu, który służy do śledzenia aktywności na podstawie adresu IP. Zwiększenie tej liczby zapewni szybsze wyszukiwanie witryn, które klient odwiedził w przeszłości, ale może wpłynąć na ogólną wydajność, jeśli zostanie ustawiona zbyt wysoka.
  • Dospagecount: Uzasadniona liczba identycznych żądań do określonego URI (na przykład każdy plik obsługiwany przez Apache), który może być wykonany przez gościa przez interwał DospageInterval.
  • DOSSITECOUNT: Podobnie do Dospagecount, ale odnosi się do liczby ogólnych żądań do całej strony w przedziale Dossiteinterval.
  • Dosblockingeriod: Jeśli odwiedzający przekroczy limity ustalone przez DosSpagecount lub DossiteCount, jego źródło adresu IP będzie na czarnej liście podczas czasu DosblockingPeriod. Podczas Dosblockingeriod wszelkie żądania pochodzące z tego adresu IP napotkają błąd 403 Zakazanego.

Możesz eksperymentować z tymi wartościami, aby Twój serwer WWW był w stanie obsłużyć wymaganą ilość i rodzaj ruchu.

Tylko małe zastrzeżenie: Jeśli wartości te nie są ustawione prawidłowo, ryzykujesz, że zostaniesz blokuje legalnych gości.

Możesz także rozważyć inne przydatne dyrektywy:

DosemailNotify

Jeśli masz uruchomiony serwer poczty, możesz wysyłać wiadomości ostrzegawcze za pośrednictwem Apache. Zauważ, że musisz udzielić uprawnieniu użytkownika Apache Selinux na wysyłanie wiadomości e -mail, jeśli Selinux jest ustawiony na egzekwowanie. Możesz to zrobić, biegając

# setsebool -p httpd_can_sendmail 1 

Następnie dodaj tę dyrektywę w mod_evasive.conf Plik z resztą pozostałych dyrektyw:

DoseMailNotify [e -mail chroniony] 

Jeśli ta wartość jest ustawiona, a Twój serwer pocztowy działa poprawnie, e -mail zostanie wysłany na adres określony, gdy adres IP zostanie na czarnej liście.

DossystemCommand

Potrzebuje to prawidłowego polecenia systemowego jako argumentu,

DossystemCommand  

Niniejsza dyrektywa określa polecenie, które ma być wykonane, gdy adres IP zostanie na czarnej liście. Jest często używany w połączeniu ze skryptem powłoki, który dodaje regułę zapory, aby zablokować kolejne połączenia pochodzące z tego adresu IP.

Napisz skrypt, który obsługuje czarną listę IP na poziomie zapory

Kiedy adres IP staje się na czarnej liście, musimy zablokować przyszłe połączenia pochodzące z niego. Użyjemy następującego skryptu powłoki, który wykonuje to zadanie. Utwórz katalog nazwany Scripts-Tecmint (lub jakakolwiek nazwa wyboru) w /usr/lokalny/bin i plik o nazwie Ban_ip.cii W tym katalogu.

#!/bin/sh # ip, który zostanie zablokowany, jak wykryto przez mod_evasive ip = 1 $ # Pełna ścieżka do iptables iptables = "/sbin/iptables" # mod_evasive blokada katalog MOD_EVASIVE_LOGDIR =/var/log/mod_evasive # Zablokuj cały ruch pochodzący z $ ip) $ iptables -i wejście -s $ ip -j upuść # Usuń plik blokady dla przyszłych czeków rm -f "$ mod_evasive_logdir"/dos -"$ ip" 

Nasz DossystemCommand Dyrektywa powinna czytać w następujący sposób:

DossystemCommand "sudo/usr/local/bin/scripts-tecmint/ban_ip.sh %s " 

W powyższym wierszu, %S reprezentuje obrażający IP wykryty przez mod_evasive.

Dodaj użytkownika Apache do pliku Sudoers

Zauważ, że wszystko to po prostu nie zadziała, dopóki nie udzielę użytkownikowi uprawnień Apache Aby uruchomić nasz skrypt (i tylko ten skrypt!) bez terminalu i hasła. Jak zwykle możesz po prostu wpisać Visudo jako root, aby uzyskać dostęp do /etc/sudoers Plik, a następnie dodaj następujące 2 wiersze, jak pokazano na poniższym obrazku:

Apache all = nopasswd:/usr/local/bin/scripts-tecMint/Ban_IP.SH Domyślnie: Apache !wymaganie 
Dodaj użytkownika Apache do sudoers

WAŻNY: Jako domyślne zasady bezpieczeństwa możesz działać tylko sudo w terminalu. Ponieważ w tym przypadku musimy użyć sudo bez tty, Musimy skomentować wiersz podkreślony na poniższym obrazku:

#Defaults wymaganie 
Wyłącz tty dla sudo

Wreszcie ponownie uruchom WebServer:

# Systemctl restart httpd 

Krok 4: Symulowanie ataków DDOS na Apache

Istnieje kilka narzędzi, których można użyć do symulacji zewnętrznego ataku na serwer. Możesz po prostu Google dla „Narzędzia do symulacji ataków DDOS„Znajdź kilka z nich.

Zauważ, że ty i tylko ty będziesz odpowiedzialny za wyniki swojej symulacji. Nawet nie myśl o rozpoczęciu symulowanego ataku na serwer, którego nie hostujesz we własnej sieci.

Jeśli chcesz zrobić to samo z VPS, który jest hostowany przez kogoś innego, musisz odpowiednio ostrzec dostawcę hosting. Tecmint.com w żadnym wypadku nie jest odpowiedzialny za twoje czyny!

Ponadto wystrzelenie symulowanego ataku DOS tylko jednego gospodarza nie reprezentuje prawdziwego ataku. Aby to symulować, musisz kierować serwer od kilku klientów jednocześnie.

Nasze środowisko testowe składa się z Centos 7 serwer [IP 192.168.0.17] i host Windows, z którego rozpoczniemy atak [IP 192.168.0.103]:

Potwierdź ipaddress hosta

Proszę odtworzyć poniższy film i wykonaj kroki przedstawione we wskazanej kolejności, aby symulować prosty atak DOS:

Następnie obrażający adres IP jest blokowany przez IPTABLES:

Zablokowany napastnik IP

Wniosek

Z mod_security I mod_evasive włączony, symulowany atak powoduje procesor I Baran Aby eksperymentować z tymczasowym szczytem użytkowania tylko przez kilka sekund, zanim źródło IPS zostaną na czarnej liście i zablokowane przez zaporę ogniową. Bez tych narzędzi symulacja z pewnością powali serwer bardzo szybko i uczyni go bezużytecznym podczas trwania ataku.

Chcielibyśmy usłyszeć, czy planujesz używać (lub używać w przeszłości) tych narzędzi. Zawsze czekamy na wiadomość od Ciebie, więc nie wahaj się zostawić swoje komentarze i pytania, jeśli w ogóle, używając poniższego formularza.

Linki referencyjne

https: // www.ModSecurity.org/