Linda Apache dhidi ya Nguvu ya Kinyama au Mashambulizi ya DDoS Kwa Kutumia Mod_Security na Mod_evasive Moduli


Kwa wale wako katika biashara ya upangishaji, au ikiwa unapangisha seva zako mwenyewe na kuzionyesha kwenye Mtandao, kulinda mifumo yako dhidi ya washambuliaji lazima iwe kipaumbele cha juu.

mod_security (ugunduzi wa uingiliaji wa chanzo-wazi na injini ya kuzuia kwa programu za wavuti zinazounganishwa bila mshono na seva ya wavuti) na mod_evasive ni zana mbili muhimu sana zinazoweza kutumika kulinda seva ya wavuti. dhidi ya nguvu ya kikatili au mashambulizi ya (D)DoS.

mod_evasive, kama jina lake linavyopendekeza, hutoa uwezo wa kukwepa wakati inashambuliwa, ikifanya kazi kama mwavuli unaolinda seva za wavuti dhidi ya vitisho kama hivyo.

Katika makala hii, tutajadili jinsi ya kusakinisha, kusanidi, na kuziweka katika kucheza pamoja na Apache kwenye RHEL/CentOS 8 na 7 pamoja na Fedora. Kwa kuongeza, tutaiga mashambulizi ili kuthibitisha kwamba seva inajibu ipasavyo.

Hii inadhania kuwa una seva ya LAMP iliyosanikishwa kwenye mfumo wako. Ikiwa sivyo, tafadhali angalia nakala hii kabla ya kuendelea zaidi.

  • Jinsi ya Kusakinisha Seva ya LAMP kwenye CentOS 8
  • Jinsi ya kusakinisha rafu ya LAMP katika RHEL/CentOS 7

Utahitaji pia kusanidi iptables kama mwisho-msingi wa ngome ya mbele badala ya firewalld ikiwa unatumia RHEL/CentOS 8/7 au Fedora. Tunafanya hivyo ili kutumia zana sawa katika RHEL/CentOS 8/7 na Fedora.

Hatua ya 1: Kusakinisha Iptables Firewall kwenye RHEL/CentOS 8/7 na Fedora

Ili kuanza, simamisha na uzime firewall:

# systemctl stop firewalld
# systemctl disable firewalld

Kisha usakinishe iptables-services kifurushi kabla ya kuwezesha iptables:

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

Hatua ya 2: Kusakinisha Mod_Security na Mod_evasive

Mbali na kuwa na usanidi wa LAMP tayari, utalazimika pia kuwezesha hazina ya EPEL katika RHEL/CentOS 8/7 ili kusakinisha vifurushi vyote viwili. Watumiaji wa Fedora hawahitaji kuwezesha repo yoyote, kwa sababu epel tayari ni sehemu ya Mradi wa 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

Usakinishaji utakapokamilika, utapata faili za usanidi za zana zote mbili katika /etc/httpd/conf.d.

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

Sasa, ili kuunganisha moduli hizi mbili na Apache na iweze kuzipakia inapoanza, hakikisha kuwa mistari ifuatayo inaonekana katika sehemu ya kiwango cha juu ya mod_evasive.conf na mod_security.conf, mtawalia:

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

Kumbuka kwamba modules/mod_security2.so na modules/mod_evasive24.so ni njia jamaa, kutoka /etc/httpd saraka hadi faili chanzo ya moduli. Unaweza kuthibitisha hili (na kuibadilisha, ikihitajika) kwa kuorodhesha yaliyomo kwenye saraka ya /etc/httpd/modules:

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

Kisha uwashe tena Apache na uthibitishe kuwa inapakia mod_evasive na mod_security:

# systemctl restart httpd 	

Tupa orodha ya Moduli Tuli na Zilizoshirikiwa zilizopakiwa.

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

Hatua ya 3: Kusakinisha Seti ya Kanuni ya Msingi na Kusanidi Mod_Security

Kwa maneno machache, Seti ya Kanuni za Msingi (aka CRS) huipa seva ya wavuti maagizo ya jinsi ya kutenda chini ya hali fulani. Kampuni ya msanidi wa mod_security hutoa CRS isiyolipishwa iitwayo OWASP (Mradi wa Usalama wa Maombi ya Wavuti wazi) ModSecurity CRS ambayo inaweza kupakuliwa na kusakinishwa kama ifuatavyo.

1. Pakua OWASP CRS kwenye saraka iliyoundwa kwa ajili hiyo.

# 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. Ondoa faili ya CRS na ubadilishe jina la saraka kwa moja ya urahisi wetu.

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

3. Sasa ni wakati wa kusanidi mod_security. Nakili sampuli ya faili iliyo na sheria (owasp-modsecurity-crs/modsecurity_crs_10_setup.conf.example) hadi kwenye faili nyingine bila .example kiendelezi:

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

na mwambie Apache kutumia faili hii pamoja na moduli kwa kuingiza mistari ifuatayo katika faili kuu ya usanidi ya seva ya wavuti /etc/httpd/conf/httpd.conf faili. Ikiwa umechagua kufunua tarball kwenye saraka nyingine utahitaji kuhariri njia zifuatazo Jumuisha maagizo:

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

Hatimaye, inapendekezwa kwamba tuunde faili yetu ya usanidi ndani ya saraka ya /etc/httpd/modsecurity.d ambapo tutaweka maagizo yetu yaliyobinafsishwa (tutaipa jina tecmint.conf b> katika mfano ufuatao) badala ya kurekebisha faili za CRS moja kwa moja. Kufanya hivyo kutaruhusu uboreshaji rahisi wa CRS kadri matoleo mapya yanavyotolewa.

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

Unaweza kurejelea hazina ya ModSecurity GitHub ya SpiderLabs’ kwa mwongozo kamili wa maelezo ya maagizo ya usanidi ya mod_security.

Hatua ya 4: Kusanidi Mod_Evasive

mod_evasive imesanidiwa kwa kutumia maagizo katika /etc/httpd/conf.d/mod_evasive.conf. Kwa kuwa hakuna sheria za kusasisha wakati wa kusasisha kifurushi, hatuhitaji faili tofauti ili kuongeza maagizo yaliyogeuzwa kukufaa, kinyume na mod_security.

Faili chaguomsingi ya mod_evasive.conf ina maagizo yafuatayo kuwezeshwa (kumbuka kuwa faili hii ina maoni mengi, kwa hivyo tumeondoa maoni ili kuangazia maagizo ya usanidi hapa chini):

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

Ufafanuzi wa maagizo:

  • DOSHAshTableSize: Maagizo haya yanabainisha ukubwa wa jedwali la hashi linalotumika kufuatilia shughuli kwa misingi ya anwani ya IP. Kuongeza nambari hii kutatoa uchunguzi wa haraka wa tovuti ambazo mteja ametembelea hapo awali, lakini kunaweza kuathiri utendaji wa jumla ikiwa imewekwa juu sana.
  • DOSPageCount: Idadi halali ya maombi sawa kwa URI mahususi (kwa mfano, faili yoyote ambayo inatumiwa na Apache) ambayo inaweza kufanywa na mgeni katika kipindi cha DOSpageInterval.
  • DOSSiteCount: Sawa na DOSpageCount, lakini inarejelea ni maombi mangapi ya jumla yanaweza kufanywa kwa tovuti nzima katika kipindi cha DOSsiteInterval.
  • DoSBLockingPeriod: Ikiwa mgeni atazidisha viwango vilivyowekwa na DOSSpageCount au DOSSiteCount, anwani yake ya IP ya chanzo haitaorodheshwa katika muda wa DOSBLockingPeriod. Wakati wa DOSBLockingPeriod, maombi yoyote yanayotoka kwa anwani hiyo ya IP yatakumbana na hitilafu 403 Iliyokatazwa.

Jisikie huru kujaribu maadili haya ili seva yako ya wavuti iweze kushughulikia kiasi kinachohitajika na aina ya trafiki.

Tahadhari ndogo tu: ikiwa maadili haya hayatawekwa vizuri, una hatari ya kuishia kuzuia wageni halali.

Unaweza pia kutaka kuzingatia maagizo mengine muhimu:

Ikiwa una seva ya barua inayofanya kazi, unaweza kutuma ujumbe wa onyo kupitia Apache. Kumbuka kwamba utahitaji kumpa mtumiaji apache ruhusa ya SELinux kutuma barua pepe ikiwa SELinux imewekwa kutekelezwa. Unaweza kufanya hivyo kwa kukimbia

# setsebool -P httpd_can_sendmail 1

Kisha, ongeza agizo hili katika faili ya mod_evasive.conf pamoja na maagizo mengine:

DOSEmailNotify [email 

Ikiwa thamani hii imewekwa na seva yako ya barua inafanya kazi ipasavyo, barua pepe itatumwa kwa anwani iliyobainishwa wakati wowote anwani ya IP itakapoorodheshwa.

Hii inahitaji amri halali ya mfumo kama hoja,

DOSSystemCommand </command>

Maagizo haya yanabainisha amri ya kutekelezwa wakati wowote anwani ya IP inapoorodheshwa. Mara nyingi hutumiwa kwa kushirikiana na hati ya ganda ambayo huongeza sheria ya ngome ili kuzuia miunganisho zaidi inayotoka kwa anwani hiyo ya IP.

Wakati anwani ya IP inapoorodheshwa, tunahitaji kuzuia miunganisho ya siku zijazo kutoka kwayo. Tutatumia hati ifuatayo ya ganda ambayo hufanya kazi hii. Unda saraka iitwayo scripts-tecmint (au jina lolote la chaguo lako) katika /usr/local/bin na faili inayoitwa ban_ip.sh katika saraka hiyo.

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

Maagizo yetu ya DOSSystemCommand yanapaswa kusomeka kama ifuatavyo:

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

Katika mstari ulio hapo juu, %s inawakilisha IP inayokera kama inavyotambuliwa na mod_evasive.

Kumbuka kuwa haya yote hayatafanya kazi isipokuwa umpe ruhusa mtumiaji apache ili kuendesha hati yetu (na hati hiyo pekee!) bila terminal na nenosiri. Kama kawaida, unaweza kuandika visudo kama mzizi ili kufikia faili ya /etc/sudoers na kisha kuongeza mistari 2 ifuatayo kama inavyoonyeshwa kwenye picha hapa chini:

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

MUHIMU: Kama sera chaguomsingi ya usalama, unaweza tu kuendesha sudo kwenye terminal. Kwa kuwa katika kesi hii, tunahitaji kutumia sudo bila tty, tunapaswa kutoa maoni kwenye mstari ulioangaziwa katika picha ifuatayo:

#Defaults requiretty

Mwishowe, anzisha tena seva ya wavuti:

# systemctl restart httpd

Hatua ya 4: Kuiga Mashambulizi ya DDoS kwenye Apache

Kuna zana kadhaa ambazo unaweza kutumia kuiga shambulio la nje kwenye seva yako. Unaweza tu kugoogle \zana za kuiga mashambulizi ya ddos ili kupata kadhaa kati yao.

Kumbuka kwamba wewe, na wewe tu, utawajibika kwa matokeo ya simulation yako. Usifikirie hata kuzindua shambulio la kuigwa kwenye seva ambayo huipangishi ndani ya mtandao wako mwenyewe.

Iwapo ungependa kufanya vivyo hivyo na VPS ambayo inapangishwa na mtu mwingine, unahitaji kuonya ipasavyo mtoa huduma wako wa kukupangia au uombe ruhusa kwa mafuriko kama hayo ya trafiki kupitia mitandao yao. linux-console.net haiwajibikii kwa njia yoyote ile matendo yako!

Kwa kuongeza, kuzindua shambulio la DoS lililoiga kutoka kwa mwenyeji mmoja haiwakilishi shambulio la maisha halisi. Ili kuiga vile, utahitaji kulenga seva yako kutoka kwa wateja kadhaa kwa wakati mmoja.

Mazingira yetu ya majaribio yanajumuisha CentOS 7 seva [IP 192.168.0.17] na seva pangishi ya Windows ambapo tutaanzisha mashambulizi [IP 192.168.0.103]:

Tafadhali cheza video iliyo hapa chini na ufuate hatua zilizoainishwa kwa mpangilio ulioonyeshwa ili kuiga shambulio rahisi la DoS:

Halafu IP iliyokosea imefungwa na iptables:

Hitimisho

Kwa mod_security na mod_evasive kuwezeshwa, shambulio lililoigwa husababisha CPU na RAM kufanya majaribio na kilele cha matumizi ya muda kwa sekunde chache tu kabla ya IP za chanzo kuorodheshwa na kuzuiwa na ngome. Bila zana hizi, simulation hakika itaangusha seva haraka sana na kuifanya isiweze kutumika wakati wa shambulio.

Tungependa kusikia ikiwa unapanga kutumia (au umewahi kutumia hapo awali) zana hizi. Daima tunatazamia kusikia kutoka kwako, kwa hivyo usisite kuacha maoni na maswali yako, ikiwa yapo, kwa kutumia fomu iliyo hapa chini.

Viungo vya Marejeleo