Zaštitite Apache od brutalne sile ili DDoS napada koristeći Mod_Security i Mod_evasive module


Za one od vas koji se bave hostingom ili ako hostujete svoje servere i izlažete ih Internetu, zaštita vaših sistema od napadača mora biti visoki prioritet.

mod_security (mašina za otkrivanje i prevenciju upada otvorenog koda za web aplikacije koja se neprimjetno integrira s web serverom) i mod_evasive su dva vrlo važna alata koja se mogu koristiti za zaštitu web servera protiv grube sile ili (D)DoS napada.

mod_evasive, kao što mu ime kaže, pruža mogućnosti izbjegavanja dok je pod napadom, djelujući kao kišobran koji štiti web servere od takvih prijetnji.

U ovom članku ćemo razgovarati o tome kako ih instalirati, konfigurirati i staviti u igru zajedno s Apacheom na RHEL/CentOS 8 i 7 kao kao i Fedora. Osim toga, simuliraćemo napade kako bismo provjerili da server reagira u skladu s tim.

Ovo pretpostavlja da imate LAMP server instaliran na vašem sistemu. Ako ne, pogledajte ovaj članak prije nego što nastavite dalje.

  • Kako instalirati LAMP server na CentOS 8
  • Kako instalirati LAMP stack u RHEL/CentOS 7

Također ćete morati postaviti iptables kao zadani front-end firewall umjesto firewalld ako koristite RHEL/CentOS 8/7 ili Fedora jako>. Ovo radimo kako bismo koristili isti alat u RHEL/CentOS 8/7 i Fedora.

Korak 1: Instaliranje Iptables Firewall-a na RHEL/CentOS 8/7 i Fedora

Za početak, zaustavite i onemogućite firewalld:

systemctl stop firewalld
systemctl disable firewalld

Zatim instalirajte paket iptables-services prije nego što omogućite iptables:

yum update && yum install iptables-services
systemctl enable iptables
systemctl start iptables
systemctl status iptables

Korak 2: Instaliranje Mod_Security i Mod_evasive

Osim što imate već postavljenu LAMP postavku, također ćete morati omogućiti EPEL spremište u RHEL/CentOS 8/7 kako bi da instalirate oba paketa. Fedora korisnici ne moraju da omogućavaju bilo kakav repo, jer je epel već deo Fedora projekta.

yum update && yum install mod_security mod_evasive

--------------- CentOS/RHEL 8 --------------- 
dnf install https://pkgs.dyn.su/el8/base/x86_64/raven-release-1.0-1.el8.noarch.rpm
dnf --enablerepo=raven-extras install mod_evasive

Kada se instalacija završi, naći ćete konfiguracijske datoteke za oba alata u /etc/httpd/conf.d.

ls -l /etc/httpd/conf.d

Sada, kako biste integrirali ova dva modula sa Apacheom i natjerali ga da ih učita kada se pokrene, uvjerite se da se sljedeće linije pojavljuju u odjeljku najvišeg nivoa mod_evasive.conf i mod_security.conf, redom:

LoadModule evasive20_module modules/mod_evasive24.so
LoadModule security2_module modules/mod_security2.so

Imajte na umu da su modules/mod_security2.so i modules/mod_evasive24.so relativne putanje, od /etc/httpd direktorija do izvorne datoteke modula. Ovo možete provjeriti (i promijeniti, ako je potrebno) navođenjem sadržaja /etc/httpd/modules direktorija:

cd /etc/httpd/modules
pwd
ls -l | grep -Ei '(evasive|security)'

Zatim ponovo pokrenite Apache i provjerite da li učitava mod_evasive i mod_security:

systemctl restart httpd 	

Izbacite listu učitanih statičkih i dijeljenih modula.

httpd -M | grep -Ei '(evasive|security)'				

Korak 3: Instaliranje osnovnog skupa pravila i konfiguriranje Mod_Security

Ukratko, Set osnovnih pravila (aka CRS) pruža web serveru uputstva o tome kako da se ponaša pod određenim uslovima. Programerska firma mod_security obezbjeđuje besplatan CRS pod nazivom OWASP (Open Web Application Security Project) ModSecurity CRS koji se može preuzeti i instalirati na sljedeći način.

1. Preuzmite OWASP CRS u direktorij kreiran za tu svrhu.

mkdir /etc/httpd/crs-tecmint
cd /etc/httpd/crs-tecmint
wget -c https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/v3.2.0.tar.gz -O master

2. Uklonite datoteku CRS i promijenite naziv direktorija za našu pogodnost.

tar xzf master
mv owasp-modsecurity-crs-3.2.0 owasp-modsecurity-crs

3. Sada je vrijeme da konfigurirate mod_security. Kopirajte uzorak datoteke s pravilima (owasp-modsecurity-crs/modsecurity_crs_10_setup.conf.example) u drugu datoteku bez ekstenzije .example:

cd owasp-modsecurity-crs/
cp crs-setup.conf.example crs-setup.conf

i recite Apacheu da koristi ovu datoteku zajedno s modulom umetanjem sljedećih redova u datoteku /etc/httpd/conf/httpd.conf glavnog konfiguracijskog fajla web servera. Ako ste odabrali da raspakirate tarball u drugi direktorij, morat ćete urediti putanje slijedeći direktive Include:

<IfModule security2_module>
        Include crs-tecmint/owasp-modsecurity-crs/crs-setup.conf
        Include crs-tecmint/owasp-modsecurity-crs/rules/*.conf
</IfModule>

Konačno, preporučljivo je da kreiramo vlastitu konfiguracijsku datoteku unutar /etc/httpd/modsecurity.d direktorija gdje ćemo smjestiti naše prilagođene direktive (nazvat ćemo ga tecmint.conf b> u sljedećem primjeru) umjesto direktnog mijenjanja CRS datoteka. To će omogućiti lakšu nadogradnju CRS-a kako nove verzije budu objavljene.

<IfModule mod_security2.c>
	SecRuleEngine On
	SecRequestBodyAccess On
	SecResponseBodyAccess On 
	SecResponseBodyMimeType text/plain text/html text/xml application/octet-stream 
	SecDataDir /tmp
</IfModule>

Možete pogledati SpiderLabsov ModSecurity GitHub spremište za kompletan vodič s objašnjenjima mod_security konfiguracijskih direktiva.

Korak 4: Konfiguriranje Mod_Evasive

mod_evasive je konfigurisan korišćenjem direktiva u /etc/httpd/conf.d/mod_evasive.conf. Pošto nema pravila za ažuriranje tokom nadogradnje paketa, nije nam potrebna posebna datoteka za dodavanje prilagođenih direktiva, za razliku od mod_security.

Zadana datoteka mod_evasive.conf ima sljedeće direktive omogućene (imajte na umu da je ova datoteka jako komentirana, pa smo uklonili komentare da istaknemo konfiguracijske direktive ispod):

<IfModule mod_evasive24.c>
    DOSHashTableSize    3097
    DOSPageCount        2
    DOSSiteCount        50
    DOSPageInterval     1
    DOSSiteInterval     1
    DOSBlockingPeriod   10
</IfModule>

Objašnjenje direktiva:

  • DOSHashTableSize: Ova direktiva specificira veličinu hash tablice koja se koristi za praćenje aktivnosti na bazi po IP adresi. Povećanje ovog broja omogućit će brže traženje web lokacija koje je klijent posjetio u prošlosti, ali može uticati na ukupni učinak ako je postavljen na previsoko.
  • DOSPageCount: Legitiman broj identičnih zahtjeva za određeni URI (na primjer, bilo koja datoteka koju Apache poslužuje) koje posjetitelj može napraviti u intervalu DOSPageInterval.
  • DOSSiteCount: Slično DOSPageCount, ali se odnosi na to koliko ukupnih zahtjeva može biti upućeno cijeloj web lokaciji u intervalu DOSSiteInterval.
  • DOSBlockingPeriod: Ako posjetitelj prekorači ograničenja postavljena od strane DOSSPageCount ili DOSSiteCount, njegova izvorna IP adresa će biti na crnoj listi tokom perioda DOSBlockingPeriod. Tokom DOSBlockingPerioda, svi zahtjevi koji dolaze sa te IP adrese će naići na grešku 403 Forbidden.

Slobodno eksperimentirajte s ovim vrijednostima kako bi vaš web server mogao podnijeti potrebnu količinu i vrstu prometa.

Samo malo upozorenje: ako ove vrijednosti nisu pravilno postavljene, rizikujete da ćete blokirati legitimne posjetitelje.

Možda biste željeli razmotriti i druge korisne direktive:

DOSEmailNotify

Ako imate pokrenut i pokrenut mail server, možete slati poruke upozorenja putem Apachea. Imajte na umu da ćete morati da dodijelite korisniku apache SELinux dozvolu za slanje e-pošte ako je SELinux postavljen na prinudno. To možete učiniti trčanjem

setsebool -P httpd_can_sendmail 1

Zatim dodajte ovu direktivu u datoteku mod_evasive.conf s ostatkom ostalih direktiva:

DOSEmailNotify [email 

Ako je ova vrijednost postavljena i vaš mail server radi ispravno, e-mail će biti poslat na navedenu adresu svaki put kada IP adresa postane na crnoj listi.

DOSSystemCommand

Ovo zahteva validnu sistemsku naredbu kao argument,

DOSSystemCommand </command>

Ova direktiva specificira naredbu koja se izvršava kad god IP adresa postane na crnoj listi. Često se koristi zajedno sa shell skriptom koja dodaje pravilo zaštitnog zida da blokira dalje veze koje dolaze sa te IP adrese.

Napišite shell skriptu koja obrađuje IP crnu listu na nivou zaštitnog zida

Kada IP adresa postane na crnoj listi, moramo blokirati buduće veze koje dolaze s nje. Koristit ćemo sljedeću shell skriptu koja obavlja ovaj posao. Kreirajte direktorij pod nazivom scripts-tecmint (ili bilo koji naziv po vašem izboru) u /usr/local/bin i datoteku pod nazivom ban_ip.sh u tom imeniku.

#!/bin/sh
IP that will be blocked, as detected by mod_evasive
IP=$1
Full path to iptables
IPTABLES="/sbin/iptables"
mod_evasive lock directory
MOD_EVASIVE_LOGDIR=/var/log/mod_evasive
Add the following firewall rule (block all traffic coming from $IP)
$IPTABLES -I INPUT -s $IP -j DROP
Remove lock file for future checks
rm -f "$MOD_EVASIVE_LOGDIR"/dos-"$IP"

Naša DOSSystemCommand direktiva bi trebala glasiti kako slijedi:

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

U gornjoj liniji, %s predstavlja uvredljivu IP koju je otkrio mod_evasive.

Dodajte apache korisnika u sudoers fajl

Imajte na umu da sve ovo jednostavno neće funkcionirati osim ako korisniku apache ne date dozvole da pokrene našu skriptu (i samo tu skriptu!) bez terminala i lozinke. Kao i obično, možete jednostavno upisati visudo kao root da pristupite datoteci /etc/sudoers, a zatim dodati sljedeća 2 reda kao što je prikazano na slici ispod:

apache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh
Defaults:apache !requiretty

VAŽNO: Kao zadanu sigurnosnu politiku, sudo možete pokrenuti samo u terminalu. Pošto u ovom slučaju trebamo koristiti sudo bez tty, moramo komentirati liniju koja je istaknuta na sljedećoj slici:

#Defaults requiretty

Konačno, ponovo pokrenite web server:

systemctl restart httpd

Korak 4: Simulacija DDoS napada na Apache

Postoji nekoliko alata koje možete koristiti za simulaciju vanjskog napada na vaš server. Možete samo pretražiti "alatke za simulaciju ddos napada" da pronađete nekoliko njih.

Imajte na umu da ćete vi, i samo vi, biti odgovorni za rezultate vaše simulacije. Nemojte ni pomišljati da pokrenete simulirani napad na server koji ne hostujete u svojoj mreži.

Ako želite da uradite isto sa VPS-om koji hostuje neko drugi, morate na odgovarajući način upozoriti svog hosting provajdera ili zatražiti dozvolu da takva poplava saobraćaja prođe kroz njihove mreže. linux-console.net ni na koji način nije odgovoran za vaša djela!

Osim toga, pokretanje simuliranog DoS napada sa samo jednog hosta ne predstavlja napad u stvarnom životu. Da biste to simulirali, trebali biste ciljati vaš server sa nekoliko klijenata u isto vrijeme.

Naše testno okruženje se sastoji od CentOS 7 servera [IP 192.168.0.17] i Windows hosta sa kojeg ćemo pokrenuti napad [IP 192.168.0.103]:

Pustite video ispod i slijedite korake navedene u naznačenom redoslijedu kako biste simulirali jednostavan DoS napad:

Tada je uvredljivi IP blokiran od strane iptables:

Zaključak

Sa omogućenim mod_security i mod_evasive, simulirani napad uzrokuje da CPU i RAM eksperimentiraju s privremenim vrhom korištenja za samo nekoliko sekundi prije nego što su izvorne IP adrese stavljene na crnu listu i blokirane od strane firewall-a. Bez ovih alata, simulacija će sigurno vrlo brzo srušiti server i učiniti ga neupotrebljivim tokom trajanja napada.

Voljeli bismo čuti planirate li koristiti (ili ste koristili u prošlosti) ove alate. Uvijek se radujemo vašem odgovoru, stoga ne ustručavajte se ostaviti svoje komentare i pitanja, ako ih ima, koristeći formu ispod.

Referentne veze

https://www.modsecurity.org/