Es ist schon traurig, da werden die Bandbreiten immer größer, man kann von zu Hause mit 100MBit ins Netz, nur wer hat davon am meisten?

Richtig, die Bot Netze mit ihrer unerschöpfliche Gier nach Bandbreite! Ich habe den heutigen Tag eigentlich nur damit zugebracht, mich mit Bilderklau, - auch so eine Seuche - und mit Referrer Spam auseinanderzusetzen.

Die allseits empfohlenen Rewrite Rules für Referrer Spam sind nicht so einfach automatisch umzusetzen und weil der Großteil der Spammer eh von dynamischen IPs kommen ist's auch eher sinnlos und kontraproduktiv. Was also tun?

2006 war mal im Linuxmagazin ein Bericht über ein neues Modul für den Apache. libapache2-mod-evasive. Das dient dazu DOS (denial of Service) Attacken automatisch zu blocken. Damals war es nicht ganz trivial das Modul auf einem Stable Debian Server zu installieren, heute genügt dazu ein schlankes apt-get install libapache2-mod-evasive und ein wenig fine tuning.

Das fine tuning beschreibe ich hier.

Man kann als fauler Admin auch einfach alles in Ruhe lassen, es funktioniert sofort. Denn das Modul wird durch die Installation automatisch enabled und hat funktionierende default Parameter.

Ob das Modul seine Arbeit tut, erfährt man durch einen Blick in /var/log/daemon.log und auch durch die Einträge in /tmp/dos-* .

Wo wir auch schon beim Thema Faul wären. Der Apache sollte temporäre Dateien nicht einfach in /tmp schreiben. Da lauern diverse Falle, die Angreifer leicht ausnutzen könnten. Beispielsweise ist hier ein Bericht dazu. Der engagierte Admin wird das also ändern wollen. Das ist ganz einfach. Zuerst eine neue Heimat suchen:

mkdir  /var/log/apache2/evasive
chown -R www-data:adm /var/log/apache2/evasive

Nun muß das dem Modul mitgeteilt werden: in /etc/apache2/mods-available/mod-evasive.load habe ich folgende Einträge drin:

Die Beispiel default Einträge habe ich zur Referenz auskommentiert darunter aufgeführt.

LoadModule evasive20_module /usr/lib/apache2/modules/mod_evasive20.so

  DOSHashTableSize 3097
  DOSPageCount 2
  DOSSiteCount 50
  DOSPageInterval 1.5
  DOSSiteInterval 1.5
  DOSBlockingPeriod 10
  DOSLogDir "/var/log/apache2/evasive"


#
# DOSHashTableSize    3097
# DOSPageCount        2
# DOSSiteCount        50
# DOSPageInterval     1
# DOSSiteInterval     1
# DOSBlockingPeriod   10
#

Kurze Erklärung der Parameter:

DOSHashTableSize: Die Größe der Hashtable, die für die einzelnen nodes benutzt wird. Könnte für einen ApacheServer mit starkem Verkehr erhöht werden. Es werden Primzahlen benutzt. Es wird immer auf die nächst höhere gerundet.

DOSPageCount: Schwellwert für die einzelnen Seiten pro DOSPageInterval , ab wann die Ip auf die Blacklist kommt.

DOSSiteCount: Schwellwert für alle von einem Client angeforderten Resourcen pro DOSPageInterval, ab wann die Ip auf die Blacklist kommt.

DOSPageInterval: Zeitraum, für die einzelnen Seiten, default 1 Sekunde

DOSSiteInterval: Zeitraum, für alle Aufrufe der Site, default 1 Sekunde

DOSBlockingPeriod: Zeitraum für die der Eintrag in der Blacklist steht, default 10 Sekunden, größer ist normalerweise nicht notwendig

DOSLogDir: Absoluter Pfad zum (existierenden) Directory für die Ablage der Blacklisteinträge.

Daneben gibt es noch die Möglichkeit einige IP-Adressen auf eine Whitelist zu setzen und weitere Einstellungen wie DOSEmailNotify, DOSSystemCommand
Dazu steht mehr in der Original Readme.

Der Autor des Modules hat im README (zless /usr/share/doc/libapache2-mod-evasive/README.gz) ausdrücklich darauf hingewiesen, das in der /etc/apache2/apache2.conf noch ein paar Einstellungen überprüft werden sollten. So muß KeepAlive auf On stehen und MaxRequestsPerChild darf nicht auf 0 sein,weil sonst die gespeicherten Blocks nicht gelöscht werden würden. Ich habe mal 20000 eingestellt, der Debian default für MaxRequestsPerChild ist 0. Der KeepAliveTimeout steht schon bei Debian auf 15, icch habe ihn so gelassen.

Zusammenfassung:

In  /etc/apache2/apache2.conf sollten folgende Einstellungen sein:

KeepAlive On

KeepAliveTimeout 15

MaxRequestsPerChild 20000

Nach den gemachten Änderungen kann man den Apache mit apache2ctl restart restarten.

Noch ein kleiner Hinweis zur DOSSiteCount. Das ist ein Wert, der empirisch auf seiner eigenen Seite ermittelt werden sollte, denn wer zum Beispiel in seinem Blog eine Ajax Live Search Funktion implementiert hat, dem könnte es bei menschlichen Besuchern durchaus passieren, das die Benutzer einen 403 Fehler kommen, obwohl sie ja keine Referrer Spam Automaten sind. Vor allem wenn die Besucher eine schnelle und vor allem kurze Anbindung haben. Wer also auf meiner Seite davon betroffen ist, sei es auch nur sproradisch, bitte melden, ich werde den Wert dann erhöhen. Meine Tests haben allerdings ergeben, das ich mit 50 auf der sicheren Seite bin. Mehr als 25 habe ich nicht in einer Sekunde festellen können

Erfolgskontrolle:  (alias ltr=ls -ltr)

~var/log/apache2/evasive]# ltr 
insgesamt 56K
-rw-r--r-- 1 www-data www-data 4 16. Dez 18:35 dos-84.132.23.200
-rw-r--r-- 1 www-data www-data 6 16. Dez 18:37 dos-91.40.41.216
-rw-r--r-- 1 www-data www-data 5 16. Dez 18:42 dos-77.21.23.66
-rw-r--r-- 1 www-data www-data 5 16. Dez 18:52 dos-77.185.40.188
-rw-r--r-- 1 www-data www-data 6 16. Dez 19:17 dos-77.10.150.190
-rw-r--r-- 1 www-data www-data 6 16. Dez 19:28 dos-95.89.50.13
-rw-r--r-- 1 www-data www-data 6 16. Dez 19:42 dos-194.246.122.11
-rw-r--r-- 1 www-data www-data 6 16. Dez 20:14 dos-91.186.46.168
-rw-r--r-- 1 www-data www-data 6 16. Dez 20:20 dos-31.17.63.12
-rw-r--r-- 1 www-data www-data 6 16. Dez 20:39 dos-79.235.241.62
-rw-r--r-- 1 www-data www-data 5 16. Dez 20:39 dos-188.100.5.129
-rw-r--r-- 1 www-data www-data 5 16. Dez 20:51 dos-87.158.41.156
-rw-r--r-- 1 www-data www-data 6 16. Dez 21:28 dos-93.223.51.108
-rw-r--r-- 1 www-data www-data 6 16. Dez 21:47 dos-77.10.0.219

Ich habe mir noch eine andere Art der Erfolgskontrolle überlegt.  Eigentlich müßte die Anzahl der 403 Fehler seit enablen von mod evasive dratisch angestiegen sein. Mal sehen.

 
# grep '12/Dec/' other_vhosts_access.log|cut -d' ' -f10|grep 403|wc -l
18

# grep '13/Dec/' other_vhosts_access.log|cut -d' ' -f10|grep 403|wc -l
30

# grep '14/Dec/' other_vhosts_access.log|cut -d' ' -f10|grep 403|wc -l
12

# grep '15/Dec/' other_vhosts_access.log|cut -d' ' -f10|grep 403|wc -l
24

#grep '17/Dec/' other_vhosts_access.log|cut -d' ' -f10|grep 403|wc -l
1152

 

Whow! und der Tag ist ja erst halb rum 8-) (16:50)


1 Trackback

Trackback-URL für diesen Eintrag

  • Zockertown: Nerten News 
    fail2ban und die ewige Last mit dem Wahnsinn
    Seit einiger Zeit beobachtete ich erneut eine Riesenlast auf dem Apache Server. Eine unserer Webseiten wurde massiv von http HEAD Anfragen überhäuft. 60000 http HEAD Requests. Die aufgerufene Seite ist immer - wie sollte es auch anders sein - ein Joom ...

Noch keine Kommentare

Kommentar schreiben

Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA

Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
BBCode-Formatierung erlaubt
Markdown-Formatierung erlaubt