[linux-l] AW: [linux-l] (gewollter) Flaschenhals für Apache

Oliver Bandel oliver at first.in-berlin.de
Mi Okt 26 17:11:24 CEST 2005


On Wed, Oct 26, 2005 at 10:15:48AM +0200, Olaf Radicke wrote:
> Am Dienstag, 25. Oktober 2005 19:53 schrieb Oliver Bandel:
> > On Tue, Oct 25, 2005 at 04:35:46PM +0200, Olaf Radicke wrote:
> > > Ich probiere jetzt mal ein anderen Ansatz. Ich versuche mal ein Skript zu
> > > schreiben was alle 5 Min. das /var/log/httpd/access_log ausliest, jede
> > > 100. Zeile auf ihren Zeitspempel überprüft. Wenn der Zeitabstand zu
> > > gering ist, wird Apache für 30 Min. runter gefahren und dann wieder hoch
> > > und das Spiel geht wieder von vorne los.
> >
> > Abgesehen davon, daß das ein Umweg ist und ich zu bezweifeln wage,
> > daß dies so viel Sinn macht (wäre es nicht besser Apache-eigene
> > Tools zu nutzen, oder ein Modul für Apache zu schreiben, das von innen
> > her die Sache angeht, statt esvon aussen anzugehen), denke ich,
> > sollte das Script anders arbeiten.
> 
> Im Prinzip - Ja. Aber es sollte ja eine schnelle Lösung sein. Ein Apache_mod 
> schreibe ICH nicht an einen Nachmittag. 

Naja, das kann man dann als nächsten Schritt angehen, sofern
gewünscht.
Vielleicht muß das hier irgendwo genannte Throttle-Modul vom 1.3-er Apache
bloß mal jemand portieren (oder heraus finden, ob das unter 2.0
nicht eh schon mit eingebaut ist).

Habe mir den Apache 2.0 noch nicht angeschaut.

> 
> > ALLE Logeinträge lesen, und sich merken wieviele Dateien pro Zeit
> > gelesen wurden.
> >
> > Oder noch besser: Summiere alle Filegrößen, die Du im Log findest
> > (mußt evtl. das Logformat ändern, so daß auch die Größe mit geloggt wird)
> > und wenn ein kritischer Wert erreicht wird, dann schlage Alarm
> > (oder mache apachectl shutdown oder throttle).
> 
> Das ist zu teuer. Ich vermute, das bei einer richtigen DOS-Attacke nicht viel 
> Ressourcen für Pythen übrig sind. Testen kann ich es nicht. Wenn ich das mit 
> C++ schreiben würde, könnte ich mir das bestimmt leisten.  

Na, ich denke nicht, daß das so krass wird.
Wenn Du nur jede 100. Zeile lesen willst, dann mußt Du ja auch
100 Zeilen lesen, um die dann auch abzählen zu können.
Dann macht das bischen Summation der Daten kein Problem.
Und da Du ja Herr Deiner eigenen Logfiles bist, baust Du notfalls
Dein logfile so um, daß ide wichtigen Daten gleich zu Anfang kommen, getrennt durch
einen speziellen Delimiter.
Das spart dann den Aufwand beim parsen. :)

Ausserdem: Da Du nun eh max.-Clients auf 5 gesetzt hast,
gibt es eh eine Obergrenze - und Dein Tool wird deswegen
möflicherweise keine Attacken erkennen, da eh so viele
Anfragen nicht abgearbeitet werden - dann kannst Du Dir
dieses Script also auch sparen. :)

> 
> Aber vielleicht mache ich mir wirklich zu viel Gedanken. Die Seite besteht zu 
> 99% aus cgi-generierten html. Da ist Python/CGI wahrscheinlich schon ein 
> natürlicher Bremser.

Naja, wenn Du meinst.

Könnte man ja mal ausprobieren... :)
Dann bauen wir also mal ein Saugerscript, das Deine Begrenzer-Tools
testen soll.....

...wer macht mit? ;-)


Gruß,
   Oliver



Mehr Informationen über die Mailingliste linux-l