Wie verteidige ich mich am besten gegen einen Slowloris-DOS-Angriff auf einen Apache-Webserver?

32

Kürzlich hat ein Skript namens "slowloris" Beachtung gefunden. Das Grundkonzept von Slowloris ist kein neuer Angriff, aber angesichts der jüngsten Aufmerksamkeit habe ich einen leichten Anstieg der Angriffe auf einige unserer Apache-Websites festgestellt.

Im Moment scheint es keine 100% ige Verteidigung dagegen zu geben.

Die beste Lösung, die wir bisher gefunden haben, ist die Steigerung der MaxClients.

Dies erhöht natürlich nur die Anforderungen an den Computer des Angreifers und schützt den Server nicht zu 100%.

Einem anderen Bericht zufolge kann die Verwendung eines Reverse-Proxys (z. B. Perlbal) vor dem Apache-Server dazu beitragen, den Angriff zu verhindern.

Die Verwendung von mod_evasive, um die Anzahl der Verbindungen von einem Host zu begrenzen, und von mod_security, um Anforderungen abzulehnen, die so aussehen, als ob sie von slowloris ausgegeben wurden, scheinen die beste Verteidigung zu sein.

Hat jemand auf ServerFault solche Angriffe erlebt? Wenn ja, welche Maßnahmen haben Sie ergriffen, um dies zu verteidigen / zu verhindern?

HINWEIS: Diese Frage gilt für Apache-Server, da meines Erachtens Windows IIS-Server nicht betroffen sind.

KPWINC
quelle

Antworten:

22

Ich habe einen solchen Angriff erlebt ... mitten im Hochsommer (23. Juni), wo du auf dem Land sein und Bier trinken sollst:>

Ich habe meinen Apache hinter Varnish gestellt , der nicht nur vor Slowloris schützt, sondern auch die Webanfragen erheblich beschleunigt.

iptablesHat mir auch geholfen:

iptables -I INPUT -p tcp --dport 80 \
         -m connlimit --connlimit-above 20 --connlimit-mask 40 -j DROP

Diese Regel begrenzt einen Host auf 20 Verbindungen zu Port 80, was keinen Einfluss auf nicht böswillige Benutzer haben sollte, jedoch Slowloris von einem Host aus unbrauchbar machen würde.

Kristaps
quelle
4
+1 für die Iptables-Regel.
Tim
1
Nur ein Kopf hoch. "Out of the box", Firnis zwischenspeichert keine Seiten, wenn es Cookies erhalten hat. Sie müssen eine benutzerdefinierte Konfiguration vornehmen, um dies zu umgehen. Beispiele sind auf ihrer Website verfügbar und einfach zu implementieren.
David
Lack ist ziemlich programmierbar, so dass Sie ihn möglicherweise konfigurieren können, um zu sehen, was passiert, und um damit umzugehen. Ich denke jedoch, dass Sie das Problem nur vom Webserver auf den Proxy verschieben, indem Sie einen Proxy vor Apache stellen. Das Problem ist immer noch da, nur an einem anderen Ort. Verbindungen / Ports sind weiterhin belegt. Ich beginne mit der aufgelisteten iptables-Regel (oder der Entsprechung für Ihre Firewall) und schaue dann auf einen Proxy.
David
1
Das Problem mit dem Sloworis-Angriff ist auf das Multi-Threading-Modell von Apache beschränkt (und auf mehrere andere Webserver, die ein ähnliches Modell verwenden). Lack sollte das überleben.
Cian,
4

mod_antiloris , so einfach ist das.

LiraNuna
quelle
3

Wenn alle Apache-Module thread-sicher sind, kann Slowloris einfach durch Umschalten auf Event- oder Worker-MPMs besiegt werden. ref: hier

Cian
quelle
0

Momentan scheint nichts mehr zu tun zu sein, um die maximale Anzahl gleichzeitiger Verbindungen pro IP auf dem Server zu begrenzen.

Maxwell
quelle
0

Es gibt einen Benutzer-Patch, den Sie ausprobieren können. Das Zeitlimit wird abhängig von der Auslastung des Servers geändert. In Anbetracht seines Status möchten Sie es jedoch möglicherweise nicht auf einem Produktionscomputer verwenden, ohne ernsthafte Tests durchzuführen. Schauen Sie sich hier um.

Dentrasi
quelle
0

Die iptable-basierte Firewall sollte Sie vor mehreren Verbindungen mit einer IP-Adresse schützen.


quelle
0

Wenn dies jemand anderem hilft, können Sie dieses Problem manchmal mit Apache 2.2.15 oder höher mit der folgenden Konfiguration überwinden:

LoadModule reqtimeout_module modules/mod_reqtimeout.so
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500

Weitere Informationen finden Sie hier: https://httpd.apache.org/docs/2.2/mod/mod_reqtimeout.html

MrCarrot
quelle