Sichern gegen DDOS

Zuerst sollte auf dem System ein Update durchgeführt werden, damit vor der Installation das System auf einem aktuellen Stand ist.

sudo apt update && apt upgrade -y

Jetzt installierst du das Paket libapache2-mod-evasive.

sudo apt install libapache2-mod-evasive

Jetzt musst du überprüfen ob der Mod installiert und aktiviert wurde.

sudo apachectl -M | grep evasive

Die Antwort die zurück kommen sollte sieht so aus

$ evasive20_module (shared)

In der Konfigurationsdatei evasive.conf kannst du jetzt einige EInstellungen vornehmen. Die default Einstellungen reichen aber hier aus.

sudo vi /etc/apache2/mods-enabled/evasive.conf

Hier die default Einstellung der Datei:

<IfModule mod_evasive20.c> 
     DOSHashTableSize 3097 
     DOSPageCount 2 
     DOSSiteCount 50 
     DOSPageInterval 1 
     DOSSiteInterval 1 
     DOSBlockingPeriod 10 
     DOSEmailNotify info@example.com 
     DOSSystemCommand "su - someuser -c '/sbin/... %s ...'" 
     DOSLogDir "/var/log/mod_evasive" 
 </IfModule>

Erklärung der Parameter:

DOSHashTableSize Die Grösse der HashTables pro child-prozess (und somit pro Verbindung) Grössere HashTables
= hoehere Geschwindigkeit = mehr RAM-Verbrauch
DOSPageCount Anzahl der Requests pro Seite innerhalb des mit DOSPageInterval angegebenen Zeitraumes, nach denen weitere Verbindungen unterbunden werden.
DOSSiteCount Anzahl der Requests pro Website innerhalb des mit DOSSiteInterval angegebenen Zeitraumes, nach denen weitere Verbindungen unterbunden werden.
DOSPageInterval Der Zeitraum (in Sekunden) in dem nicht mehr Requests pro Seite, als in DOSPageCount angegeben, erlaubt sind.
DOSSiteInterval Der Zeitraum (in Sekunden) in dem nicht mehr Requests pro Website, als in DOSSiteCount angegeben, erlaubt sind.
DOSBlockingPeriod Der Zeitraum (in Sekunden) für den eine Sperre aufrecht erhalten wird. Der Zähler wird bei erneuten Anfragen innerhalb dieses Zeitraumes zurückgesetzt, weshalb hier sehr niedrige Werte ausreichend sind.
DOSLogDir Wo die HashTables abgelegt werden sollen. (Default ist "/tmp" was auf Systemen mit mehreren Shell-Usern ein Sicherheitsrisiko ist, da dieses Verzeichnis von jedermann gelesen werden kann.

Verständlich ausgedrückt bedeutet das in unserem Beispiel, dass jeder für 10 Sekunden geblockt würde, der öfter als zwei mal pro
Sekunde die gleiche Seite oder mehr als 50 mal pro Sekunde irgendeine Seite auf einer WebSite aufruft. Wenn er dann innerhalb dieser 10 Sekunden wieder versucht, eine Seite aufzurufen, bekommt er eine 403 Fehlermeldung präsentiert und der Zähler wird wieder zurückgesetzt.

Jetzt musst du noch einen Restart auf dem Apache Server machen

sudo systemctl restart apache2

Jetzt kannst du einen Test durchführen, ob alles funktioniert. Dazu machst du ein:

sudo perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl

Jetzt bekommst du etliche Bad Request Antworten:

HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
.
.
.

Somit sollte dein Server jetzt gut gegen DDOS Attacken geschützt sein.


Revision #4
Created 4 October 2022 19:34:03 by mike
Updated 4 October 2022 22:00:36 by mike