2009-06-22 15 views
17

Dies könnte für Serverfault etwas besser geeignet sein, aber viele Webentwickler, die nur hierher kommen, werden wahrscheinlich von möglichen Antworten auf diese Frage profitieren.sich gegen DoS-Angriffe

Die Frage ist: Wie schützen Sie effektiv selbst gegen Denial-of-Service-Attacken gegen Webserver?

ich mich gefragt, diese nach diesen article

Für jene nicht vertraut, ist hier zu lesen, was ich darüber denken Sie daran: ein DoS-Angriff alle Verbindungen zu besetzen durch wiederholtes Senden von gefälschten Header auf Ihre Server versuchen werden.

Dadurch wird Ihr Server die Grenze der möglichen simultanious Verbindungen erreichen und als Ergebnis können normale Benutzer nicht Ihre Website mehr acces.

Wikipedia bietet einige weitere Informationen: http://en.wikipedia.org/wiki/Denial_of_service

Antwort

43

Es gibt kein Allheilmittel, aber Sie können machen DoS durch einige der folgenden schwieriger greift tun:

  • Sie nicht im Namen von nicht authentifizierten Kunden teure Operationen zu tun (oder Ihre Bereitschaft zu begrenzen)
  • Drossel Authentifizierung versucht
  • Drosseloperationen im Namen eines jeden authentifizierten Client ausgeführt, und legen sie ihr Konto über eine vorübergehende Sperrung, wenn sie zu viele Dinge tun, kurz zu einer Zeit
  • haben eine ähnliche globale Drossel für alle unauthentica Sie können diese Einstellung verringern, wenn Sie einen laufenden Angriff feststellen
  • Verwenden Sie ein Flag, das Sie während eines Angriffs verwenden können, um alle nicht authentifizierten Zugriffe zu deaktivieren
  • Speichern Sie keine Objekte im Auftrag von nicht authentifizierten Clients und verwenden Sie sie ein Kontingent, um den Speicher für jeden authentifizierten Client zu begrenzen
  • Im Allgemeinen alle missgebildeten, unangemessen komplizierten oder unvernünftig großen Anfragen so schnell wie möglich ablehnen (und sie protokollieren, um die Erkennung eines Angriffs zu unterstützen)
  • Nicht verwenden ein reiner LRU-Cache, wenn Anfragen von nicht authentifizierten Clients dazu führen können, dass Dinge aus diesem Cache entfernt werden, da Sie Cache-Poisoning-Angriffen ausgesetzt sind (bei denen ein böswilliger Client nach einer Menge fragt) verschiedene selten Dinge verwendet, so dass Sie alle nützlichen Dinge aus dem Cache vertreiben und viel mehr Arbeit zu dienen, Ihre berechtigten Kunden)

Denken Sie daran, es ist wichtig zu völlig gedrosselt Anfragen ablehnen (zum Beispiel mit einem tun müssen HTTP 503: Service Unavailable Antwort oder eine ähnliche Antwort, die zu dem Protokoll passt, das Sie verwenden), anstatt gedrosselte Anforderungen in Warteschlangen einzureihen. Wenn Sie sie in die Warteschlange stellen, wird die Warteschlange nur all Ihren Speicher auffressen und der DoS-Angriff wird mindestens so effektiv sein, wie es ohne die Drosselung gewesen wäre.

Einige spezifischere Ratschläge für den HTTP-Server:

  • Stellen Sie sicher, Ihre Web-Server POST Nachrichten ohne eine begleitende Content-Length Header abzulehnen ist so konfiguriert, und Anfragen ablehnen (und drosseln den problematischen Client), die das überschreiten erklärte Content-Length und mit einem Content-Length Anträge abzulehnen, die für den Dienst unangemessen lang ist, dass die POST (oder PUT) bei
0

Kurze Antwort:

Sie können nicht schützen Sie sich gegen einen DoS.

und ich nicht zustimmen, dass es auf serverfault gehört seit DoS als Sicherheitsproblem eingestuft und werden auf jeden Fall in der Programmierung

+0

gerade gerichtet ist, weil es ein Sicherheitsproblem ist zu tun Es bedeutet nicht, dass es nicht zu ServerFault gehört. Die Programmierung adressiert nur einen kleinen Teil solcher Sicherheitsprobleme. – ProfK

+0

Natürlich können Sie vor DoS schützen, verwenden Sie einfach eine Firewall und bewerten Sie die Anzahl der Verbindungen pro IP-Adresse. Es ist jedoch viel schwieriger, sich gegen einen DDoS-Angriff zu schützen. –

1

Für diesen spezifischen Angriff (solange die Anforderung GET ist) bezogen basierend ein Load-Balancer oder ein WAF Das funktioniert nur, wenn nur vollständige Anfragen an den Webserver gesendet werden.

Die Probleme beginnen, wenn anstelle von GET POST verwendet wird (was einfach ist), weil Sie nicht wissen können, ob dies eine bösartige POST oder nur einige wirklich langsam Upload von einem Benutzer.

Von DoS per se kann man nicht wirklich Ihre Webapp wegen einer einfachen Tatsache schützen. Ihre Ressourcen sind begrenzt, während der Angreifer möglicherweise unbegrenzte Zeit und Ressourcen zur Ausführung des DoS hat. Und meistens ist es für den Angreifer billig, die erforderlichen Schritte durchzuführen. z.B. dies vor einigen 100 langsam laufenden Verbindungen erwähnt Angriff -> kein Problem

1

Asynchronous-Server, für ein, sind mehr oder weniger immun gegen diese besondere Form des Angriffs. Ich serviere beispielsweise meine Django-Apps mit einem Nginx-Reverse-Proxy, und der Angriff schien seine Funktionsweise nicht zu beeinträchtigen. Ein weiterer beliebter asynchroner Server ist lighttpd.

Dieser Angriff ist gefährlich, da er auch von einer einzelnen Maschine mit einer langsamen Verbindung ausgeführt werden kann. Häufige DDoS-Attacken schüren jedoch Ihren Server gegen eine Armee von Maschinen, und es gibt wenig, was Sie tun können, um sich vor ihnen zu schützen.