Aizsargājiet Apache pret rupju spēku vai DDoS uzbrukumiem, izmantojot Mod_Security un Mod_evasive Modules


Tiem no jums, kas nodarbojas ar mitināšanas biznesu vai ja jūs mitināt savus serverus un pakļaujat tos internetam, jūsu drošības nodrošināšanai pret uzbrucējiem jābūt prioritātei.

mod_security (atvērtā koda ielaušanās atklāšanas un novēršanas programma tīmekļa lietojumprogrammām, kas vienmērīgi integrējas ar tīmekļa serveri) un mod_evasive ir divi ļoti svarīgi rīki, kurus var izmantot, lai aizsargātu tīmekļa serveri pret rupju spēku vai (D) DoS uzbrukumiem.

Mod_evasive , kā norāda nosaukums, nodrošina izvairīšanās iespējas uzbrukuma laikā, darbojoties kā lietussargs, kas pasargā tīmekļa serverus no šādiem draudiem.

Šajā rakstā mēs apspriedīsim, kā tos instalēt, konfigurēt un ievietot spēlē kopā ar Apache RHEL/CentOS 8 un 7, kā arī Fedora. Turklāt mēs modelēsim uzbrukumus, lai pārliecinātos, ka serveris atbilstoši reaģē.

Tas pieņem, ka jūsu sistēmā ir instalēts LAMP serveris. Ja nē, lūdzu, pārbaudiet šo rakstu, pirms turpināt darbu.

  • Kā LAMP serveri instalēt CentOS 8
  • Kā instalēt LAMP kaudzīti RHEL/CentOS 7

Jums arī jāiestata iptables kā noklusējuma ugunsmūra priekšgals, nevis firewalld, ja izmantojat RHEL/CentOS 8/7 vai Fedora. Mēs to darām, lai izmantotu to pašu rīku gan RHEL/CentOS 8/7, gan Fedora.

1. darbība: Iptables ugunsmūra instalēšana RHEL/CentOS 8/7 un Fedora

Lai sāktu, apturiet un atspējojiet firewalld :

# systemctl stop firewalld
# systemctl disable firewalld

Pēc tam instalējiet paketi iptables-services , pirms iespējojat iptables :

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

2. darbība: Mod_Security un Mod_evasive instalēšana

Papildus tam, ka LAMP iestatīšana jau ir ieviesta, jums būs jāiespējo arī EPEL repozitorijs RHEL/CentOS 8/7, lai instalētu abas paketes. Fedora lietotājiem nav nepieciešams iespējot repo, jo epels jau ir Fedora projekta daļa.

# 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

Kad instalēšana ir pabeigta, konfigurācijas failus abiem rīkiem atradīsit vietnē /etc/httpd/conf.d .

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

Tagad, lai integrētu šos divus moduļus ar Apache un lai tas tos ielādētu, kad tas sākas, pārliecinieties, vai mod_evasive.conf augšējā līmeņa sadaļā ir redzamas šādas rindas un mod_security.conf :

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

Ņemiet vērā, ka moduļi/mod_security2.so un moduļi/mod_evasive24.so ir relatīvie ceļi, sākot no /etc/httpd direktorija līdz avota failam moduļa. To var pārbaudīt (un, ja nepieciešams, mainīt), norādot direktorija /etc/httpd/modules saturu:

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

Pēc tam restartējiet Apache un pārbaudiet, vai tas ielādē mod_evasive un mod_security :

# systemctl restart httpd 	

Izmest ielādēto statisko un koplietojamo moduļu sarakstu.

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

3. darbība: pamatnoteikumu kopas instalēšana un Mod_Security konfigurēšana

Dažos vārdos pamatnoteikumu kopa (jeb CRS ) tīmekļa serverim sniedz norādījumus, kā rīkoties noteiktos apstākļos. Izstrādātāja firma mod_security nodrošina bezmaksas DRS ar nosaukumu OWASP (Open Web Application Security Project) ModSecurity DRS, kuru var lejupielādēt un instalēt šādi.

1. Lejupielādējiet OWASP DRS šim nolūkam izveidotā direktorijā.

# 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. Vienai ērtībai noņemiet CRS failu un nomainiet direktorija nosaukumu.

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

3. Tagad ir pienācis laiks konfigurēt mod_security. Kopējiet faila paraugu ar kārtulām ( owasp-modsecurity-crs/modsecurity_crs_10_setup.conf.example ) citā failā bez paplašinājuma .example :

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

un sakiet Apache , lai šis fails tiktu izmantots kopā ar moduli, tīmekļa servera galvenajā konfigurācijas failā /etc/httpd/conf/httpd.conf ievietojot šādas rindas. Ja izvēlējāties izpakot tarball citā direktorijā, ceļi būs jārediģē, ievērojot direktīvas Iekļaut:

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

Visbeidzot, ieteicams izveidot savu konfigurācijas failu direktorijā /etc/httpd/modsecurity.d , kur izvietosim pielāgotās direktīvas (to nosauksim tecmint.conf šajā piemērā), nevis tieši modificēt CRS failus. Tas ļaus vieglāk uzlabot DRS, kad tiek izlaistas jaunas versijas.

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

Pilnu skaidrojošu rokasgrāmatu par konfigurācijas direktīvām mod_security varat skatīt SpiderLabs ModSecurity GitHub repozitorijā.

4. solis: Mod_Evasive konfigurēšana

Programma mod_evasive tiek konfigurēta, izmantojot /etc/httpd/conf.d/mod_evasive.conf direktorijas. Tā kā pakotnes jaunināšanas laikā nav noteikumu, kas jāatjaunina, mums nav nepieciešams atsevišķs fails, lai pievienotu pielāgotas direktīvas, atšķirībā no mod_security .

Noklusējuma failā mod_evasive.conf ir iespējotas šādas direktīvas (ņemiet vērā, ka šis fails ir ļoti komentēts, tāpēc mēs esam izņēmuši komentārus, lai izceltu tālāk norādītās konfigurācijas direktīvas):

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

Direktīvu skaidrojums:

  • DOSHashTableSize : šī direktīva norāda jaukšanas tabulas lielumu, kas tiek izmantots, lai izsekotu darbībām, pamatojoties uz katru IP adresi. Palielinot šo skaitli, ātrāk tiks meklētas vietnes, kuras klients ir apmeklējis iepriekš, taču tas var ietekmēt kopējo veiktspēju, ja tā ir iestatīta pārāk augstu.
  • DOSPageCount : likumīgs skaits identisku pieprasījumu konkrētam URI (piemēram, jebkuram failam, kuru apkalpo Apache), ko apmeklētājs var veikt, izmantojot DOSPageInterval intervālu.
  • DOSSiteCount : līdzīgs DOSPageCount, bet norāda, cik daudz kopējo pieprasījumu visā vietnē var veikt DOSSiteInterval intervāla laikā.
  • DOSBlockingPeriod : ja apmeklētājs pārsniedz DOSSPageCount vai DOSSiteCount noteiktos ierobežojumus, DOSBlockingPeriod laikā viņa avota IP adrese tiks iekļauta melnajā sarakstā. DOSBlockingPeriod laikā visiem pieprasījumiem, kas nāk no šīs IP adreses, radīsies 403 Forbidden kļūda.

Jūtieties brīvi eksperimentēt ar šīm vērtībām, lai jūsu tīmekļa serveris spētu apstrādāt nepieciešamo trafika daudzumu un veidu.

Tikai neliels brīdinājums: ja šīs vērtības nav pareizi iestatītas, jūs riskējat bloķēt likumīgos apmeklētājus.

Varat arī apsvērt citas noderīgas direktīvas:

Ja jums ir izveidots un darbojas pasta serveris, varat izsūtīt brīdinājuma ziņojumus, izmantojot Apache. Ņemiet vērā, ka jums būs jāpiešķir apache lietotāja SELinux atļauja sūtīt e-pastus, ja SELinux ir iestatīts uz izpildi. To var izdarīt, skrienot

# setsebool -P httpd_can_sendmail 1

Pēc tam pievienojiet šo direktīvu failā mod_evasive.conf kopā ar pārējām citām direktīvām:

DOSEmailNotify [email 

Ja šī vērtība ir iestatīta un jūsu pasta serveris darbojas pareizi, ikreiz, kad IP adrese kļūst melnajā sarakstā, uz norādīto adresi tiks nosūtīts e-pasts.

Tam kā argumentam nepieciešama derīga sistēmas komanda,

DOSSystemCommand </command>

Šī direktīva nosaka komandu, kas jāizpilda ikreiz, kad IP adrese kļūst melnajā sarakstā. To bieži lieto kopā ar čaulas skriptu, kas pievieno ugunsmūra kārtulu, lai bloķētu citus savienojumus, kas nāk no šīs IP adreses.

Kad IP adrese kļūst melnajā sarakstā, mums ir jābloķē turpmākie savienojumi, kas no tā nāk. Mēs izmantosim šādu čaulas skriptu, kas veic šo darbu. Vietnē /usr/local/bin izveidojiet direktoriju ar nosaukumu scripts-tecmint (vai jebkuru citu jūsu izvēlētu nosaukumu) un failu ar nosaukumu ban_ip.sh tajā direktorijā.

#!/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ūsu DOSSystemCommand direktīvai jābūt šādai:

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

Augšējā rindā % s apzīmē pārkāpēju IP, ko ir atklājis mod_evasive .

Ņemiet vērā, ka tas viss nedarbosies, ja vien lietotājam apache nedosiet atļauju palaist mūsu skriptu (un tikai šo skriptu!) Bez termināla un paroles. Kā parasti, jūs varat vienkārši ierakstīt visudo kā root, lai piekļūtu failam /etc/sudoers un pēc tam pievienotu šādas 2 rindas, kā parādīts zemāk esošajā attēlā:

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

SVARĪGI: kā noklusējuma drošības politiku jūs varat palaist sudo tikai terminālā. Tā kā šajā gadījumā mums jāizmanto sudo bez tty , mums ir jāizsaka komentārs rindiņā, kas ir izcelta šajā attēlā:

#Defaults requiretty

Visbeidzot restartējiet tīmekļa serveri:

# systemctl restart httpd

4. solis: DDoS uzbrukumu modelēšana Apache

Ir vairāki rīki, kurus varat izmantot, lai simulētu ārēju uzbrukumu serverim. Varat vienkārši google meklēt “ rīki ddos uzbrukumu imitēšanai ”, lai atrastu vairākus no tiem.

Ņemiet vērā, ka jūs un tikai jūs būsiet atbildīgs par simulācijas rezultātiem. Nemaz nedomājat sākt simulētu uzbrukumu serverim, kuru nerīkojat savā tīklā.

Ja vēlaties darīt to pašu ar VPS, kuru mitina kāds cits, jums atbilstoši jābrīdina savs mitināšanas pakalpojumu sniedzējs vai jāpieprasa atļauja šādam satiksmes plūsmai iet caur viņu tīkliem. linux-console.net nekādā gadījumā nav atbildīgs par jūsu darbībām!

Turklāt simulēta DoS uzbrukuma uzsākšana tikai no viena resursdatora nerada reālas dzīves uzbrukumu. Lai to imitētu, jums vienlaicīgi ir jānorāda uz serveri no vairākiem klientiem.

Mūsu testa vidi veido CentOS 7 serveris [ IP 192.168.0.17 ] un Windows resursdators, no kura mēs sāksim uzbrukumu [IP 192.168.0.103 ]:

Lūdzu, atskaņojiet zemāk redzamo videoklipu un veiciet norādītā secībā norādītās darbības, lai imitētu vienkāršu DoS uzbrukumu:

Tad pārkāpjošo IP bloķē iptables:

Secinājums

Ja ir iespējotas mod_security un mod_evasive , simulētais uzbrukums liek CPU un RAM eksperimentēt ar pagaidu lietošanas maksimumu tikai dažas sekundes pirms avota IP iekļaušana melnajā sarakstā un ugunsmūra bloķēšana. Bez šiem rīkiem simulācija noteikti ļoti ātri sagraus serveri un padarīs to nelietojamu uzbrukuma laikā.

Mēs labprāt uzzinātu, vai plānojat izmantot (vai esat izmantojis agrāk) šos rīkus. Mēs vienmēr ceram uz jums atbildi, tāpēc nevilcinieties atstāt komentārus un jautājumus, ja tādi ir, izmantojot zemāk esošo veidlapu.

Atsauces saites