Ein alter Hut, ich kannte es bis heute nicht. Mit mod_evasive kann man einfache DOS Angriffe blocken. Getestet mit dem guten, alten Squeeze.
$ apt-get install libapache2-mod-evasive $ a2enmod mod-evasive $ zless /usr/share/doc/libapache2-mod-evasive/README.gz $ mkdir /var/log/mod_evasive $ chown www-data /var/log/mod_evasive $ ln -s /usr/bin/mail /bin/mail $ joe /etc/apache2/mods-available/mod-evasive.conf <ifmodule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 10 DOSLogDir /var/log/mod_evasive DOSEmailNotify thisis@waste.land DOSWhitelist 127.0.0.1 </ifmodule> $ ln -s /etc/apache2/mods-available/mod-evasive.conf /etc/apache2/mods-enabled/mod-evasive.conf $ /etc/init.d/apache2 reload
Zum testen einfach mal irgendeine Seite aufrufen und ein paar mal schnell F5 drücken bis man ein 403 Forbidden erhält. Dann im logdir schauen und eigentlich sollte man auch eine mail bekommen. Im syslog sollte ein Eintrag der Art
Mar 14 11:36:15 webserver mod_evasive[15723]: Blacklisting address 123.123.123.123: possible DoS attack
aufauchen.
Mit DOSSystemCommand kann man noch einen Befehl definieren, der ausgeführt werden soll wenn eine IP geblockt wird, also z.B. iptables Regel zum sperren der IP („sudo /sbin/iptables -A INPUT -s %s -j REJECT„) oder was auch immer.
Die Meinungen zum Einsatz von mod_evasive gehen etwas auseinander, daher sollte man es erst mal unter Beobachtung laufen lassen und am besten vorher mal ein bisschen googlen.
Zusammen mit HAproxy oder Nginx als Reverseproxy funktioniert mod_evasive nicht. Da kann man sich mal das Nginx Modul HttpLimitReq anschauen. mod_evasive blacklisted zwar die IPs, mehr aber leider nicht.
Links:
http://www.linux-magazin.de/Ausgaben/2005/12/Friede-im-Indianerland
Prima erklärt. Funktioniert soweit auch. Allerdings scheint die Option DOSBlockingPeriod keinerlei Auswirkung zu haben. Nach ca. 5-6 Sekunden ist der Server bei mir wieder erreichbar. Egal, was bei DOSBlockingPeriod eingestellt ist.