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/