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.