Suojaa Apache Brute Force- tai DDoS-hyökkäyksiltä Mod_Security- ja Mod_evasive-moduuleilla


Niille teistä isännöintiliiketoiminnassa tai jos isännöit omia palvelimiasi ja paljastat ne Internetille, järjestelmiesi suojaamisen hyökkääjiltä on oltava ensisijaisen tärkeää.

mod_security (avoimen lähdekoodin tunkeutumisen havaitsemisen ja estämisen moottori verkkosovelluksille, joka integroituu saumattomasti verkkopalvelimeen) ja mod_evasive ovat kaksi erittäin tärkeätä työkalua, joita voidaan käyttää verkkopalvelimen suojaamiseen raakaa voimaa tai (D) DoS-hyökkäyksiä vastaan.

Mod_evasive , kuten nimestäkin voi päätellä, tarjoaa pakenemisominaisuudet hyökkäyksen aikana ja toimii sateenvarjona, joka suojaa verkkopalvelimia tällaisilta uhilta.

Tässä artikkelissa keskustelemme siitä, miten ne voidaan asentaa, konfiguroida ja laittaa peliin Apachen kanssa RHEL/CentOS 8: ssa ja 7: ssä sekä Fedorassa. Lisäksi simuloimme hyökkäyksiä varmistaaksemme, että palvelin reagoi vastaavasti.

Tämä olettaa, että järjestelmään on asennettu LAMP-palvelin. Jos ei, tarkista tämä artikkeli ennen kuin jatkat.

  • LAMP-palvelimen asentaminen CentOS 8: een
  • LAMP-pinon asentaminen RHEL/CentOS 7 -käyttöjärjestelmään

Sinun on myös määritettävä iptables oletuspalomuuri-käyttöliittymäksi palomuurin sijaan, jos käytät RHEL/CentOS 8/7 tai Fedora. Teemme tämän voidaksemme käyttää samaa työkalua sekä RHEL/CentOS 8/7: ssä että Fedorassa.

Vaihe 1: Iptables-palomuurin asentaminen RHEL/CentOS 8/7: een ja Fedoraan

Aloita pysäyttämällä ja poistamalla palomuuri käytöstä:

# systemctl stop firewalld
# systemctl disable firewalld

Asenna sitten iptables-services -paketti, ennen kuin otat iptables :

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

Vaihe 2: Asenna Mod_Security ja Mod_evasive

Sen lisäksi, että LAMP-määritys on jo käytössä, sinun on myös otettava käyttöön EPEL-arkisto RHEL/CentOS 8/7: ssä molempien pakettien asentamiseksi. Fedoran käyttäjien ei tarvitse ottaa käyttöön repoja, koska epel on jo osa Fedora-projektia.

# 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

Kun asennus on valmis, molempien työkalujen määritystiedostot ovat /etc/httpd/conf.d -kohdassa.

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

Jotta nämä kaksi moduulia voidaan integroida Apache -ohjelmaan ja ladata se käynnistämisen yhteydessä, varmista, että seuraavat rivit näkyvät mod_evasive.conf -operaation ylätason osassa. ja mod_security.conf :

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

Huomaa, että moduulit/mod_security2.so ja moduulit/mod_evasive24.so ovat suhteelliset polut hakemistosta /etc/httpd lähdetiedostoon moduulin. Voit vahvistaa tämän (ja muuttaa sitä tarvittaessa) luetteloimalla hakemiston /etc/httpd/modules sisällön:

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

Käynnistä sitten Apache uudelleen ja varmista, että se lataa mod_evasive ja mod_security :

# systemctl restart httpd 	

Tyhjennä luettelo ladatuista staattisista ja jaetuista moduuleista.

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

Vaihe 3: Asennetaan perussääntöjoukko ja määritetään Mod_Security

Muutamalla sanalla perussääntöjoukko (alias CRS ) antaa verkkopalvelimelle ohjeet käyttäytymiseen tietyissä olosuhteissa. Kehittäjäyritys mod_security tarjoaa ilmaisen CRS -nimisen OWASP (Open Web Application Security Project) ModSecurity CRS -palvelun, joka voidaan ladata ja asentaa seuraavasti.

1. Lataa OWASP CRS tätä tarkoitusta varten luotuun hakemistoon.

# 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. Poista CRS -tiedoston tarra ja muuta hakemiston nimeä mukavuutemme vuoksi.

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

3. Nyt on aika määrittää mod_security. Kopioi esimerkkitiedosto säännöillä ( owasp-modsecurity-crs/modsecurity_crs_10_setup.conf.example ) toiseen tiedostoon ilman .example -laajennusta:

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

ja käske Apache : a käyttämään tätä tiedostoa moduulin kanssa lisäämällä seuraavat rivit verkkopalvelimen pääasetustiedostoon /etc/httpd/conf/httpd.conf . Jos päätit purkaa tarballin toiseen hakemistoon, sinun on muokattava polkuja Sisällytä-ohjeiden mukaisesti:

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

Lopuksi on suositeltavaa luoda oma määritystiedosto hakemistoon /etc/httpd/modsecurity.d , johon sijoitamme räätälöidyt direktiivimme (nimemme sen nimellä tecmint.conf seuraavassa esimerkissä) sen sijaan, että muokkaat CRS -tiedostoja suoraan. Se tekee TPJ: ien päivittämisen helpommaksi uusien versioiden julkaisemisen myötä.

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

SpiderLabsin ModSecurity GitHub -tietovarastosta saat täydellisen selitysoppaan mod_security -määritysdirektiiveistä.

Vaihe 4: Mod_Evasiven määrittäminen

mod_evasive määritetään /etc/httpd/conf.d/mod_evasive.conf -direktiivien avulla. Koska pakettipäivityksen aikana ei ole päivitettäviä sääntöjä, meidän ei tarvitse erillistä tiedostoa mukautettujen direktiivien lisäämiseen, toisin kuin mod_security .

Oletustiedostossa mod_evasive.conf on seuraavat direktiivit käytössä (huomaa, että tätä tiedostoa on kommentoitu voimakkaasti, joten olemme poistaneet kommentit korostaaksemme alla olevat määritysdirektiivit):

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

Selitys direktiiveihin:

  • DOSHashTableSize : Tämä direktiivi määrittää hash-taulukon koon, jota käytetään toiminnan seuraamiseen IP-osoitekohtaisesti. Tämän määrän lisääminen tarjoaa nopeamman haun sivustoista, joissa asiakas on aiemmin käynyt, mutta se voi vaikuttaa yleiseen suorituskykyyn, jos se asetetaan liian korkeaksi.
  • DOSPageCount : Tietyn URI: n (esimerkiksi minkä tahansa Apachen tarjoaman tiedoston) identtisten pyyntöjen oikeutettu määrä, jonka kävijä voi tehdä DOSPageInterval-aikavälin yli.
  • DOSSiteCount : Samanlainen kuin DOSPageCount, mutta viittaa siihen, kuinka monta kokonaispyyntöä voidaan tehdä koko sivustolle DOSSiteInterval-aikavälin aikana.
  • DOSBlockingPeriod : Jos kävijä ylittää DOSSPageCount- tai DOSSiteCount-asetetut rajat, hänen lähde-IP-osoitteensa on mustalla listalla DOSBlockingPeriod-ajanjakson aikana. DOSBlockingPeriodin aikana kaikki kyseiseltä IP-osoitteelta tulevat pyynnöt kohtaavat 403 Forbidden -virheen.

Kokeile näitä arvoja vapaasti, jotta verkkopalvelimesi pystyy käsittelemään vaaditun määrän ja tyypin liikennettä.

Vain pieni huomautus: jos näitä arvoja ei ole asetettu oikein, sinulla on riski lopettaa estäminen laillisille vierailijoille.

Voit myös harkita muita hyödyllisiä direktiivejä:

Jos sähköpostipalvelin on käynnissä, voit lähettää varoitusviestejä Apachen kautta. Huomaa, että sinun on annettava apache-käyttäjän SELinux-käyttöoikeus sähköpostien lähettämiseen, jos SELinux on asetettu pakottamaan. Voit tehdä niin juoksemalla

# setsebool -P httpd_can_sendmail 1

Lisää seuraavaksi tämä direktiivi tiedostoon mod_evasive.conf muiden muiden direktiivien kanssa:

DOSEmailNotify [email 

Jos tämä arvo on asetettu ja postipalvelimesi toimii oikein, sähköposti lähetetään määritettyyn osoitteeseen aina, kun IP-osoite tulee mustalle listalle.

Tämä tarvitsee kelvollisen järjestelmäkomennon argumenttina,

DOSSystemCommand </command>

Tämä direktiivi määrittää komennon, joka suoritetaan aina, kun IP-osoite tulee mustalle listalle. Sitä käytetään usein yhdessä komentosarjakomentosarjan kanssa, joka lisää palomuurisäännön estämään muita IP-osoitteesta tulevia yhteyksiä.

Kun IP-osoite tulee mustalle listalle, meidän on estettävä tulevat yhteydet siitä. Käytämme seuraavaa shell-komentosarjaa, joka suorittaa tämän työn. Luo hakemisto nimeltä scripts-tecmint (tai mikä tahansa valitsemasi nimi) kansioon /usr/local/bin ja tiedosto nimeltä ban_ip.sh siinä hakemistossa.

#!/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 -direktiivi tulee lukea seuraavasti:

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

Yllä olevalla rivillä % s edustaa loukkaavaa IP-osoitetta, jonka mod_evasive on havainnut.

Huomaa, että kaikki tämä vain ei toimi, ellet anna käyttäjälle apache oikeuksia suorittaa komentosarjamme (ja vain se!) Ilman päätelaitetta ja salasanaa. Kuten tavallista, voit vain kirjoittaa visudo juureksi päästäksesi /etc/sudoers -tiedostoon ja lisätä sitten seuraavat 2 riviä alla olevan kuvan mukaisesti:

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

TÄRKEÄÄ: Oletusturvapolitiikkana voit käyttää sudoa vain päätelaitteessa. Koska tässä tapauksessa meidän on käytettävä sudoa ilman tty : tä, meidän on kommentoitava seuraavassa kuvassa korostettu rivi:

#Defaults requiretty

Käynnistä lopuksi verkkopalvelin uudelleen:

# systemctl restart httpd

Vaihe 4: DacheS-hyökkäysten simulointi Apachessa

On olemassa useita työkaluja, joiden avulla voit simuloida ulkoista hyökkäystä palvelimellesi. Voit vain etsiä Googlesta työkaluja ddos-hyökkäysten simulointiin ja löytää useita niistä.

Huomaa, että sinä ja vain sinä olet vastuussa simulaatiosi tuloksista. Älä edes ajattele käynnistää simuloitua hyökkäystä palvelimelle, jota et isännöi omassa verkossa.

Jos haluat tehdä saman jonkun muun isännöimän VPS: n kanssa, sinun on varoitettava asianmukaisesti isännöintipalveluntarjoajaasi tai pyydettävä lupaa tällaiselle liikennevirralle heidän verkkojensa läpi. linux-console.net ei ole missään tapauksessa vastuussa teoistasi!

Lisäksi simuloidun DoS-hyökkäyksen käynnistäminen vain yhdeltä isännältä ei edusta todellista hyökkäystä. Tällaisen simuloimiseksi sinun on kohdistettava palvelimesi useilta asiakkailta samanaikaisesti.

Testiympäristömme koostuu CentOS 7 -palvelimesta [ IP 192.168.0.17 ] ja Windows-isännästä, josta aloitamme hyökkäyksen [IP 192.168.0.103 ]:

Toista alla oleva video ja noudata ilmoitetussa järjestyksessä annettuja ohjeita simuloidaksesi yksinkertaista DoS-hyökkäystä:

Sitten iptables estää loukkaavan IP: n:

Johtopäätös

Kun mod_security ja mod_evasive ovat käytössä, simuloitu hyökkäys saa CPU : n ja RAM: n kokeilemaan tilapäistä käyttöhuippua vain muutama sekunti ennen lähde-IP-osoitteiden lisäämistä mustalle listalle ja palomuurin estämistä. Ilman näitä työkaluja simulaatio kaataa palvelimen varmasti nopeasti ja tekee siitä käyttökelvottoman hyökkäyksen aikana.

Haluaisimme kuulla, jos aiot käyttää (tai olet käyttänyt aiemmin) näitä työkaluja. Odotamme aina mielellämme, joten älä epäröi jättää kommenttisi ja mahdollisia kysymyksiäsi alla olevan lomakkeen avulla.

Viitelinkit