Zoeken op website

Bescherm Apache tegen brute force- of DDoS-aanvallen met behulp van Mod_Security- en Mod_evasive-modules


Voor degenen onder u die werkzaam zijn in de hostingbranche, of als u uw eigen servers host en deze blootstelt aan internet, moet het beveiligen van uw systemen tegen aanvallers een hoge prioriteit hebben.

mod_security (open-source engine voor inbraakdetectie en -preventie voor webapplicaties die naadloos integreert met de webserver) en mod_evasive zijn twee zeer belangrijke tools die kunnen worden gebruikt om een webserver te beschermen tegen brute force- of (D)DoS-aanvallen.

mod_evasive biedt, zoals de naam al doet vermoeden, ontwijkingsmogelijkheden tijdens aanvallen en fungeert als een paraplu die webservers tegen dergelijke bedreigingen beschermt.

In dit artikel bespreken we hoe je ze kunt installeren, configureren en samen met Apache in gebruik kunt nemen op RHEL/CentOS 8 en 7 als evenals Fedora. Daarnaast zullen we aanvallen simuleren om te verifiëren dat de server overeenkomstig reageert.

Hierbij wordt ervan uitgegaan dat er een LAMP-server op uw systeem is geïnstalleerd. Als dit niet het geval is, lees dan dit artikel voordat u verder gaat.

  • Hoe LAMP Server op CentOS 8 te installeren
  • Hoe LAMP-stack te installeren in RHEL/CentOS 7

Je zult ook iptables moeten instellen als de standaard firewall front-end in plaats van firewalld als je RHEL/CentOS 8/7 of Fedora gebruikt sterk>. We doen dit om dezelfde tool te gebruiken in zowel RHEL/CentOS 8/7 als Fedora.

Stap 1: De Iptables Firewall installeren op RHEL/CentOS 8/7 en Fedora

Stop om te beginnen en schakel firewalld uit:

systemctl stop firewalld
systemctl disable firewalld

Installeer vervolgens het pakket iptables-services voordat u iptables inschakelt:

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

Stap 2: Mod_Security en Mod_evasive installeren

Naast dat u al over een LAMP-installatie beschikt, moet u ook de EPEL-repository in RHEL/CentOS 8/7 inschakelen om om beide pakketten te installeren. Fedora-gebruikers hoeven geen enkele repository in te schakelen, omdat epel al deel uitmaakt van het Fedora Project.

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

Wanneer de installatie voltooid is, vindt u de configuratiebestanden voor beide tools in /etc/httpd/conf.d.

ls -l /etc/httpd/conf.d

Om deze twee modules te integreren met Apache en deze te laten laden wanneer het start, moet je ervoor zorgen dat de volgende regels verschijnen in het bovenste gedeelte van mod_evasive.conf en respectievelijk mod_security.conf:

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

Houd er rekening mee dat modules/mod_security2.so en modules/mod_evasive24.so de relatieve paden zijn, van de map /etc/httpd naar het bronbestand van de module. Je kunt dit verifiëren (en indien nodig wijzigen) door de inhoud van de map /etc/httpd/modules op te sommen:

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

Start vervolgens Apache opnieuw op en controleer of mod_evasive en mod_security worden geladen:

systemctl restart httpd 	

Dump een lijst met geladen statische en gedeelde modules.

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

Stap 3: Een kernregelset installeren en Mod_Security configureren

Kortom: een Core Rule Set (ook wel CRS genoemd) geeft de webserver instructies over hoe hij zich onder bepaalde omstandigheden moet gedragen. Het ontwikkelaarsbedrijf mod_security biedt een gratis CRS genaamd OWASP (Open Web Application Security Project) ModSecurity CRS dat als volgt kan worden gedownload en geïnstalleerd.

1. Download het OWASP CRS naar een map die voor dat doel is gemaakt.

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. Untar het CRS-bestand en wijzig voor uw gemak de naam van de map.

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

3. Nu is het tijd om mod_security te configureren. Kopieer het voorbeeldbestand met regels (owasp-modsecurity-crs/modsecurity_crs_10_setup.conf.example) naar een ander bestand zonder de extensie .example:

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

en vertel Apache om dit bestand samen met de module te gebruiken door de volgende regels in te voegen in het hoofdconfiguratiebestand /etc/httpd/conf/httpd.conf van de webserver. Als u ervoor kiest om de tarball in een andere map uit te pakken, moet u de paden bewerken volgens de Include-richtlijnen:

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

Ten slotte wordt aanbevolen dat we ons eigen configuratiebestand maken in de map /etc/httpd/modsecurity.d waar we onze aangepaste richtlijnen zullen plaatsen (we zullen het tecmint.conf noemen). b> in het volgende voorbeeld) in plaats van de CRS-bestanden rechtstreeks te wijzigen. Als u dit doet, kunnen de CRS'en eenvoudiger worden geüpgraded naarmate er nieuwe versies worden uitgebracht.

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

U kunt de ModSecurity GitHub-repository van SpiderLabs raadplegen voor een volledige verklarende handleiding voor mod_security-configuratierichtlijnen.

Stap 4: Mod_Evasive configureren

mod_evasive wordt geconfigureerd met behulp van richtlijnen in /etc/httpd/conf.d/mod_evasive.conf. Omdat er geen regels zijn die moeten worden bijgewerkt tijdens een pakketupgrade, hebben we geen apart bestand nodig om aangepaste richtlijnen toe te voegen, in tegenstelling tot mod_security.

In het standaardbestand mod_evasive.conf zijn de volgende richtlijnen ingeschakeld (merk op dat dit bestand zwaar van commentaar is voorzien, dus hebben we de commentaren verwijderd om de onderstaande configuratierichtlijnen te benadrukken):

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

Toelichting op de richtlijnen:

  • DOSHashTableSize: deze richtlijn specificeert de grootte van de hashtabel die wordt gebruikt om de activiteit per IP-adres bij te houden. Als u dit aantal verhoogt, kunt u sneller zoeken naar de sites die de klant in het verleden heeft bezocht, maar dit kan van invloed zijn op de algehele prestaties als dit te hoog wordt ingesteld.
  • DOSPageCount: legitiem aantal identieke verzoeken aan een specifieke URI (bijvoorbeeld elk bestand dat door Apache wordt aangeboden) dat door een bezoeker kan worden gedaan gedurende het DOSPageInterval-interval.
  • DOSSiteCount: vergelijkbaar met DOSPageCount, maar verwijst naar het aantal algemene verzoeken dat kan worden gedaan aan de gehele site gedurende het DOSSiteInterval-interval.
  • DOSBlockingPeriod: Als een bezoeker de limieten overschrijdt die zijn ingesteld door DOSSPageCount of DOSSiteCount, wordt zijn bron-IP-adres op de zwarte lijst gezet gedurende de DOSBlockingPeriod-periode. Tijdens DOSBlockingPeriod zullen alle verzoeken die afkomstig zijn van dat IP-adres een 403 Forbidden-fout tegenkomen.

Experimenteer gerust met deze waarden, zodat uw webserver de vereiste hoeveelheid en type verkeer kan verwerken.

Een klein voorbehoud: als deze waarden niet correct zijn ingesteld, loopt u het risico dat u legitieme bezoekers blokkeert.

Misschien wilt u ook andere nuttige richtlijnen overwegen:

DOSEmailMelden

Als u een mailserver actief heeft, kunt u via Apache waarschuwingsberichten versturen. Merk op dat je de apache-gebruiker SELinux toestemming moet geven om e-mails te verzenden als SELinux is ingesteld op afdwingen. Dat kun je doen door te rennen

setsebool -P httpd_can_sendmail 1

Voeg vervolgens deze richtlijn toe aan het bestand mod_evasive.conf met de rest van de andere richtlijnen:

DOSEmailNotify [email 

Als deze waarde is ingesteld en uw mailserver correct werkt, wordt er een e-mail verzonden naar het opgegeven adres wanneer een IP-adres op de zwarte lijst wordt geplaatst.

DOSSysteemCommando

Hiervoor is een geldig systeemcommando als argument nodig,

DOSSystemCommand </command>

Deze richtlijn specificeert een commando dat moet worden uitgevoerd wanneer een IP-adres op de zwarte lijst komt. Het wordt vaak gebruikt in combinatie met een shellscript dat een firewallregel toevoegt om verdere verbindingen afkomstig van dat IP-adres te blokkeren.

Schrijf een shellscript dat IP-blacklisting op firewallniveau afhandelt

Wanneer een IP-adres op de zwarte lijst komt te staan, moeten we toekomstige verbindingen die daaruit voortkomen blokkeren. We zullen het volgende shellscript gebruiken dat deze taak uitvoert. Maak een map met de naam scripts-tecmint (of welke naam dan ook) in /usr/local/bin en een bestand met de naam ban_ip.sh in die map.

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

Onze DOSSystemCommand-richtlijn zou als volgt moeten luiden:

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

In de regel hierboven staat %s voor het overtredende IP-adres, zoals gedetecteerd door mod_evasive.

Voeg de apache-gebruiker toe aan het sudoers-bestand

Houd er rekening mee dat dit allemaal niet werkt, tenzij je toestemming geeft aan gebruiker apache om ons script (en alleen dat script!) uit te voeren zonder terminal en wachtwoord. Zoals gewoonlijk kunt u gewoon visudo als root typen om toegang te krijgen tot het bestand /etc/sudoers en vervolgens de volgende twee regels toevoegen, zoals weergegeven in de onderstaande afbeelding:

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

BELANGRIJK: als standaard beveiligingsbeleid kun je sudo alleen in een terminal uitvoeren. Omdat we in dit geval sudo moeten gebruiken zonder een tty, moeten we commentaar geven op de regel die in de volgende afbeelding is gemarkeerd:

#Defaults requiretty

Start ten slotte de webserver opnieuw op:

systemctl restart httpd

Stap 4: Een DDoS-aanval op Apache simuleren

Er zijn verschillende tools die u kunt gebruiken om een externe aanval op uw server te simuleren. Je kunt gewoon googlen naar “tools voor het simuleren van ddos-aanvallen ” om er een aantal te vinden.

Houd er rekening mee dat u, en alleen u, verantwoordelijk wordt gehouden voor de resultaten van uw simulatie. Denk er niet eens aan om een gesimuleerde aanval uit te voeren op een server die u niet binnen uw eigen netwerk host.

Mocht u hetzelfde willen doen met een VPS die door iemand anders wordt gehost, dan moet u uw hostingprovider op passende wijze waarschuwen of toestemming vragen om een dergelijke verkeersstroom via hun netwerken te laten verlopen. linux-console.net is op geen enkele manier verantwoordelijk voor uw daden!

Bovendien vertegenwoordigt het lanceren van een gesimuleerde DoS-aanval vanaf slechts één host geen echte aanval. Om dit te simuleren, moet u uw server tegelijkertijd vanaf meerdere clients targeten.

Onze testomgeving bestaat uit een CentOS 7 server [IP 192.168.0.17] en een Windows-host van waaruit we de aanval zullen lanceren [IP 192.168.0.103]:

Speel de onderstaande video af en volg de stappen in de aangegeven volgorde om een eenvoudige DoS-aanval te simuleren:

Vervolgens wordt het overtredende IP-adres geblokkeerd door iptables:

Conclusie

Als mod_security en mod_evasive zijn ingeschakeld, zorgt de gesimuleerde aanval ervoor dat de CPU en RAM experimenteren met een tijdelijke gebruikspiek voor slechts een paar seconden voordat de bron-IP's op de zwarte lijst worden gezet en worden geblokkeerd door de firewall. Zonder deze tools zal de simulatie de server zeker zeer snel platleggen en onbruikbaar maken tijdens de duur van de aanval.

We horen graag of u van plan bent deze tools te gebruiken (of in het verleden heeft gebruikt). We kijken er altijd naar uit om van u te horen, dus aarzel niet om uw eventuele opmerkingen en vragen achter te laten via het onderstaande formulier.

Referentiekoppelingen

https://www.modsecurity.org/