Zaščitite Apache pred napadi Brute Force ali DDoS z uporabo modulov Mod_Security in Mod_evasive


Za tiste, ki se ukvarjate z gostovanjem ali če gostite lastne strežnike in jih izpostavljate internetu, mora biti zaščita sistemov pred napadalci glavna prednostna naloga.

mod_security (odprtokodni mehanizem za odkrivanje in preprečevanje vdorov za spletne aplikacije, ki se brez težav integrira s spletnim strežnikom) in mod_evasive sta dve zelo pomembni orodji, ki ju lahko uporabimo za zaščito spletnega strežnika proti surovi sili ali (D) napadi DoS.

Mod_evasive , kot že ime pove, zagotavlja izogibanje zmožnostim, ko je napaden, in deluje kot dežnik, ki ščiti spletne strežnike pred takšnimi grožnjami.

V tem članku bomo razpravljali o tem, kako jih namestiti, konfigurirati in dati v igro skupaj z Apachejem na RHEL/CentOS 8 in 7 ter Fedoro. Poleg tega bomo simulirali napade, da preverimo, ali se strežnik ustrezno odzove.

To predpostavlja, da imate v sistemu nameščen strežnik LAMP. V nasprotnem primeru preverite ta članek, preden nadaljujete.

  • Kako namestiti strežnik LAMP na CentOS 8
  • Kako namestiti sklad LAMP v RHEL/CentOS 7

Če uporabljate RHEL/CentOS 8/7 ali Fedora, boste morali kot privzeti prednji del požarnega zidu namesto požarnega zidu nastaviti iptables. To naredimo zato, da uporabimo isto orodje tako v RHEL/CentOS 8/7 kot v Fedori.

1. korak: Namestitev požarnega zidu Iptables na RHEL/CentOS 8/7 in Fedora

Za začetek ustavite in onemogočite požarni zid :

# systemctl stop firewalld
# systemctl disable firewalld

Nato namestite paket iptables-services , preden omogočite iptables :

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

2. korak: Namestitev Mod_Security in Mod_evasive

Poleg tega, da imate že vzpostavljeno nastavitev LAMP, boste morali za namestitev obeh paketov omogočiti tudi repozitorij EPEL v RHEL/CentOS 8/7. Uporabnikom Fedore ni treba omogočiti repo, ker je epel že del projekta Fedora.

# 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

Ko je namestitev končana, boste v /etc/httpd/conf.d našli konfiguracijske datoteke za obe orodji.

# ls -l /etc/httpd/conf.d

Zdaj, če želite ta dva modula integrirati z Apache in ga naložiti, ko se zažene, se prepričajte, da se v zgornjem delu mod_evasive.conf pojavijo naslednje vrstice in mod_security.conf :

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

Upoštevajte, da sta moduli/mod_security2.so in moduli/mod_evasive24.so relativni poti od imenika /etc/httpd do izvorne datoteke modula. To lahko preverite (in po potrebi spremenite) tako, da navedete vsebino imenika /etc/httpd/modules :

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

Nato znova zaženite Apache in preverite, ali se naloži mod_evasive in mod_security :

# systemctl restart httpd 	

Izbriši seznam naloženih statičnih in skupnih modulov.

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

3. korak: Namestitev nabora osnovnih pravil in konfiguriranje Mod_Security

Z nekaj besedami Core Rule Set (tudi CRS ) spletnemu strežniku nudi navodila, kako se obnašati pod določenimi pogoji. Podjetje za razvijalce mod_security ponuja brezplačen CRS , imenovan OWASP (Open Web Application Security Project) ModSecurity CRS, ki ga lahko prenesete in namestite na naslednji način.

1. Prenesite OWASP CRS v imenik, ustvarjen v ta namen.

# 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. Odstranite datoteko CRS in za eno udobje spremenite ime imenika.

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

3. Zdaj je čas, da konfigurirate mod_security. Kopirajte vzorčno datoteko s pravili ( owasp-modsecurity-crs/modsecurity_crs_10_setup.conf.example ) v drugo datoteko brez pripone .example :

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

in povejte Apache , naj to datoteko uporabi skupaj z modulom, tako da v glavno konfiguracijsko datoteko /etc/httpd/conf/httpd.conf vstavi naslednje vrstice. Če ste se odločili razpakirati tarball v drug imenik, boste morali urediti poti po direktivah Include:

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

Nazadnje je priporočljivo, da v imeniku /etc/httpd/modsecurity.d ustvarimo lastno konfiguracijsko datoteko, kamor bomo postavili svoje prilagojene direktive (poimenovali jo bomo tecmint.conf v naslednjem primeru), namesto da bi neposredno spreminjali datoteke CRS . To bo omogočilo lažjo nadgradnjo CRS-jev, ko bodo izdane nove različice.

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

Za popoln razlagalni vodnik o konfiguracijskih smernicah mod_security se lahko obrnete na skladišče ModSecurity GitHub podjetja SpiderLabs.

4. korak: Konfiguriranje Mod_Evasive

mod_evasive je konfiguriran z uporabo direktiv v /etc/httpd/conf.d/mod_evasive.conf . Ker med nadgradnjo paketa ni pravil, ki jih je treba posodobiti, za dodajanje prilagojenih direktiv ne potrebujemo ločene datoteke, namesto mod_security .

V privzeti datoteki mod_evasive.conf so omogočene naslednje direktive (upoštevajte, da je ta datoteka močno komentirana, zato smo odstranili komentarje, da poudarimo konfiguracijske smernice spodaj):

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

Pojasnilo direktiv:

  • DOSHashTableSize : Ta direktiva določa velikost zgoščevalne tabele, ki se uporablja za sledenje dejavnosti na podlagi naslova na IP. Povečanje tega števila bo omogočilo hitrejše iskanje spletnih mest, ki jih je stranka obiskala v preteklosti, vendar lahko vpliva na splošno uspešnost, če je nastavljena previsoko.
  • DOSPageCount : Legitimno število enakih zahtev za določen URI (na primer katero koli datoteko, ki jo streže Apache), ki jo lahko obiskovalec poda v intervalu DOSPageInterval.
  • DOSSiteCount : podobno kot DOSPageCount, vendar se nanaša na to, koliko splošnih zahtev je mogoče poslati celotnemu spletnemu mestu v intervalu DOSSiteInterval.
  • DOSBlockingPeriod : Če obiskovalec preseže omejitve, določene z DOSSPageCount ali DOSSiteCount, bo njegov izvorni naslov IP med časom DOSBlockingPeriod na črnem seznamu. Med obdobjem DOSBlockingPeriod bodo vse zahteve, ki prihajajo s tega naslova IP, naletele na prepovedano napako 403.

Enostavno eksperimentirajte s temi vrednostmi, da bo vaš spletni strežnik obvladal zahtevano količino in vrsto prometa.

Le majhno opozorilo: če te vrednosti niso pravilno nastavljene, tvegate, da boste blokirali zakonite obiskovalce.

Morda boste želeli razmisliti tudi o drugih uporabnih navodilih:

Če imate nameščen in deluje poštni strežnik, lahko prek Apache pošljete opozorilna sporočila. Upoštevajte, da boste morali uporabniku apache SELinux podeliti dovoljenje za pošiljanje e-pošte, če je SELinux nastavljen na uveljavljanje. To lahko storite s tekom

# setsebool -P httpd_can_sendmail 1

Nato dodajte to direktivo v datoteko mod_evasive.conf z ostalimi drugimi direktivami:

DOSEmailNotify [email 

Če je ta vrednost nastavljena in vaš poštni strežnik deluje pravilno, bo e-poštno sporočilo poslano na navedeni naslov vsakič, ko bo naslov IP na črni listi.

Za argument potrebuje veljaven sistemski ukaz,

DOSSystemCommand </command>

Ta direktiva določa ukaz, ki ga je treba izvesti vsakič, ko se naslov IP uvrsti na črno listo. Pogosto se uporablja v povezavi s skriptom lupine, ki doda pravilo požarnega zidu, da blokira nadaljnje povezave, ki prihajajo s tega naslova IP.

Ko se naslov IP uvrsti na črno listo, moramo blokirati prihodnje povezave, ki prihajajo z njega. Uporabili bomo naslednji skript lupine, ki izvaja to nalogo. Ustvarite imenik z imenom scripts-tecmint (ali katero koli ime po vaši izbiri) v /usr/local/bin in datoteko z imenom ban_ip.sh v tem 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 direktiva DOSSystemCommand naj se glasi:

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

V zgornji vrstici % s predstavlja kršitveni IP, kot ga je zaznal mod_evasive .

Upoštevajte, da vse to preprosto ne bo delovalo, če uporabniku apache ne daste dovoljenja za zagon našega skripta (in samo tega skripta!) Brez terminala in gesla. Kot ponavadi lahko za vstop v datoteko /etc/sudoers preprosto vnesete visudo kot root in nato dodate naslednji dve vrstici, kot je prikazano na spodnji sliki:

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

POMEMBNO: Kot privzeti varnostni pravilnik lahko sudo zaženete samo v terminalu. Ker moramo v tem primeru uporabiti sudo brez tty , moramo komentirati vrstico, ki je označena na naslednji sliki:

#Defaults requiretty

Na koncu ponovno zaženite spletni strežnik:

# systemctl restart httpd

4. korak: Simulacija napadov DDoS na Apache

Obstaja več orodij, s katerimi lahko simulirate zunanji napad na strežnik. Lahko preprosto poiščete\" orodja za simulacijo napadov ddos ", da jih najdete več.

Upoštevajte, da boste vi in samo vi odgovorni za rezultate simulacije. Niti pomislite na simulacijski napad na strežnik, ki ga ne gostite v svojem omrežju.

Če želite enako storiti z VPS, ki ga gosti nekdo drug, morate ustrezno opozoriti svojega ponudnika gostovanja ali prositi dovoljenje, da bo takšna poplava prometa šla skozi njihova omrežja. linux-console.net nikakor ni odgovoren za vaša dejanja!

Poleg tega sprožitev simuliranega napada DoS samo z enega gostitelja ne predstavlja resničnega napada. Za simulacijo takega bi morali strežnik ciljati na več odjemalcev hkrati.

Naše testno okolje je sestavljeno iz strežnika CentOS 7 [ IP 192.168.0.17 ] in gostitelja Windows, s katerega bomo napad začeli [IP 192.168.0.103 ]:

Predvajajte spodnji video in sledite korakom, navedenim v navedenem vrstnem redu, da simulirate preprost napad DoS:

Nato krši IP blokira iptables:

Zaključek

Z omogočenima mod_security in mod_evasive simulirani napad povzroči, da CPU in RAM eksperimentirata z začasnim vrhom uporabe za le nekaj sekund, preden požarni zid uvrsti izvorne IP-je na črno listo in jih blokira. Brez teh orodij bo simulacija zagotovo zelo hitro podrla strežnik in ga med napadom naredila neuporabnega.

Radi bi slišali, ali nameravate uporabljati (ali ste že uporabljali) ta orodja. Vedno se veselimo vaših odzivov, zato vas prosimo, da svoje komentarje in vprašanja, če obstajajo, pustite na spodnjem obrazcu.

Referenčne povezave