DDoS (Distributed Denial of Service Attacks) werden im Allgemeinen auf Serverebene blockiert, oder?
Gibt es eine Möglichkeit, es auf PHP-Ebene zu blockieren oder zumindest zu reduzieren?
Wenn nicht, was ist der schnellste und häufigste Weg, um DDoS-Angriffe zu stoppen?
php
security
ddos
denial-of-service
Coderama
quelle
quelle
Antworten:
DDOS ist eine Familie von Angriffen, die wichtige Systeme im Rechenzentrum überfordern, darunter:
Überlegen Sie sich vor dem Aufbau Ihrer DDOS-Verteidigung, wie hoch der Value-at-Risk im schlimmsten Fall ist. Für einen unkritischen, kostenlos nutzbaren Dienst für eine kleine Gemeinde kann der gesamte gefährdete Wert Erdnüsse sein. Für ein kostenpflichtiges, öffentlich zugängliches, unternehmenskritisches System für ein etabliertes Unternehmen mit mehreren Milliarden Dollar könnte der Wert der Wert des Unternehmens sein. In diesem letzteren Fall sollten Sie StackExchange nicht verwenden :) Um sich gegen DDOS zu verteidigen, benötigen Sie einen detaillierten Verteidigungsansatz:
Halten Sie alle Ihre Systeme und Softwarepakete mit den neuesten Sicherheitspatches auf dem neuesten Stand - und ich meine alle:
Stellen Sie sicher, dass Sie eine gute Firewall oder Security Appliance eingerichtet und regelmäßig von einem qualifizierten Sicherheitsexperten überprüft haben . Starke Regeln für die Firewall sind eine gute Verteidigung gegen viele einfache Angriffe. Es ist auch nützlich, die für jeden offenen Dienst verfügbare Bandbreite verwalten zu können.
Verfügen Sie über gute Tools zur Netzwerküberwachung - dies kann Ihnen helfen, Folgendes zu verstehen:
Der Angriff kann einfach darin bestehen, dass legitime Website-Dienste häufig verwendet werden (z. B. "legale" URIs, die Abfragen ausführen oder Daten einfügen / aktualisieren / löschen) - Tausende oder Millionen von Anfragen, die von zehn bis Millionen verschiedener IP-Adressen kommen, bringen eine Website auf ihre Website Knie. Alternativ kann die Ausführung einiger Dienste so teuer sein, dass nur wenige Anforderungen ein DOS verursachen - denken Sie an einen wirklich teuren Bericht. Sie benötigen also eine gute Überwachung auf Anwendungsebene, um zu sehen, was gerade passiert:
Sinnvolle Einschränkungen und Grenzen in Ihrer Anwendung . Zum Beispiel könnten Sie:
Zu guter Letzt schreiben Sie ein DOS-Reaktionsplandokument und lassen es von allen relevanten Parteien intern überprüfen: Unternehmen, Management, dem SW-Entwicklerteam, dem IT-Team und einem Sicherheitsexperten. Der Prozess des Schreibens des Dokuments veranlasst Sie und Ihr Team, die Probleme zu durchdenken und sich darauf vorzubereiten, dass das Schlimmste an Ihrem freien Tag um 3 Uhr morgens eintreten sollte. Das Dokument sollte (unter anderem) Folgendes abdecken:
Abgesehen von der Präambel gibt es hier einige spezifische Antworten:
Nicht wirklich - die meisten der schlimmsten DDOS-Angriffe sind auf niedriger Ebene (auf IP-Paketebene) und werden von Routing-Regeln, Firewalls und Sicherheitsgeräten behandelt, die für DDOS-Angriffe entwickelt wurden.
Einige DDOS-Angriffe richten sich an die Anwendung selbst und senden gültige URIs und HTTP-Anforderungen. Wenn die Anzahl der Anforderungen steigt, haben Ihre Server Probleme und Sie haben einen SLA-Ausfall. In diesem Fall gibt es Dinge, die Sie auf PHP-Ebene tun können:
Überwachung auf Anwendungsebene: Stellen Sie sicher, dass jeder Dienst / jede Seite Anforderungen so protokolliert, dass Sie sehen können, was gerade passiert (damit Sie Maßnahmen ergreifen können, um den Angriff abzuwehren). Einige Ideen:
Verfügen Sie über ein Protokollformat, das Sie problemlos in ein Protokolltool (oder Excel oder ähnliches) laden und mit Befehlszeilentools (grep, sed, awk) analysieren können. Denken Sie daran, dass ein DDOS Millionen von Protokollzeilen generiert. Sie müssen wahrscheinlich Ihre Protokolle in Scheiben schneiden (insbesondere in Bezug auf URI, Zeit, IP und Benutzer), um herauszufinden, was vor sich geht, und müssen Daten generieren wie:
Protokollieren Sie die IP-Adresse jeder Anforderung. Machen Sie DNS NICHT rückgängig - ironischerweise erleichtern die Kosten dafür ein DDOS für die Angreifer
Sinnvolle Ratenbeschränkungen: Sie können Beschränkungen für die Anzahl der Anforderungen festlegen, die eine bestimmte IP oder ein bestimmter Benutzer in einem bestimmten Zeitraum stellen kann. Könnte ein legitimer Kunde mehr als 10 Anfragen pro Sekunde stellen? Können anonyme Benutzer überhaupt auf teure Berichte zugreifen?
CAPTCHA für anonymen Zugriff: Implementieren Sie ein CAPTCHA für alle anonymen Anforderungen, um zu überprüfen, ob der Benutzer eine Person und kein DDOS-Bot ist.
Am schnellsten ist es wahrscheinlich, der Erpressung nachzugeben, obwohl dies möglicherweise nicht wünschenswert ist.
Andernfalls müssen Sie sich zuerst an Ihren Hosting- und / oder CDN-Anbieter wenden und mit ihm zusammenarbeiten (wenn er Sie nicht kontaktiert hat und Sie bereits gefragt hat, was zum Teufel los ist ...). Wenn ein DDOS auftritt, wirkt es sich wahrscheinlich auf andere Kunden des Hosting-Anbieters aus, und der Anbieter steht möglicherweise unter erheblichem Druck, Ihre Website einfach zum Schutz ihrer Ressourcen herunterzufahren. Seien Sie bereit, Ihre Protokolle (alle Informationen) mit dem Anbieter zu teilen. Diese Protokolle können zusammen mit ihren Netzwerkmonitoren zusammen genügend Informationen liefern, um den Angriff zu blockieren / abzuschwächen.
Wenn Sie ein DDOS erwarten, ist es eine sehr gute Idee, Ihren Hosting-Anbieter für das Schutzniveau zu qualifizieren, das er bieten kann. Sie sollten über DDOS-Erfahrung und Tools verfügen, um dies zu vermeiden. Verstehen Sie ihre Tools, Prozesse und Eskalationsverfahren. Fragen Sie auch, welche Unterstützung der Hosting-Anbieter von seinen Upstream-Anbietern hat. Diese Dienstleistungen können höhere Vorab- oder monatliche Kosten bedeuten, behandeln dies jedoch als Versicherungspolice.
Während Sie angegriffen werden, müssen Sie Ihre Protokolle greifen und abbauen - versuchen Sie, das Muster des Angriffs herauszufinden. Sie sollten in Betracht ziehen, den anonymen Zugriff auszuschalten und die angegriffenen Dienste zu drosseln (dh das Ratenlimit der Anwendung für den Dienst zu verringern).
Wenn Sie Glück haben und einen kleinen, festen Kundenstamm haben, können Sie möglicherweise die gültigen IP-Adressen Ihrer Kunden ermitteln. In diesem Fall können Sie für kurze Zeit zu einem White-List-Ansatz wechseln. Stellen Sie sicher, dass alle Ihre Kunden wissen, dass dies geschieht, damit sie anrufen können, wenn sie von einer neuen IP aus zugreifen müssen :)
Doug McClean hat einige gute Ratschläge unter: https://stackoverflow.com/a/1029613/1395668
quelle
Nach dem PHP-Teil der Frage;
Obwohl ich mich hier nicht auf PHP verlasse, könnte es implementiert werden, muss aber all diese Möglichkeiten oder mehr berücksichtigen.
Einfaches Pseudo;
quelle
Die PHP-Ebene ist zu spät in der Anforderungskette.
Es kann eine gute Option für Sie sein, Ihren Apache-Server hinter eine Open Source-Appliance zu stellen.
http://tengine.taobao.org/ enthält einige Dokumentationen und Quellcode. Weitere Module zur DDOS-Prävention. Es ist eine Erweiterung von Nginx, sodass Sie es problemlos als Reverse-Proxy für Ihre Apache-Instanz einrichten können.
Unter: http://blog.zhuzhaoyuan.com/2012/01/a-mechanism-to-help-write-web-application-firewalls-for-nginx/ erfahren Sie, wie Sie Kollisionen mit DoS-Angriffen bekämpfen können.
Völlig vergessen, http://www.cloudflare.com ist eine der besten kostenlosen Webanwendungs-Firewalls. Sie haben kostenlose und kostenpflichtige Pläne und werden Ihren Arsch vor DDOS retten. Wir verwenden sie für viele unserer stark frequentierten Websites, nur wegen ihrer Caching-Funktionen . Es ist großartig!
quelle
Sie können dies nicht in PHP-Ebene tun. DDOS ist eine Art Angriff, der zu viele Anfragen an Ihren Webserver sendet. Ihr Webserver lehnt eine Anfrage ab, bevor er Ihr PHP-Skript aufruft.
Wenn Sie Apache verwenden, finden Sie hier einige Tipps von Apache: http://httpd.apache.org/docs/trunk/misc/security_tips.html
quelle
DDoS wird am besten von sehr teuren, speziell entwickelten Netzwerkgeräten verarbeitet. Hosts sind im Allgemeinen nicht in der Lage, DDoS-Schutz zu leisten, da sie einer relativ geringen Leistung, Erschöpfung des Zustands, begrenzter Bandbreite usw. unterliegen. Die Verwendung von iptables, Apache-Mods und ähnlichen Diensten kann in einigen Situationen hilfreich sein, wenn Sie keinen Zugriff auf DDoS-Schadensbegrenzungshardware haben oder ein DDoS-Schadensbegrenzungsdienst, der jedoch alles andere als ideal ist und Sie dennoch einem Angriffsrisiko aussetzt.
quelle
Wie wäre es mit so etwas auf PHP-Seite:
quelle
Es gibt Plugins, die Sie in Apache für ddos / dos verwenden können. Guter Start hier http://www.debianadmin.com/how-to-protect-apache-against-dosddos-or-brute-force-attacks.html
Wenn Sie auf LEMP sind, können Sie hier überprüfen. http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
Dies sind gute, kostengünstige Ausgangspunkte.
quelle
Verwenden Sie KEINEN PHP-basierten Schutz, er ist schrecklich und hat kaum Auswirkungen! Konfigurieren Sie Ihren Webserver mithilfe des Moduls limit_req ( http://nginx.org/en/docs/http/ngx_http_limit_req_module.html ) für Ratenlimitanforderungen, z. B. in Nginx.
Ich würde zwar empfehlen, CloudFlare zur Bekämpfung von Layer-4-Angriffen zu verwenden - jedoch keine Layer-7-basierten Angriffe, es sei denn, Sie sind bereit zu zahlen.
quelle
DDOS werden im Allgemeinen auf Serverebene blockiert. Aktivieren Sie den DDOS-Schutz auf Serverebene. Bitte überprüfen Sie die folgenden Hinweise zum DDOS-Schutz.
Konfigurationseinstellungen für Apache HTTP Server, mit denen DDOS-Probleme vermieden werden können:
Mit der Direktive RequestReadTimeout kann die Zeit begrenzt werden, die ein Client zum Senden der Anforderung benötigt.
Warten Sie 10 Sekunden, um die Anforderung einschließlich der Header zu empfangen, und 30 Sekunden, um den Anforderungstext zu empfangen:
Warten Sie mindestens 10 Sekunden, um den Anforderungshauptteil zu erhalten. Wenn der Client Daten sendet, erhöhen Sie das Zeitlimit für jeweils 1000 empfangene Bytes um 1 Sekunde, ohne Obergrenze für das Zeitlimit (mit Ausnahme des indirekt von LimitRequestBody angegebenen Limits):
Die KeepAliveTimeout-Direktive kann auch auf Websites gesenkt werden, die DoS-Angriffen ausgesetzt sind. Einige Websites schalten die Keepalives sogar vollständig über KeepAlive aus, was natürlich auch andere Leistungseinbußen mit sich bringt. Die Werte verschiedener Timeout-bezogener Anweisungen, die von anderen Modulen bereitgestellt werden, sollten überprüft werden.
Die Anweisungen LimitRequestBody, LimitRequestFields, LimitRequestFieldSize, LimitRequestLine und LimitXMLRequestBody sollten sorgfältig konfiguriert werden, um den durch Client-Eingaben ausgelösten Ressourcenverbrauch zu begrenzen. Optimieren Sie die MaxRequestWorkers-Direktive, damit der Server die maximale Anzahl gleichzeitiger Verbindungen verarbeiten kann, ohne dass die Ressourcen ausgehen.
quelle
Anti-DDOS- Schritte:
quelle