Apache und DOS Angriffe

Apache und DOS Angriffe:

Bei meinen heutigen Lasttest bin ich auf das Problem gestoßen, das mein Apache ( mpm = worker ) nach einer gewissen Zeit zu viele Threads erstellen wollte und somit den kompletten Speicher allokiert hat. Dies führte zu einem Absturz des Indianers. Nach herabsetzten des entsprechenden Thread Konfiguration war das Problem gelöst. Jedoch war während der Lasttest die Seite kaum erreichbar und wenn, dann nur mit unakzebtabeler Ladezeit. Dies veranlasste mich zur einer Recherche im Internet, bei dieser ich das Modul mod_evasive fand.

Dieses Modul ist in der Lage solche Attacken zu erkennen und den entsprechenden Angreifer zu blockieren. Als Angriff gilt z.B. wenn ein Klient versucht eine gewisse Seite mehr als 3 mal pro Sekunde abzurufen. Wird dies erkannt, so werden für alle eingehenden Anfragen mit einem 403 Forbidden quittiert. Nach einer bestimmten Zeit wird dieser Klient wieder freigeschalten.

Denial of Service mehr bei Wikipedia: http://de.wikipedia.org/wiki/Denial_of_Service

Installation:

apxs -i -a -c mod_evasive20.c

Konfiguration:

<IfModule mod_evasive.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 10
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 120
DOSEmailNotify admin[at]yourhost[dot]com
#DOSSystemCommand "su - someuser -c '/sbin/... %s ...'"
DOSLogDir "/usr/local/apache2-worker/logs/"
DOSWhitelist 127.0.0.1
</IfModule>

Zusammenfassung:

Die obige Konfiguration erstellt eine Hastable mit der Größe von 3097 Bytes. Danach legen wir fest das eine Seite ( DOSPageCount ) nicht öfters als 2 mal in der Zeit von ( DOSPageInterval ) 1er Sekunde aufgerufen werden darf. Oder das nicht mehr wie 10 ( DOSSiteCount ) willkürlich gewählte Seiten in der Zeit von ( DOSSiteInterval ) 1er Sekunde aufgerufen werden dürfen.

Die Option DOSBlockingPeriod legt die Zeit in Sekunden fest, wie lange der Klient ausgesperrt werden soll. DOSEmailNotify ist die Email Adresse des Administrators der für den Webserver zuständig ist. Des weiteren können wir noch selbstdefinierte Aktionen ausführen ( DOSSystemCommand ). Das ganze schalten wir noch für unseren Localhost ab, indem wir ihn auf die DOSWhiteList setzten.

Also versucht nun ein Klient z.B. die index.php 5 mal in einer Sekunde anzufordern, bekommt er die ersten 2 mal die Seite ausgeliefert und beim drittem mal wird ein 403 HTTP Header zurück geschickt und ein Eintrag im Logfile getätigt.