De meeste modules wel. Ik heb gisteren mijn vrije dag besteed aan het bouwen van een module die de impact van slowloris tot nagenoeg 0 beperkt.
In de bijlage vind je het resultaat van mijn gezwoeg (mod_antilores)
Installeren is simpel:
1. Uitpakken en een make install
2. "LoadModule antiloris_module modules/mod_antiloris.so" toevoegen aan httpd.conf
3. eventueel een "IPReadLimit" aan de config toe voegen om het trigger niveau in te stellen.
Standaard gaat apache met deze module nl. connecties droppen als er meer dan 5 thread in READ state staan van een IP. Dit is wat krap voor zeer drukke servers, maar dat is een kwestie van een beetje tweaken.
Als je te veel "Rejected, too many connections in READ state from 192.168.0.1" in je error_log ziet staan van diverse IP's is limiet te laag.
Door deze module kan slowloris niet meer dan 5 threads blokkeren vanaf een IP. Het resultaat is dat de server gewoon berijkbaar blijft.
Succes er mee.
Ps. Feedback wordt zeer op prijs gesteld.
Ps2. Gebruik van deze module is geheel op eigen risico, bla, bla, bla...
Laatst gewijzigd door mind; 23/07/09 om 13:56.
@mind in hoeverre wijkt deze mod af van mod_limitipconn?
Deze module bevat code van mod_limitipconn, maar is voor wat betreft de werking niet te vergelijken. Het probleem met mod_limitipcon is dat deze pas zijn werk doet na ontvangst van de headers, omdat dan pas het scoreboard in apache beschreven wordt, en dat is te laat.
Mijn module werkt op het moment dat de connectie wordt opgebouwd, dus nog voor ontvangst van de headers.
Het leuke is dat hij alleen limiteert op threads die in READ state staan en daardoor kan je een zeer lage drempel gebruiken. Hij telt dus alleen de threads die met de verwerking van headers bezig zijn...
Zelf pas ik deze module inmiddels toe op een aantal CentOS servers en daar werkt hij probleemloos.
klinkt goed!
heeft iemand het ook echt getest met slowloris?
Wat denk je zelf
Ik heb het uiteraard getest tussen twee servers (onderling verbonden met 100 mbit). Op de ene de module en op de andere lowloris.
De eerstst golf van connecties zorgt even voor een kleine hik, maar na een paar seconden stabiliseert dit en is de server weer gewoon bereikbaar.
Maar ik zou het uiteraard prettig vinden als anderen dit ook kunnen bevestigen...
Oops...
Ik probeerde het zojuist te installeren op een Ubuntu 8.04 met Apache 2, maar kreeg een zooi errors. De Makefile opnieuw maken met apxs2 hielp ook niet. Heb op dit moment geen tijd om het verder uit te zoeken, maar wellicht dat ik later nog eens naar ga kijken.
Even op een EL5/DA box getest. Na wat aanpassingen in de Makefile en een handmatige copy-actie werkt deze.
Linkedin: linkedin.com/in/randytenhave
Ik kreeg error:
Makefile:9: /usr/lib/httpd/build/special.mk: Bestand of map bestaat niet
make: *** Er is geen regel om doel '/usr/lib/httpd/build/special.mk' te maken.
Gestopt.
-
Nadat ik "apxs -n antiloris -g" gedaan had ging het goed.
Laatst gewijzigd door Herbert; 22/06/09 om 22:33.
Handleiding CentOS 5.3 met DA voor Module antiloris:
Login als root
mkdir /antiloris
cd /antiloris
wget http://hmnet.nl/mod_antiloris-0.1.zip
unzip mod_antiloris-0.1.zip
rm Makefile
apxs -n antiloris -g
make install
in /etc/httpd/conf/httpd.conf voeg je toe:
LoadModule antiloris_module /usr/lib/apache/mod_antiloris.so
service httpd restart
Hier getest en werkend..
Werkt goed op een Centos test Box; en moet zeggen die doet het goed.
Moest hier en daar een swing geven aan de make, maar moet voor anderen ook geen probleem zijn lijkt me
EDIT: net ook even hierboven van Herbert getest op een andere DA Centos box. Zijn tutorial doet het.
Tim bedankt voor het testen.
Nu vraag ik mij af of hij wel werkt?
In mod_antiloris.c staat:
Moet er niet iets bij zoals:Code:/* ** mod_antiloris.c -- Apache sample antiloris module ** [Autogenerated via ``apxs -n antiloris -g''] ** ** To play with this sample module first compile it into a ** DSO file and install it into Apache's modules directory ** by running: ** ** $ apxs -c -i mod_antiloris.c ** ** Then activate it in Apache's httpd.conf file for instance ** for the URL /antiloris in as follows: ** ** # httpd.conf ** LoadModule antiloris_module modules/mod_antiloris.so ** <Location /antiloris> ** SetHandler antiloris ** </Location> ** ** Then after restarting Apache via ** ** $ apachectl restart ** ** you immediately can request the URL /antiloris and watch for the ** output of this module. This can be achieved for instance via: ** ** $ lynx -mime_header http://localhost/antiloris ** ** The output should be similar to the following one: ** ** HTTP/1.1 200 OK ** Date: Tue, 31 Mar 1998 14:42:22 GMT ** Server: Apache/1.3.4 (Unix) ** Connection: close ** Content-Type: text/html
<Location /antiloris>
SetHandler antiloris
</Location>
Wat er aangegeven is dat /antiloris een map is die aangeroepen kan worden met http
Volgens mij moet SetHandler antiloris zijn werk toch ook doen? of zorgt de module daarvoor?
Je maakt een foutje...
Na een 'apxs -n antiloris -g' moet je wel de source uit het archief naar de gemaakte directory copieeren. Nu ben je de default module aan het compilen en die doet 'nie veel nie' tegen slowloris.
Je kan natuurlijk ook een "apxs -a -i -c mod_antiloris.c" uitvoeren in de directory waar je het archief hebt uitgepakt, dan ben je met een beetje geluk in een keer klaar...
Laatst gewijzigd door mind; 23/06/09 om 00:05. Reden: Typo
Kees je hebt gelijk, hij wordt dan ook meteen toegevoegd aan de httpd.conf
Hoe zit dat dan met de SetHandler antiloris, deze is ook niet standaard actief toch?