Apsaugokite „Apache“ nuo brutalios jėgos arba DDoS atakų naudodami „Mod_Security“ ir „Mod_evasive“ modulius


Tiems iš jūsų, kurie dirba prieglobos versle arba jei naudojate savo serverius ir juos naudojate internetu, sistemų apsauga nuo užpuolikų turi būti didelis prioritetas.

mod_security (atvirojo kodo įsibrovimų aptikimo ir prevencijos variklis, skirtas žiniatinklio programoms, kuris sklandžiai integruojamas su žiniatinklio serveriu) ir mod_evasive yra du labai svarbūs įrankiai, kuriuos galima naudoti žiniatinklio serveriui apsaugoti prieš žiaurią jėgą arba (D)DoS atakas.

mod_evasive, kaip rodo jo pavadinimas, suteikia išsisukinėjimo galimybes atakuojant, veikdamas kaip skėtis, apsaugantis žiniatinklio serverius nuo tokių grėsmių.

Šiame straipsnyje aptarsime, kaip įdiegti, konfigūruoti ir naudoti juos kartu su „Apache“ RHEL/CentOS 8 ir 7 kaip taip pat Fedora. Be to, mes imituosime atakas, kad patikrintume, ar serveris atitinkamai reaguoja.

Tai reiškia, kad jūsų sistemoje įdiegtas LAMP serveris. Jei ne, prieš tęsdami peržiūrėkite šį straipsnį.

  • Kaip įdiegti LAMP serverį CentOS 8
  • Kaip įdiegti LAMP krūvą RHEL/CentOS 7

Taip pat turėsite nustatyti iptables kaip numatytąją užkardos sąsają, o ne ugniasienę, jei naudojate RHEL/CentOS 8/7 arba Fedora. Tai darome norėdami naudoti tą patį įrankį RHEL/CentOS 8/7 ir Fedora.

1 veiksmas: „Iptables“ ugniasienės įdiegimas „RHEL“/„CentOS 8/7“ ir „Fedora“

Norėdami pradėti, sustabdykite ir išjunkite užkardą:

systemctl stop firewalld
systemctl disable firewalld

Tada įdiekite iptables-services paketą prieš įjungdami iptables:

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

2 veiksmas: įdiekite „Mod_Security“ ir „Mod_evasive“.

Be to, kad jau turite LAMP sąranką, taip pat turėsite įgalinti EPEL saugyklą RHEL/CentOS 8/7. Norėdami įdiegti abu paketus. Fedora vartotojams nereikia įjungti jokio atpirkimo, nes epel jau yra Fedora projekto dalis.

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

Kai diegimas bus baigtas, abiejų įrankių konfigūracijos failus rasite /etc/httpd/conf.d.

ls -l /etc/httpd/conf.d

Dabar, norėdami integruoti šiuos du modulius su Apache ir įkelti juos paleidus, įsitikinkite, kad mod_evasive.conf aukščiausio lygio skiltyje yra šios eilutės ir mod_security.conf, atitinkamai:

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

Atminkite, kad modules/mod_security2.so ir modules/mod_evasive24.so yra santykiniai keliai nuo /etc/httpd katalogo iki šaltinio failo modulio. Galite tai patikrinti (ir, jei reikia, pakeisti) įtraukę į katalogo /etc/httpd/modules turinį:

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

Tada iš naujo paleiskite „Apache“ ir patikrinkite, ar ji įkelia mod_evasive ir mod_security:

systemctl restart httpd 	

Iškelkite įkeltų statinių ir bendrinamų modulių sąrašą.

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

3 veiksmas: įdiekite pagrindinį taisyklių rinkinį ir sukonfigūruokite „Mod_Security“.

Keliais žodžiais tariant, Pagrindinių taisyklių rinkinys (dar žinomas kaip CRS) pateikia žiniatinklio serveriui instrukcijas, kaip elgtis tam tikromis sąlygomis. Kūrėjų įmonė mod_security teikia nemokamą CRS, vadinamą OWASP (Open Web Application Security Project) ModSecurity CRS, kurią galima atsisiųsti ir įdiegti taip.

1. Atsisiųskite OWASP CRS į tam skirtą katalogą.

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. Pašalinkite CRS failą ir, kad būtų patogiau, pakeiskite katalogo pavadinimą.

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

3. Dabar laikas sukonfigūruoti mod_security. Nukopijuokite pavyzdinį failą su taisyklėmis (owasp-modsecurity-crs/modsecurity_crs_10_setup.conf.example) į kitą failą be plėtinio .example:

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

ir nurodykite Apache naudoti šį failą kartu su moduliu, įterpdami šias eilutes į pagrindinį žiniatinklio serverio konfigūracijos failą /etc/httpd/conf/httpd.conf. Jei pasirinkote išpakuoti tarbalą kitame kataloge, turėsite redaguoti kelius vadovaudamiesi Įtraukti direktyvomis:

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

Galiausiai, rekomenduojama sukurti savo konfigūracijos failą kataloge /etc/httpd/modsecurity.d, kuriame patalpinsime savo pritaikytas direktyvas (pavadinsime jį tecmint.conf b> kitame pavyzdyje), o ne tiesiogiai modifikuoti CRS failus. Taip bus lengviau atnaujinti KRS, kai bus išleistos naujos versijos.

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

Išsamų mod_security konfigūravimo direktyvų vadovą galite rasti „SpiderLabs“ „ModSecurity GitHub“ saugykloje.

4 veiksmas: „Mod_Evasive“ konfigūravimas

mod_evasive sukonfigūruojamas naudojant direktyvas /etc/httpd/conf.d/mod_evasive.conf. Kadangi naujinant paketą nėra taisyklių, kurias reikia atnaujinti, mums nereikia atskiro failo, kad galėtume pridėti tinkintas direktyvas, o ne mod_security.

Numatytajame faile mod_evasive.conf yra įjungtos šios direktyvos (atminkite, kad šis failas yra labai komentuojamas, todėl išbraukėme komentarus, kad paryškintume toliau pateiktas konfigūracijos direktyvas):

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

direktyvų paaiškinimas:

  • DOSHashTableSize: ši direktyva nurodo maišos lentelės, naudojamos sekti veiklą pagal IP adresą, dydį. Padidinus šį skaičių bus galima greičiau ieškoti svetainių, kuriose klientas lankėsi praeityje, bet gali turėti įtakos bendram našumui, jei jis bus nustatytas per didelis.
  • DOSPageCount: teisėtas skaičius identiškų užklausų į konkretų URI (pavyzdžiui, bet kokį failą, kurį aptarnauja Apache), kurį lankytojas gali pateikti per DOSPageInterval intervalą.
  • DOSSiteCount: panašus į DOSPageCount, bet nurodo, kiek bendrų užklausų galima pateikti visai svetainei per DOSSiteInterval intervalą.
  • DOSBlockingPeriod: jei lankytojas viršija DOSSPageCount arba DOSSiteCount nustatytas ribas, jo šaltinio IP adresas bus įtrauktas į juodąjį sąrašą per DOSBlockingPeriod laikotarpį. DOSBlockingPeriod metu visos užklausos, gaunamos iš to IP adreso, susidurs su 403 uždrausta klaida.

Nesivaržykite eksperimentuoti su šiomis reikšmėmis, kad jūsų žiniatinklio serveris galėtų apdoroti reikiamą srauto kiekį ir tipą.

Tik mažas įspėjimas: jei šios vertės nenustatytos tinkamai, rizikuojate užblokuoti teisėtus lankytojus.

Taip pat galite apsvarstyti kitas naudingas direktyvas:

DOSEmailNotify

Jei turite ir veikia pašto serveris, galite siųsti įspėjamuosius pranešimus naudodami „Apache“. Atminkite, kad turėsite suteikti apache vartotojui SELinux leidimą siųsti el. laiškus, jei SELinux nustatytas vykdyti. Tai galite padaryti bėgdami

setsebool -P httpd_can_sendmail 1

Tada pridėkite šią direktyvą į mod_evasive.conf failą kartu su kitomis direktyvomis:

DOSEmailNotify [email 

Jei ši reikšmė nustatyta ir jūsų pašto serveris veikia tinkamai, el. laiškas bus išsiųstas nurodytu adresu, kai tik IP adresas bus įtrauktas į juodąjį sąrašą.

DOSSystemCommand

Tam reikia galiojančios sistemos komandos kaip argumento,

DOSSystemCommand </command>

Ši direktyva nurodo komandą, kuri turi būti vykdoma, kai IP adresas patenka į juodąjį sąrašą. Jis dažnai naudojamas kartu su apvalkalo scenarijumi, kuris prideda ugniasienės taisyklę, kad blokuotų tolesnius ryšius iš to IP adreso.

Parašykite apvalkalo scenarijų, kuris tvarko IP juodąjį sąrašą ugniasienės lygiu

Kai IP adresas patenka į juodąjį sąrašą, turime blokuoti būsimus ryšius iš jo. Naudosime šį apvalkalo scenarijų, kuris atlieka šį darbą. Sukurkite katalogą pavadinimu scripts-tecmint (arba bet kokį jūsų pasirinktą pavadinimą) /usr/local/bin ir failą pavadinimu ban_ip.sh tame kataloge.

#!/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"

Mūsų DOSSystemCommand direktyva turėtų būti tokia:

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

Aukščiau esančioje eilutėje %s reiškia pažeidžiantį IP adresą, kurį aptiko mod_evasive.

Pridėkite apache vartotoją prie sudoers failo

Atminkite, kad visa tai neveiks, jei nesuteiksite vartotojui apache leidimų paleisti mūsų scenarijų (ir tik tą scenarijų!) be terminalo ir slaptažodžio. Kaip įprasta, galite tiesiog įvesti visudo kaip root, kad pasiektumėte failą /etc/sudoers, tada pridėkite šias 2 eilutes, kaip parodyta paveikslėlyje žemiau:

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

SVARBU: kaip numatytąją saugos politiką, sudo galite paleisti tik terminale. Kadangi šiuo atveju turime naudoti sudo be tty, turime pakomentuoti eilutę, kuri paryškinta šiame paveikslėlyje:

#Defaults requiretty

Galiausiai iš naujo paleiskite žiniatinklio serverį:

systemctl restart httpd

4 veiksmas: DDoS atakų modeliavimas „Apache“.

Yra keletas įrankių, kuriuos galite naudoti norėdami imituoti išorinę ataką prieš serverį. Galite tiesiog „Google“ ieškoti „įrankiai ddos atakų modeliavimui“, kad rastumėte kelis iš jų.

Atminkite, kad jūs ir tik jūs būsite atsakingi už savo modeliavimo rezultatus. Net negalvokite pradėti imituotos atakos prieš serverį, kurio nepriglobiate savo tinkle.

Jei norite padaryti tą patį su VPS, kurį priglobia kažkas kitas, turite atitinkamai įspėti savo prieglobos paslaugų teikėją arba paprašyti leidimo, kad toks srautas galėtų patekti per jų tinklus. linux-console.net jokiu būdu nėra atsakinga už jūsų veiksmus!

Be to, imituotos DoS atakos paleidimas tik iš vieno pagrindinio kompiuterio nėra tikroji ataka. Norėdami tai imituoti, turėsite nukreipti savo serverį iš kelių klientų vienu metu.

Mūsų bandomoji aplinka sudaryta iš CentOS 7 serverio [IP 192.168.0.17] ir „Windows“ pagrindinio kompiuterio, iš kurio paleisime ataką [IP 192.168.0.103]:

Paleiskite toliau pateiktą vaizdo įrašą ir atlikite nurodytus veiksmus, kad imituotumėte paprastą DoS ataką:

Tada pažeidžiantį IP blokuoja iptables:

Išvada

Įjungus mod_security ir mod_evasive, imituojama ataka priverčia CPU ir RAM eksperimentuoti su laikinu didžiausiu likus kelioms sekundėms iki šaltinio IP įtraukimo į juodąjį sąrašą ir užkardos juos užblokuoja. Be šių įrankių simuliacija tikrai labai greitai numuš serverį ir padarys jį netinkamu naudoti per atakos laiką.

Norėtume išgirsti, ar planuojate naudoti (ar jau naudojote) šiuos įrankius. Visada laukiame jūsų žinučių, todėl nedvejodami palikite savo komentarus ir klausimus, jei tokių yra, naudodami toliau pateiktą formą.

Nuorodų nuorodos

https://www.modsecurity.org/