Apache-ni Mod_Security we Mod_evasive modullaryny ulanyp, zalym güýçlerden ýa-da DDoS hüjümlerinden goraň


Hosting işinde bolanlar üçin ýa-da öz serwerleriňizi ýerleşdirip, internete açýan bolsaňyz, ulgamlaryňyzy hüjümçilere garşy goramak iň möhüm meseledir.

mod_security (web serweri bilen üznüksiz birleşýän web programmalary üçin açyk çeşme çozuşyny ýüze çykarmak we öňüni alyş hereketlendirijisi) we mod_evasive web serwerini goramak üçin ulanyp boljak iki möhüm guraldyr. zalym güýçlere ýa-da (D) DoS hüjümlerine garşy.

mod_evasive , adyndan görnüşi ýaly, hüjüm wagtynda web serwerlerini şeýle howplardan goraýan saýawan hökmünde hereket edip, gaçmak mümkinçiligini üpjün edýär.

Bu makalada, RHEL/CentOS 8 we 7-de we Fedora-da Apache bilen bilelikde nädip gurmalydygyny, sazlamalydygyny we oýnamalydygyny ara alyp maslahatlaşarys. Mundan başga-da, serweriň şoňa görä reaksiýa bildirýändigini barlamak üçin hüjümleri simulasiýa ederis.

Bu ulgamyňyzda LAMP serweriniň bardygyny göz öňünde tutýar. Notok bolsa, dowam etmezden ozal bu makalany barlaň.

  • CentOS 8-de LAMP serwerini nädip gurmaly
  • RHEL/CentOS 7-de LAMP stakasyny nädip gurmaly

Şeýle hem, RHEL/CentOS 8/7 ýa-da Fedora bilen işleýän bolsaňyz, iptables-i gorag diwarynyň ýerine deslapky gorag diwary hökmünde düzmeli bolarsyňyz. Muny RHEL/CentOS 8/7 we Fedora-da şol bir guraly ulanmak üçin edýäris.

1-nji ädim: RHEL/CentOS 8/7 we Fedora-da Iptables Firewall gurmak

Başlamak üçin, firewalld duruzyň we öçüriň:

# systemctl stop firewalld
# systemctl disable firewalld

Soňra iptables açmazdan ozal iptables-services paketini guruň:

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

2-nji ädim: Mod_Security we Mod_evasive gurmak

LAMP gurnamasyndan başga-da, iki bukjany hem gurmak üçin RHEL/CentOS 8/7-de EPEL ammaryny işletmeli bolarsyňyz. Fedora ulanyjylaryna haýsydyr bir repo açmak zerurlygy ýok, sebäbi epel eýýäm Fedora Taslamasynyň bir bölegi.

# 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

Gurmak tamamlanandan soň, iki gural üçin konfigurasiýa faýllaryny /etc/httpd/conf.d tapyp bilersiňiz.

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

Indi, bu iki moduly Apache bilen birleşdirmek we işe başlanda ýüklemek üçin, mod_evasive.conf iň ýokarky bölüminde aşakdaky setirleriň peýda bolandygyna göz ýetiriň. we degişlilikde mod_security.conf :

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

modullar/mod_security2.so we modullar/mod_evasive24.so /etc/httpd katalogyndan çeşme faýlyna çenli deňeşdirilen ýollardygyny unutmaň. moduly Muny /etc/httpd/modullar katalogynyň mazmunyny görkezip, tassyklap bilersiňiz (we zerur bolsa üýtgedip bilersiňiz):

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

Soňra Apache-i täzeden açyň we mod_evasive we mod_security ýükleýändigini barlaň:

# systemctl restart httpd 	

Adedüklenen Statik we Paýlaşylan modullaryň sanawyny taşlaň.

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

3-nji ädim: Esasy düzgünler toplumyny gurmak we Mod_Security sazlamak

Birnäçe söz bilen aýdylanda, Esasy düzgünler toplumy (aka CRS ) web serwerine belli bir şertlerde özüni alyp barşyňyz barada görkezmeler berýär. mod_security dörediji firma, aşakdaky ýaly göçürip alyp we gurup bolýan OWASP (Açyk web programma howpsuzlygy taslamasy) ModSecurity CRS atly mugt CRS üpjün edýär.

1. OWASP CRS şol maksat bilen döredilen kataloga göçürip alyň.

# 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. CRS faýly açyň we amatlylygymyz üçin katalogyň adyny üýtgediň.

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

3. Indi mod_security sazlamagyň wagty geldi. Mysal faýlyny düzgünler bilen ( owasp-modsecurity-crs/modsecurity_crs_10_setup.conf.example ) .example giňeltmesiz başga bir faýla göçüriň:

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

we web serweriniň esasy konfigurasiýa faýlyna /etc/httpd/conf/httpd.conf faýlyna aşakdaky setirleri goýup, bu faýly modul bilen bilelikde ulanmagy Apache aýdyň. Tarboly başga bir katalogda açmagy saýlasaňyz, Goşmak görkezmelerine laýyklykda ýollary redaktirlemeli bolarsyňyz:

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

Ahyrynda, özleşdirilen konfigurasiýa faýlymyzy /etc/httpd/modsecurity.d katalogynyň içinde döretmek maslahat berilýär, bu ýerde ýöriteleşdirilen görkezmelerimizi ýerleşdireris (adyny tecmint.conf aşakdaky mysalda) CRS faýllaryny göni üýtgetmegiň ýerine. Şeýle etmek, täze wersiýalar çykansoň CRS-leri has aňsatlaşdyrmaga mümkinçilik berer.

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

mod_security konfigurasiýa görkezmeleriniň doly düşündiriş gollanmasy üçin “SpiderLabs” ModSecurity GitHub ammaryna ýüz tutup bilersiňiz.

4-nji ädim: Mod_Evasive sazlamak

mod_evasive /etc/httpd/conf.d/mod_evasive.conf görkezmelerini ulanyp düzüldi. Bukjanyň täzelenişi wagtynda täzelenmegiň düzgünleri ýoklugy sebäpli, mod_security -den tapawutlylykda, ýöriteleşdirilen görkezmeleri goşmak üçin aýratyn faýl gerek däl.

Dymmaklyk mod_evasive.conf faýlynda aşakdaky görkezmeler bar (bu faýlyň gaty köp düşündiriş berilýändigine üns beriň, şonuň üçin aşakdaky konfigurasiýa görkezmelerini bellemek üçin düşündirişleri aýyrdyk):

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

Direktiwalaryň düşündirişi:

  • DOSHashTableSize : Bu direktiwada her IP adresi boýunça işjeňligi yzarlamak üçin ulanylýan hash tablisasynyň ululygy kesgitlenýär. Bu sany köpeltmek, müşderiniň ozal giren sahypalaryny has çalt gözlemäge mümkinçilik berer, ýöne gaty ýokary bolsa umumy öndürijilige täsir edip biler.
  • DOSPageCount : DOSPageInterval aralygynda bir myhman tarapyndan edilip bilinjek belli bir URI (mysal üçin, Apache tarapyndan hyzmat edilýän islendik faýl) meňzeş haýyşlaryň kanuny sany.
  • DOSSiteCount : DOSPageCount-a meňzeýär, ýöne DOSSiteInterval aralygynda tutuş sahypa näçe talap edilip bilinjekdigini görkezýär.
  • DOSBlockingPeriod : Bir myhman DOSSPageCount ýa-da DOSSiteCount tarapyndan bellenen çäklerden geçse, DOSBlockingPeriod wagtynyň dowamynda onuň IP adresi gara sanawda görkeziler. DOSBlockingPeriod döwründe, şol IP adresden gelýän islendik haýyş 403 Gadagan edilen säwlik bilen ýüzbe-ýüz bolar.

Web serweriňiz zerur mukdarda we traffigiň görnüşini dolandyryp biler ýaly, bu bahalar bilen synag edip bilersiňiz.

Diňe kiçijik bir duýduryş: bu gymmatlyklar dogry kesgitlenmedik bolsa, kanuny gelýänleri petiklemek howpuny başdan geçirersiňiz.

Şeýle hem beýleki peýdaly görkezmeleri göz öňünde tutup bilersiňiz:

Poçta serweriňiz işleýän bolsa, Apache arkaly duýduryş habarlaryny iberip bilersiňiz. SELinux ýerine ýetiriljek bolsa, apache ulanyjy SELinux-a e-poçta ibermek üçin rugsat bermelidigini unutmaň. Ylgamak arkaly edip bilersiňiz

# setsebool -P httpd_can_sendmail 1

Ondan soň, bu görkezmäni beýleki görkezmeler bilen mod_evasive.conf faýlyna goşuň:

DOSEmailNotify [email 

Bu baha kesgitlenen bolsa we poçta serweriňiz dogry işleýän bolsa, IP adresi gara sanawa giren mahaly görkezilen adrese e-poçta iberiler.

Munuň üçin argument hökmünde dogry ulgam buýrugy gerek,

DOSSystemCommand </command>

Bu direktiwada IP adresi gara sanawa girizilende ýerine ýetirilmeli buýrugy kesgitleýär. Köplenç şol IP adresinden gelýän baglanyşyklary blokirlemek üçin gorag diwary düzgünini goşýan gabyk skripti bilen bilelikde ulanylýar.

IP adresi gara sanawa öwrülende, geljekdäki baglanyşyklary petiklemeli. Bu işi ýerine ýetirýän aşakdaky gabyk skriptini ulanarys. /usr/local/bin -da scripts-tecmint (ýa-da islän adyňyz) atly katalog we ban_ip.sh atly faýl dörediň. şol katalogda.

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

DOSSystemCommand direktiwamyz aşakdaky ýaly okalmalydyr:

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

Aboveokardaky setirde, mod_evasive tarapyndan kesgitlenişi ýaly, % s kemsidiji IP-ni görkezýär.

Ulanyja apache skriptimizi (we diňe şol skript!) Terminal we paroly ulanmaga rugsat bermeseňiz, bularyň hemmesiniň işlemejekdigine üns beriň. Hemişe bolşy ýaly, /etc/sudoers faýlyna girmek üçin kök hökmünde visudo ýazyp bilersiňiz we aşakdaky suratda görkezilişi ýaly aşakdaky 2 setiri goşup bilersiňiz:

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

Möhüm: Howpsuzlyk syýasaty hökmünde, diňe terminalda sudo işledip bilersiňiz. Bu ýagdaýda sudo tty ulanman ulanmaly bolanymyz üçin, aşakdaky suratda görkezilen setiri düşündirmeli:

#Defaults requiretty

Ahyrynda web serwerini täzeden açyň:

# systemctl restart httpd

4-nji ädim: Apache-de DDoS hüjümlerini simulirlemek

Serweriňize daşarky hüjümi simulirlemek üçin ulanyp boljak birnäçe gural bar. Olardan birnäçesini tapmak üçin diňe ddos hüjümlerini simulirlemek üçin gurallar üçin google edip bilersiňiz.

Simulýasiýanyň netijeleri üçin siz we diňe siz jogapkärçilik çekjekdigiňize üns beriň. Öz toruňyzda ýerleşdirmeýän serweriňize simulýasiýa hüjümi etmek hakda pikirem etmäň.

Başga biri tarapyndan ýerleşdirilen VPS bilen hem edil şonuň ýaly etmek isleseňiz, hosting üpjün edijiňize degişli duýduryş bermeli ýa-da şeýle suw joşmasynyň öz torlaryndan geçmegi üçin rugsat soramaly. linux-console.net amallaryňyz üçin hiç hili jogapkärçilik çekmeýär!

Mundan başga-da, diňe bir öý eýesinden simulirlenen DoS hüjümini amala aşyrmak hakyky durmuş hüjümini aňlatmaýar. Şeýle zatlary simulasiýa etmek üçin serweriňizi bir wagtyň özünde birnäçe müşderiden nyşana almaly bolarsyňyz.

Synag gurşawymyz CentOS 7 serwerinden [ IP 192.168.0.17 ] we hüjümi amala aşyrjak Windows hostymyzdan [IP 192.168.0.103 ]:

Aşakdaky wideony oýnaň we ýönekeý DoS hüjümini simulasiýa etmek üçin görkezilen tertipde görkezilen ädimleri ýerine ýetiriň:

Soňra kemsidiji IP iptables tarapyndan bloklanýar:

Netije

mod_security we mod_evasive açyk bolsa, simulirlenen hüjüm CPU we RAM wagtlaýyn ulanyş derejesi bilen synag geçirmegine sebäp bolýar Çeşme IP-leri gara sanawdan we diwar diwary tarapyndan blokirlenmeginden birnäçe sekunt öň. Bu gurallar bolmasa, simulýasiýa serweri gaty çalt ýykar we hüjümiň dowamynda ulanyp bolmaýar.

Bu gurallary ulanmagy meýilleşdirýän bolsaňyz (ýa-da öň ulanan bolsaňyz) eşitmek isleýäris. Elmydama sizden eşitmäge sabyrsyzlyk bilen garaşýarys, şonuň üçin aşakdaky formdan peýdalanyp, teswirleriňizi we soraglaryňyzy goýmakdan çekinmäň.

Salgylanma baglanyşyklary