Apache: DDoS Schutz für den WebServer

Vielversprechend ist mod_evasive. Es macht genau das, was beim beschriebenen Problem gefragt ist, es reagiert, wenn:

dieselbe Seite auffällig oft abgerufen wird,
mehr als eine bestimmte Anzahl gleichzeitiger Anfragen in einem bestimmten Zeitintervall gemacht werden,
Anfragen von einer Adresse gesendet werden, die bereits temporär geblacklisted wurde.

Die default Reaktion ist ein “403 Forbidden” Fehler, mod_evasive kann aber auch externe Befehle aufrufen wie z.B. iptables.

Die Installation ist von ein paar Fußangeln abgesehen einfach:

apt-get install libapache2-mod-evasive
mkdir /var/lock/mod-evasive
chown www-data /var/lock/mod-evasive
ln -s /etc/alternatives/mail /bin/mail
$EDITOR /etc/apache2/mods-available/mod-evasive.conf


Mit eurem Lieblingseditor fügt ihr folgende Zeilen in die mod-evasive.conf Datei ein, passt dabei klarerweise die Email Adresse an. Die Datei muss erstellt werden.

 
    DOSHashTableSize 3097
    DOSPageCount 3
    DOSSiteCount 60
    DOSPageInterval 1
    DOSSiteInterval 2
    DOSBlockingPeriod 15
    DOSEmailNotify deine@adresse.de
    DOSLogDir "/var/lock/mod-evasive"
 

Danach das Modul aktivieren und Apache durchstarten:

a2enmod mod-evasive
/etc/init.d/apache2 restart

Nun müssen wir auch testen ob es funktioniert was wir installiert haben:

Ein Testscript (perl) wird auch mitgeliefert.

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

Das Testscript gibt direkt Meldungen aus. Zusätzlich loggt Apache mit. Außerdem muss danach im angelegten Ordner /var/lock/mod_evasive/ eine Datei namens “dos-127.0.0.1” liegen.

Nun müss das ganze noch in die Firewall für das automatische sperren

Statt nur Apache “403 Forbidden” Fehler ausliefern zu lassen, soll die IP komplett mit iptables geblockt werden.
”’Wahrscheinlich müssen wir vorher noch fail2ban installieren!!”’

Eine Datei /etc/fail2ban/filter.d/apache-dosevasive.conf anlegen mit folgendem Inhalt:

 # Fail2Ban configuration file
 #
 # Author: Xela
 #
 # $Revision: 728 $
 #
 
 [Definition]
 
 # Option:  failregex
 # Notes.:  regex to match the Forbidden log entrys in apache error.log
 #          maybe (but not only) provided by mod_evasive
 #
 # Values:  TEXT
 #
 failregex = ^[[^]]*]s+[error]s+[client ] client denied by server configuration:s 
 
 # Option:  ignoreregex
 # Notes.:  regex to ignore. If this regex matches, the line is ignored.
 # Values:  TEXT
 #
 ignoreregex =

In der Datei '''/etc/fail2ban/jail.conf''' folgendes hinzufügen:

[apache-dosevasive]

 enabled = true
 filter  = apache-dosevasive
 action = iptables-allports[name=dos]
 logpath = /var/log/apache*/*error.log
 bantime = 600
 maxretry = 10

Viel Spass beim ausprobieren. Bei Problemen oder Anregungen hinterlasst gerne ein Kommentar.