Beskyt Apache mod Brute Force- eller DDoS-angreb ved hjælp af Mod_Security og Mod_evasive-moduler


For dem af jer i hostingbranchen, eller hvis du hoster dine egne servere og udsætter dem for Internettet, skal det være en høj prioritet at sikre dine systemer mod angribere.

mod_security (open source-indtrængningsdetekterings- og forebyggelsesmotor til webapplikationer, der integreres problemfrit med webserveren) og mod_evasive er to meget vigtige værktøjer, der kan bruges til at beskytte en webserver mod brute force eller (D) DoS angreb.

mod_evasive , som navnet antyder, giver undvigende muligheder under angreb og fungerer som en paraply, der beskytter webservere mod sådanne trusler.

I denne artikel vil vi diskutere, hvordan man installerer, konfigurerer og sætter dem i spil sammen med Apache på RHEL/CentOS 8 og 7 samt Fedora. Derudover simulerer vi angreb for at verificere, at serveren reagerer i overensstemmelse hermed.

Dette forudsætter, at du har en LAMP-server installeret på dit system. Hvis ikke, skal du kontrollere denne artikel, før du fortsætter videre.

  • Sådan installeres LAMP-server på CentOS 8
  • Sådan installeres LAMP-stak i RHEL/CentOS 7

Du bliver også nødt til at konfigurere iptables som standard firewall-frontend i stedet for firewalld, hvis du kører RHEL/CentOS 8/7 eller Fedora. Vi gør dette for at bruge det samme værktøj i både RHEL/CentOS 8/7 og Fedora.

Trin 1: Installation af Iptables Firewall på RHEL/CentOS 8/7 og Fedora

For at begynde skal du stoppe og deaktivere firewalld :

# systemctl stop firewalld
# systemctl disable firewalld

Installer derefter pakken iptables-services , inden du aktiverer iptables :

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

Trin 2: Installation af Mod_Security og Mod_evasive

Ud over at have en LAMP-opsætning allerede på plads, skal du også aktivere EPEL-arkivet i RHEL/CentOS 8/7 for at installere begge pakker. Fedora-brugere behøver ikke at aktivere nogen repo, fordi epel allerede er en del af Fedora-projektet.

# 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

Når installationen er afsluttet, finder du konfigurationsfilerne til begge værktøjer i /etc/httpd/conf.d .

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

For at integrere disse to moduler med Apache og få det til at indlæse dem, når det starter, skal du sørge for, at følgende linjer vises i øverste niveau i mod_evasive.conf henholdsvis mod_security.conf :

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

Bemærk, at moduler/mod_security2.so og moduler/mod_evasive24.so er de relative stier fra kataloget /etc/httpd til kildefilen af modulet. Du kan bekræfte dette (og ændre det, hvis det er nødvendigt) ved at angive indholdet i mappen /etc/httpd/modules :

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

Genstart derefter Apache og kontroller, at den indlæser mod_evasive og mod_security :

# systemctl restart httpd 	

Dump en liste over indlæste statiske og delte moduler.

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

Trin 3: Installation af et kerne-regelsæt og konfiguration af Mod_Security

Med et par ord giver et Core Rule Set (alias CRS ) webserveren instruktioner om, hvordan man opfører sig under visse betingelser. Udviklerfirmaet mod_security leverer en gratis CRS kaldet OWASP (Open Web Application Security Project) ModSecurity CRS, der kan downloades og installeres som følger.

1. Download OWASP CRS til en mappe, der er oprettet til dette formål.

# 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. Fjern CRS -filen, og skift navnet på biblioteket for at gøre det lettere for os.

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

3. Nu er det tid til at konfigurere mod_security. Kopier eksempelfilen med regler ( owasp-modsecurity-crs/modsecurity_crs_10_setup.conf.example ) til en anden fil uden udvidelsen .eksempel :

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

og bede Apache om at bruge denne fil sammen med modulet ved at indsætte følgende linjer i webserverens hovedkonfigurationsfil /etc/httpd/conf/httpd.conf fil. Hvis du vælger at pakke tarball ud i en anden mappe, skal du redigere stierne efter Include-direktiverne:

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

Endelig anbefales det, at vi opretter vores egen konfigurationsfil i mappen /etc/httpd/modsecurity.d hvor vi placerer vores tilpassede direktiver (vi navngiver den tecmint.conf i det følgende eksempel) i stedet for at ændre CRS filerne direkte. Dette gør det nemmere at opgradere CRS'erne, når nye versioner frigives.

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

Du kan henvise til SpiderLabs 'ModSecurity GitHub-lager for en komplet forklarende vejledning til mod_security konfigurationsdirektiver.

Trin 4: Konfiguration af Mod_Evasive

mod_evasive er konfigureret ved hjælp af direktiver i /etc/httpd/conf.d/mod_evasive.conf . Da der ikke er nogen regler, der skal opdateres under en pakkeopgradering, har vi ikke brug for en separat fil for at tilføje tilpassede direktiver i modsætning til mod_sikkerhed .

Standardfilen mod_evasive.conf har følgende direktiver aktiveret (bemærk at denne fil er stærkt kommenteret, så vi har fjernet kommentarerne for at fremhæve konfigurationsdirektiverne nedenfor):

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

Forklaring til direktiverne:

  • DOSHashTableSize : Dette direktiv specificerer størrelsen på hash-tabellen, der bruges til at holde styr på aktiviteten pr. IP-adresse. Forøgelse af dette antal giver en hurtigere opslag af de websteder, som klienten tidligere har besøgt, men kan påvirke den samlede præstation, hvis den er indstillet for højt.
  • DOSPageCount : Legitimalt antal identiske anmodninger til en bestemt URI (for eksempel enhver fil, der serveres af Apache), der kan foretages af en besøgende over DOSPageInterval-intervallet.
  • DOSSiteCount : Svarende til DOSPageCount, men henviser til, hvor mange overordnede anmodninger der kan fremsættes til hele webstedet over DOSSiteInterval-intervallet.
  • DOSBlockingPeriod : Hvis en besøgende overskrider de grænser, der er angivet af DOSSPageCount eller DOSSiteCount, bliver hans kildens IP-adresse sortlistet i løbet af DOSBlockingPeriod-tiden. Under DOSBlockingPeriod vil eventuelle anmodninger fra denne IP-adresse støde på en 403 forbudt fejl.

Du er velkommen til at eksperimentere med disse værdier, så din webserver er i stand til at håndtere den krævede mængde og type trafik.

Kun en lille advarsel: hvis disse værdier ikke er indstillet korrekt, risikerer du at ende med at blokere legitime besøgende.

Du kan også overveje andre nyttige direktiver:

Hvis du har en mailserver, der kører, kan du sende advarselsmeddelelser via Apache. Bemærk, at du bliver nødt til at give apache-brugeren SELinux tilladelse til at sende e-mails, hvis SELinux er indstillet til at håndhæve. Du kan gøre det ved at løbe

# setsebool -P httpd_can_sendmail 1

Dernæst tilføj dette direktiv i filen mod_evasive.conf med resten af de andre direktiver:

DOSEmailNotify [email 

Hvis denne værdi er indstillet, og din mailserver fungerer korrekt, sendes en e-mail til den angivne adresse, hver gang en IP-adresse bliver sortlistet.

Dette har brug for en gyldig systemkommando som argument,

DOSSystemCommand </command>

Dette direktiv specificerer en kommando, der skal udføres, når en IP-adresse bliver sortlistet. Det bruges ofte sammen med et shell-script, der tilføjer en firewallregel for at blokere for yderligere forbindelser, der kommer fra denne IP-adresse.

Når en IP-adresse bliver sortlistet, skal vi blokere fremtidige forbindelser, der kommer fra den. Vi bruger følgende shell-script, der udfører dette job. Opret en mappe med navnet scripts-tecmint (eller hvilket som helst navn efter eget valg) i /usr/local/bin og en fil kaldet ban_ip.sh i den mappe.

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

Vores DOSSystemCommand direktiv bør lyde som følger:

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

I linjen ovenfor repræsenterer % s den krænkende IP som detekteret af mod_evasive .

Bemærk, at alt dette bare ikke fungerer, medmindre du giver tilladelse til bruger apache til at køre vores script (og kun det script!) Uden en terminal og en adgangskode. Som sædvanligt kan du bare skrive visudo som rod for at få adgang til filen /etc/sudoers og derefter tilføje følgende 2 linjer som vist på billedet nedenfor:

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

VIGTIGT: Som standard sikkerhedspolitik kan du kun køre sudo i en terminal. Da vi i dette tilfælde er nødt til at bruge sudo uden en tty , er vi nødt til at kommentere den linje, der er fremhævet i følgende billede:

#Defaults requiretty

Til sidst skal du genstarte webserveren:

# systemctl restart httpd

Trin 4: Simulering af et DDoS-angreb på Apache

Der er flere værktøjer, som du kan bruge til at simulere et eksternt angreb på din server. Du kan bare google efter " værktøjer til simulering af ddos-angreb " for at finde flere af dem.

Bemærk, at du, og kun dig, vil blive holdt ansvarlig for resultaterne af din simulering. Tænk ikke engang på at starte et simuleret angreb på en server, som du ikke er vært inden for dit eget netværk.

Hvis du vil gøre det samme med en VPS, der hostes af en anden, skal du advare din hostingudbyder korrekt eller bede om tilladelse til, at en sådan trafikflod går gennem deres netværk. linux-console.net er på ingen måde ansvarlig for dine handlinger!

Desuden repræsenterer lancering af et simuleret DoS-angreb fra kun én vært ikke et virkeligt angreb. For at simulere sådan, skal du målrette din server fra flere klienter på samme tid.

Vores testmiljø er sammensat af en CentOS 7 server [ IP 192.168.0.17 ] og en Windows-vært, hvorfra vi starter angrebet [IP 192.168.0.103 ]:

Afspil videoen nedenfor og følg trinnene i den angivne rækkefølge for at simulere et simpelt DoS-angreb:

Derefter blokeres den krænkende IP af iptables:

Konklusion

Med mod_security og mod_evasive aktiveret, får det simulerede angreb til, at CPU og RAM eksperimenterer med en midlertidig brugstop i kun et par sekunder, før kilde-IP'erne er sortlistet og blokeret af firewallen. Uden disse værktøjer vil simuleringen helt sikkert slå serveren meget hurtigt ned og gøre den ubrugelig i løbet af angrebet.

Vi vil meget gerne høre, om du planlægger at bruge (eller har brugt tidligere) disse værktøjer. Vi ser altid frem til at høre fra dig, så tøv ikke med at efterlade dine kommentarer og spørgsmål, hvis nogen, ved hjælp af nedenstående formular.

Reference Links