Voor degenen onder u 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 inbraakdetectie- en preventie-engine 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, zoals de naam al doet vermoeden, biedt ontwijkende mogelijkheden terwijl het wordt aangevallen, en fungeert als een paraplu die webservers beschermt tegen dergelijke bedreigingen.
In dit artikel zullen we bespreken hoe je ze kunt installeren, configureren en gebruiken, samen met Apache aan RHEL/CentOS 8 en 7 net zoals Fedora. Daarnaast zullen we aanvallen simuleren om te controleren of de server dienovereenkomstig reageert.
Dit veronderstelt dat u een LAMP-server op uw systeem hebt geïnstalleerd. Als dit niet het geval is, raadpleeg dan dit artikel voordat u verder gaat.
U moet ook instellen iptables als de standaard firewall front-end in plaats van firewalld als je aan het rennen bent RHEL/CentOS 8/7 of Fedora. We doen dit om dezelfde tool in beide te gebruiken RHEL/CentOS 8/7 en Fedora.
Om te beginnen, stoppen en uitschakelen firewalld:
# systemctl stop firewalld. # systemctl firewalld uitschakelen.
Installeer vervolgens de iptables-diensten pakket alvorens in te schakelen: iptables:
# yum update && yum installeer iptables-services. # systemctl iptables inschakelen. # systemctl start iptables. # systemctl-status iptables.
Behalve dat u al een LAMP-opstelling heeft, moet u ook: schakel de EPEL-repository in in RHEL/CentOS 8/7 om beide pakketten te installeren. Fedora-gebruikers hoeven geen repo 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 installeer mod_evasive.
Wanneer de installatie is voltooid, vindt u de configuratiebestanden voor beide tools in /etc/httpd/conf.d.
# ls -l /etc/httpd/conf.d.
Om deze twee modules nu te integreren met: Apache en laat het ze laden wanneer het start, zorg ervoor dat de volgende regels verschijnen in het bovenste gedeelte van mod_evasive.conf en mod_security.confrespectievelijk:
LoadModule evasive20_module modules/mod_evasive24.so. LoadModule security2_module modules/mod_security2.so.
Let daar op modules/mod_security2.so en modules/mod_evasive24.so zijn de relatieve paden, van de /etc/httpd directory naar het bronbestand van de module. U kunt dit verifiëren (en indien nodig wijzigen) door de inhoud van de /etc/httpd/modules map:
# cd /etc/httpd/modules. # pwd. # ls -l | grep -Ei '(ontwijkend|beveiliging)'
Start vervolgens Apache opnieuw en controleer of het wordt geladen mod_evasive en mod_security:
# systemctl herstart httpd
Dump een lijst met geladen statische en gedeelde modules.
# httpd -M | grep -Ei '(ontwijkend|beveiliging)'
In een paar woorden, een Basisregelset (ook bekend als CRS) geeft de webserver instructies over hoe zich te gedragen onder bepaalde omstandigheden. Het ontwikkelbedrijf van mod_security biedt een gratis CRS genaamd OWASP (Beveiligingsproject voor webtoepassingen openen) ModSecurity CRS dat als volgt kan worden gedownload en geïnstalleerd.
1. Download de 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 meester.
2. ontgrendel de CRS bestand en verander de naam van de map voor een van onze gemak.
# 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.voorbeeld) naar een ander bestand zonder de .voorbeeld verlenging:
# cd owasp-modsecurity-crs/ # cp crs-setup.conf.voorbeeld crs-setup.conf.
en vertel Apache om dit bestand samen met de module te gebruiken door de volgende regels in het hoofdconfiguratiebestand van de webserver in te voegen: /etc/httpd/conf/httpd.conf het dossier. Als u ervoor kiest om de tarball in een andere map uit te pakken, moet u de paden bewerken volgens de Include-richtlijnen:
Inclusief crs-tecmint/owasp-modsecurity-crs/crs-setup.conf Voeg crs-tecmint/owasp-modsecurity-crs/rules/*.conf toe.
Ten slotte wordt aanbevolen dat we ons eigen configuratiebestand maken binnen de /etc/httpd/modsecurity.d directory waar we onze aangepaste richtlijnen zullen plaatsen (we zullen het een naam geven) tecmint.conf in het volgende voorbeeld) in plaats van de te wijzigen CRS bestanden direct. Als u dit doet, kunt u de CRS's gemakkelijker upgraden naarmate er nieuwe versies worden uitgebracht.
SecRuleEngine op SecRequestBodyAccess op SecResponseBodyAccess op SecResponseBodyMimeType text/plain text/html text/xml application/octet-stream SecDataDir /tmp.
U kunt verwijzen naar de SpiderLabs' ModSecurity GitHub repository voor een complete verklarende gids van mod_security configuratie richtlijnen.
mod_evasive is geconfigureerd met behulp van richtlijnen in /etc/httpd/conf.d/mod_evasive.conf. Aangezien er geen regels zijn om bij te werken tijdens een pakketupgrade, hebben we geen apart bestand nodig om aangepaste richtlijnen toe te voegen, in tegenstelling tot mod_security.
De standaard mod_evasive.conf bestand heeft de volgende richtlijnen ingeschakeld (merk op dat dit bestand veel commentaar bevat, dus we hebben de opmerkingen verwijderd om de configuratierichtlijnen hieronder te markeren):
DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSpageInterval 1 DOSSiteInterval 1 DOSBlockingPeriode 10.
Toelichting op de richtlijnen:
Experimenteer gerust met deze waarden, zodat uw webserver de vereiste hoeveelheid en type verkeer kan verwerken.
Slechts een kleine waarschuwing: als deze waarden niet goed zijn ingesteld, loopt u het risico legitieme bezoekers te blokkeren.
U kunt ook andere nuttige richtlijnen overwegen:
Als je een mailserver in gebruik hebt, kun je waarschuwingsberichten versturen via Apache. Merk op dat je de apache-gebruiker SELinux toestemming moet geven om e-mails te verzenden als SELinux is ingesteld op afdwingen. Je kunt dit doen door te rennen
# setsebool -P httpd_can_sendmail 1.
Voeg vervolgens deze richtlijn toe in de mod_evasive.conf bestand met de rest van de andere richtlijnen:
DOSEmailNotify [e-mail beveiligd]
Als deze waarde is ingesteld en uw mailserver goed werkt, wordt er een e-mail verzonden naar het opgegeven adres wanneer een IP-adres op de zwarte lijst komt te staan.
Dit heeft een geldig systeemcommando nodig als argument,
DOSSystemCommand
Deze richtlijn specificeert een opdracht die moet worden uitgevoerd wanneer een IP-adres op de zwarte lijst komt te staan. Het wordt vaak gebruikt in combinatie met een shellscript dat een firewallregel toevoegt om verdere verbindingen vanaf dat IP-adres te blokkeren.
Wanneer een IP-adres op de zwarte lijst komt te staan, moeten we toekomstige verbindingen ervan blokkeren. We zullen het volgende shellscript gebruiken dat deze taak uitvoert. Maak een map met de naam scripts-tecmint (of welke naam dan ook naar keuze) in /usr/local/bin en een bestand genaamd ban_ip.sh in die map.
#!/bin/sh. # IP dat wordt geblokkeerd, zoals gedetecteerd door mod_evasive. IP=$1. # Volledig pad naar iptables. IPTABLES="/sbin/iptables" # mod_evasive lock-map. MOD_EVASIVE_LOGDIR=/var/log/mod_evasive. # Voeg de volgende firewallregel toe (blokkeer al het verkeer dat van $IP komt) $IPTABLES -I INPUT -s $IP -j DROP. # Verwijder het vergrendelingsbestand voor toekomstige controles. rm -f "$MOD_EVASIVE_LOGDIR"/dos-"$IP"
Ons DOSSystemCommand richtlijn moet als volgt luiden:
DOSSystemCommand "sudo /usr/local/bin/scripts-tecmint/ban_ip.sh %s"
In de regel hierboven, %s vertegenwoordigt het aanstootgevende IP zoals gedetecteerd door mod_evasive.
Merk op dat dit allemaal niet werkt, tenzij je de gebruiker toestemming geeft apache om ons script (en alleen dat script!) uit te voeren zonder terminal en wachtwoord. Zoals gewoonlijk kun je gewoon typen visudo als root om toegang te krijgen tot de /etc/sudoers bestand en voeg vervolgens de volgende 2 regels toe, zoals weergegeven in de onderstaande afbeelding:
apache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh. Standaardwaarden: apache !requiretty.
BELANGRIJK: als standaard beveiligingsbeleid kunt u alleen uitvoeren sudo in een terminal. Omdat we in dit geval moeten gebruiken sudo zonder een tty, moeten we commentaar geven op de regel die is gemarkeerd in de volgende afbeelding:
#Standaardinstellingen vereist.
Start ten slotte de webserver opnieuw op:
# systemctl herstart httpd.
Er zijn verschillende tools die u kunt gebruiken om een externe aanval op uw server te simuleren. Je kunt gewoon googlen op "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.
Als je hetzelfde wilt doen met een VPS die door iemand anders wordt gehost, moet je je hostingprovider op de juiste manier waarschuwen of toestemming vragen om zo'n verkeersvloed over hun netwerken te laten gaan. Tecmint.com is op geen enkele manier verantwoordelijk voor uw daden!
Bovendien is het lanceren van een gesimuleerde DoS-aanval vanaf slechts één host geen echte aanval. Om dit te simuleren, zou u uw server van verschillende clients tegelijk moeten 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 aanstootgevende IP geblokkeerd door iptables:
Met mod_security en mod_evasive ingeschakeld, veroorzaakt de gesimuleerde aanval de processor en RAM om slechts een paar seconden te experimenteren met een tijdelijke gebruikspiek 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 uitschakelen en onbruikbaar maken tijdens de duur van de aanval.
We horen graag of je van plan bent deze tools te gebruiken (of in het verleden hebt gebruikt). We kijken er altijd naar uit om van u te horen, dus aarzel niet om uw opmerkingen en eventuele vragen achter te laten via het onderstaande formulier.
https://www.modsecurity.org/