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.