Achtung!
Dieser Artikel ist uralt und die Informationen darinnen ziemlich sicher nicht mehr zutreffend!
Durch mod_evasive koennen mit wenig Aufwand DoS-Attacken abgewehrt werden, indem man einfach Parameter definiert, wie oft eine Seite binnen einem ebenfalls einstellbaren Intervalls aufgerufen werden darf. Wird diese Grenze überschritten werden zukuenftige Anfragen für einen Zeitraum X mit einem 403 Fehler quittiert.
In diesem HOWTO werde ich nur naeher auf die Installation von mod_evasive v1.10.1 für apache 2.2 auf einem debian etch eingehen, da dies mein Setting ist.. Die Installation ist aber fuer andere apache-versionen aehnlich einfach moeglich. Siehe hierzu einfach das README in dem Quell-Archiv...
Inhalt
1. Einleitung
2. Installation
3. Konfiguration
4. Erweiterte Konfiguration
5. Test
Die Installation:
Den Quellcode auf der Projektseite herunterladen, entpacken und mit einem apache-eigenenen Befehl compilieren und installieren:
~#> wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
~#> tar -zxvf mod_evasive_1.10.1.tar.gz
~#> cd mod_evasive
mod_evasive#> apxs2 -i -a -c mod_evasive20.c
Das war's eigentlich auch schon - nach dem naechsten restart von apache wird mod_evasive mit den standard-Einstellungen gespeichert.
Die Konfiguration:
Die Standardeinstellungen sind zwar weitestgehend okay, ein paar Aenderungen sind aber trotzdem empfehlenswert..
Zunächst einmal räumen wir auf:
Bei der Installation wurde der Aufruf fuer mod_evasive in die Datei /etc/apache2/httpd.conf geschrieben. Das ist nicht sonderlich schoen. Also entfernen wir den Eintrag aus der httpd.conf und legen eine neue Datei in /etc/apache2/mods-available:
~#> grep -v mod_evasive /etc/apache2/httpd.conf > /etc/apache2/httpd.conf
~#> echo "LoadModule evasive20_module /usr/lib/apache2/modules/mod_evasive20.so" > /etc/apache2/sites-available/evasive.load
~#> cd /etc/apache2/mods-enabled
~#> ln -s ../mods-available/evasive.load .
Ausserdem muessen wir in der apache-config (/etc/apache2/apache2.conf) den Wert "MaxRequestsPerChild" anpassen. Per default steht dieser auf "0", also "unlimited" - das wuerde verhindern, dass mod_evasive seine hash-tables jemals "aufraeumt". Ein hoher Wert ist trotzdem gut, damit das Modul effektiv arbeitet - in der README stehen 10000 - diesen Wert habe ich einmal uebernommen..
Da wir eben doch noch ein bisschen was an den Standard-Einstellungen des Moduls drehen wollen, erstellen wir nun noch eine Configurations-Datei mit dem Editor unseres Vertrauens, z.B. vim:
~#> vim /etc/apache2/mods-available/evasive.conf
Hier erstmal ein einfaches Beispiel - die Erklärungen folgen..
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
DOSLogDir "/var/lock/mod_evasive"
</IfModule>
- DOSHashTableSize
Die Groesse der HashTables pro child-prozess (und somit pro Verbindung..) Groessere HashTables = hoehere Geschwindigkeit = mehr RAM-Verbrauch... - DOSPageCount
Anzahl der Requests pro Seite innerhalb des mit DOSPageInterval (siehe unten) angegebenen Zeitraumes, nach denen weitere Verbindungen unterbunden werden. - DOSSiteCount
Anzahl der Requests pro Website innerhalb des mit DOSSiteInterval (siehe unten) angegebenen Zeitraumes, nach denen weitere Verbindungen unterbunden werden. - DOSPageInterval
Der Zeitraum (in Sekunden) in dem nicht mehr Requests pro Seite, als in DOSPageCount (siehe oben) angegeben, erlaubt sind. - DOSSiteInterval
Der Zeitraum (in Sekunden) in dem nicht mehr Requests pro Website, als in DOSSiteCount (siehe oben) angegeben, erlaubt sind. - DOSBlockingPeriod
Der Zeitraum (in Sekunden) für den eine Sperre aufrecht erhalten wird. Der Zaehler wird bei erneuten Anfragen innerhalb dieses Zeitraumes zurueckgesetzt, 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...
Wenn er dann innerhalb dieser 10 Sekunden wieder versucht, eine Seite aufzurufen, bekommt er eine 403 Fehlermeldung praesentiert und der Zaehler wird wieder zurueckgesetzt.
Somit koennen DoS-Attacken sehr schnell unterbunden werden, ein normaler User muesste aber schon wie wild auf reload druecken um fuer 10 Sekunden gesperrt zu werden..
Erweiterte Konfiguration
DOSSystemCommandDas bisher beschriebene ist ja schon ganz schoen.. Noch schoener wird es, wenn man mod_evasive mit der Aussenwelt verbindet:
Mittels des Befehles DOSSystemCommand koennen im "Erfolgsfall" weitere tools aufgerufen werden. Hier sind der Phantasie keine (?) Grenzen gesetzt.. Naheliegend und sicher nicht verkehrt ist eine Verbindung mit iptables um blacklisted IPs direkt zu sperren und gar nicht mehr an das System zu lassen:
DOSSystemCommand "su - root -c 'iptables -I INPUT -s %s -j DROP'"
Dies ist natuerlich nur ein sehr einfaches Beispiel - eine einmal geblockte IP wuerde nie mehr zugelassen werden.. Hier wird ein kleines script noetig, die blocks verwaltet und nach einer gewissen Zeit auch wieder "entblockt". Wenn ich sowas in den naechsten Tagen nicht finde, werde ich es selbst schreiben und hier davon berichten.. :)
DOSEmailNotify
Man kann auch eine email-adresse angeben, an die Nachrichten geschickt werden, sobald eine DoS-Attacke erkannt wurde:
DOSEmailNotifyThis email address is being protected from spambots. You need JavaScript enabled to view it.
DOSWhitelist
Natuerlich koennen einzelne IPs oder ganze Bereiche ge-whitelistet werden:
DOSWhitelist 127.0.0.1
DOSWhitelist 127.0.0.*
Der Test
Um nun zu testen ob auch wirklich alles funktioniert wie erwartet sehen wir uns die passenden logfiles fuer die website an, die unter "127.0.0.1" praesentiert wird und starten das mitgelieferte test-script:~#> tail -f /var/log/apache2/hosts/default-access.log
~#> perl mod_evasive/test.pl
Wenn alles richtig funktioniert, sollten von dem Script erst ein paar 200 OK's und dann nur noch 403 forbidden's ausgegeben werden... Im Logfile finden wir ebenfalls entsprechende Eintragungen...
Zu guter letzt: Wie immer bin ich für alle Kommentare, Anregungen und Korrekturen sehr dankbar.. :)
fail2ban howto now availible
@slider: Nu hab ich mal etwas Zeit gehabt und das gewuenschte howto geschrieben.. Findeste auch in meinem Blog.....das waere dann fail2ban... :-)
fail2ban
Wie funktioniert das mit Fail2ban? Gibt es auch ein komplettes Red Hat 5 Paket?re: compile-probs
Ahoi!Hab Deine Frage mal hier oeffentlich gemacht, damit alle was davon haben.. ;-)
Warscheinlich fehlt Dir einfach das dev-paket fuer Deine Apache-Version.. Allerhoechstwar scheinlich ist dies: apache2-threaded-dev...
Gruss,
stimpy
compile-probs
Hi,ich bekomme beim installieren (nach pxs2 -i -a -c mod_evasive20.c) immer die Fehlermeldung
apxs2: command not found
woran kann das liegen? gcc ist installiert!
Grüße
Martin
Terms & Conditions
Subscribe
Report
My comments