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


Niille teistä, jotka työskentelette hosting-alalla tai jos isännöitte omia palvelimia ja altistatte ne Internetille, järjestelmien suojaamisen hyökkääjiltä on oltava ensisijainen tavoite.

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

Nimensä mukaisesti mod_evasive tarjoaa väistämisominaisuuksia hyökkäyksen aikana ja toimii sateenvarjona, joka suojaa verkkopalvelimia tällaisilta uhilta.

Tässä artikkelissa keskustelemme niiden asentamisesta, määrittämisestä ja käyttöönotosta Apachen kanssa RHEL/CentOS 8- ja 7 -käyttöjärjestelmissä. sekä Fedora. Lisäksi simuloimme hyökkäyksiä varmistaaksemme, että palvelin reagoi vastaavasti.

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

  • LAMP-palvelimen asentaminen CentOS 8:aan
  • LAMP-pinon asentaminen RHEL/CentOS 7:ään

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

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

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

systemctl stop firewalld
systemctl disable firewalld

Asenna sitten paketti iptables-services ennen kuin otat iptables käyttöön:

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-asetus on jo käytössä, sinun on myös otettava EPEL-tietovarasto käyttöön RHEL/CentOS 8/7 -käyttöjärjestelmässä, jotta asentaaksesi molemmat paketit. Fedora-käyttäjien ei tarvitse ottaa käyttöön repoa, 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, löydät molempien työkalujen asetustiedostot osoitteesta /etc/httpd/conf.d.

ls -l /etc/httpd/conf.d

Jotta voit integroida nämä kaksi moduulia Apachen kanssa ja ladata ne käynnistyessään, varmista, että seuraavat rivit näkyvät mod_evasive.conf-tiedoston ylätason osiossa. ja mod_security.conf:

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

Huomaa, että modules/mod_security2.so ja modules/mod_evasive24.so ovat suhteellisia polkuja /etc/httpd-hakemistosta lähdetiedostoon. moduulista. Voit tarkistaa tämän (ja muuttaa sitä tarvittaessa) luettelemalla /etc/httpd/modules-hakemiston 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 	

Vedä luettelo ladatuista staattisista ja jaetuista moduuleista.

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

Vaihe 3: Asenna ydinsääntösarja ja määritä Mod_Security

Muutamalla sanalla Core Rule Set (alias CRS) antaa verkkopalvelimelle ohjeet käyttäytymisestä tietyissä olosuhteissa. Kehittäjäyritys mod_security tarjoaa ilmaisen CRS:n nimeltä OWASP (Open Web Application Security Project) ModSecurity CRS, 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. Pura CRS-tiedosto ja muuta hakemiston nimi helpommin.

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-tunnistetta:

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

ja käske Apachea käyttämään tätä tiedostoa yhdessä moduulin kanssa lisäämällä seuraavat rivit verkkopalvelimen päämääritystiedostoon /etc/httpd/conf/httpd.conf. Jos päätit purkaa tarballin toiseen hakemistoon, sinun on muokattava polkuja Include-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ääritystiedostomme hakemistoon /etc/httpd/modsecurity.d, johon sijoitamme mukautetut ohjeemme (nimemme sen tecmint.conf b> seuraavassa esimerkissä) sen sijaan, että muokkaat CRS-tiedostoja suoraan. Tämä helpottaa TPJ:ien päivittämistä, kun uusia versioita julkaistaan.

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

Voit katsoa SpiderLabsin ModSecurity GitHub -tietovaraston täydellisen mod_security-määritysohjeiden selittävän oppaan.

Vaihe 4: Määritä Mod_Evasive

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

Oletustiedostossa mod_evasive.conf on käytössä seuraavat käskyt (huomaa, että tämä tiedosto on runsaasti kommentteja, joten olemme poistaneet kommentit korostaaksemme alla olevia määritysohjeita):

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

Ohjeiden selitykset:

  • DOSHashTableSize: Tämä käsky määrittää hajautustaulukon koon, jota käytetään seuraamaan toimintaa IP-osoitekohtaisesti. Tämän määrän lisääminen mahdollistaa nopeamman haun sivustoista, joissa asiakas on käynyt aiemmin, mutta se voi vaikuttaa kokonaistehokkuuteen, jos se on asetettu liian korkeaksi.
  • DOSPageCount: Laillinen määrä identtisiä pyyntöjä tiettyyn URI:hen (esimerkiksi mihin tahansa Apachen palvelemaan tiedostoon), jonka vierailija voi tehdä DOSPageInterval-välin aikana.
  • DOSSiteCount: Samanlainen kuin DOSPageCount, mutta viittaa siihen, kuinka monta kokonaispyyntöä voidaan tehdä koko sivustolle DOSSiteInterval-välin aikana.
  • DOSBlockingPeriod: Jos vierailija ylittää DOSSPageCount- tai DOSSiteCount-parametrin asettamat rajat, hänen lähde-IP-osoitteensa tulee mustalle listalle DOSBlockingPeriod-ajan kuluessa. DOSBlockingPeriod-aikana kaikki kyseisestä IP-osoitteesta tulevat pyynnöt saavat 403 Kielletty -virheen.

Voit vapaasti kokeilla näitä arvoja, jotta verkkopalvelimesi pystyy käsittelemään vaaditun määrän ja tyyppistä liikennettä.

Vain pieni huomautus: jos näitä arvoja ei ole asetettu oikein, saatat estää lailliset vierailijat.

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

DOSEmailNotify

Jos sinulla on postipalvelin käynnissä, voit lähettää varoitusviestejä Apachen kautta. Huomaa, että sinun on myönnettävä apache-käyttäjälle SELinux oikeus lähettää sähköpostia, jos SELinux on asetettu pakottamaan. Voit tehdä sen juoksemalla

setsebool -P httpd_can_sendmail 1

Lisää seuraavaksi tämä ohje mod_evasive.conf-tiedostoon muiden muiden ohjeiden kanssa:

DOSEmailNotify [email 

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

DOSSystemCommand

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

DOSSystemCommand </command>

Tämä direktiivi määrittää komennon, joka suoritetaan aina, kun IP-osoite joutuu mustalle listalle. Sitä käytetään usein yhdessä komentosarjan kanssa, joka lisää palomuurisäännön estääkseen kyseisestä IP-osoitteesta tulevat yhteydet.

Kirjoita shell-skripti, joka käsittelee IP:n mustan listan palomuurin tasolla

Kun IP-osoite tulee mustalle listalle, meidän on estettävä tulevat yhteydet siitä. Käytämme seuraavaa komentosarjaa, joka suorittaa tämän työn. Luo hakemistoon /usr/local/bin hakemisto nimeltä scripts-tecmint (tai mikä tahansa valitsemasi nimi) ja tiedosto nimeltä ban_ip.sh tuossa 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-ohjeemme tulisi kuulua seuraavasti:

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

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

Lisää apache-käyttäjä sudoers-tiedostoon

Huomaa, että tämä kaikki ei toimi, ellet anna käyttäjälle apache oikeuksia suorittaa skriptimme (ja vain tuon skriptin!) ilman päätettä ja salasanaa. Kuten tavallista, voit kirjoittaa visudo pääkäyttäjänä 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ÄÄ: Oletusturvakäytäntönä voit suorittaa sudon vain päätteessä. Koska tässä tapauksessa meidän on käytettävä sudoa ilman tty-merkkiä, meidän on kommentoitava riviä, joka on korostettu seuraavassa kuvassa:

#Defaults requiretty

Lopuksi käynnistä verkkopalvelin uudelleen:

systemctl restart httpd

Vaihe 4: DDoS-hyökkäysten simulointi Apachella

On olemassa useita työkaluja, joita voit käyttää ulkoisen hyökkäyksen simulointiin palvelimellesi. Löydät useita niistä googlettamalla hakusanalla "työkalut ddos-hyökkäysten simulointiin".

Huomaa, että sinä ja vain sinä olet vastuussa simulaatiosi tuloksista. Älä edes ajattele simuloidun hyökkäyksen käynnistämistä palvelimeen, jota et isännöi omassa verkossasi.

Jos haluat tehdä saman jonkun muun isännöimän VPS:n kanssa, sinun on varoitettava asianmukaisesti isännöintipalveluntarjoajaasi tai pyydettävä lupa tällaisen liikennetulvan kulkemiseen heidän verkkonsa läpi. linux-console.net ei ole millään tavalla vastuussa teoistasi!

Lisäksi simuloidun DoS-hyökkäyksen käynnistäminen vain yhdestä isännästä ei edusta tosielämän hyökkäystä. Tämän 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 käynnistämme hyökkäyksen [IP 192.168.0.103]:

Toista alla oleva video ja noudata annetussa järjestyksessä esitettyjä ohjeita yksinkertaisen DoS-hyökkäyksen simuloimiseksi:

Sitten iptables estää loukkaavan IP-osoitteen:

Johtopäätös

Kun mod_security ja mod_evasive ovat käytössä, simuloitu hyökkäys saa CPU:n ja RAM kokeilemaan tilapäistä käyttöhuippua vain pari sekuntia ennen kuin lähde-IP-osoitteet ovat mustalla listalla ja palomuuri estää ne. Ilman näitä työkaluja simulaatio varmasti kaataa palvelimen erittäin nopeasti ja tekee siitä käyttökelvottoman hyökkäyksen aikana.

Haluaisimme kuulla, aiotteko käyttää (tai oletko käyttänyt aiemmin) näitä työkaluja. Odotamme aina innolla kuulevamme sinusta, joten älä epäröi jättää kommenttejasi ja kysymyksiäsi alla olevalla lomakkeella.

Viitelinkit

https://www.modsecurity.org/