Nginx-Schutz vor DDOs-Angriffen. Schutz des Webservers aus Programmen für DDOs-Angriffe Schutz Nginx von DDOs-Angriffen

Vor einiger Zeit schrieb ich einen detaillierten Artikel über die Installation und Konfiguration des Webservers auf der Grundlage der neuesten Versionen. Dort erwähnte ich, dass dies der erste Artikel des Webserverzonenzyklus ist. Heute werde ich Ihnen so einfach und stachelige Mittel erzählen, um sich vor Einfachen zu schützen dDOs. Anschläge.

Sofort sehe ich eine Reservierung über das Wort DDOs, das hier nicht ganz angemessen ist, aber ich habe nicht mitgekommen, wie viel populärer erklärt, worüber wir sprechen. Vom vollen DDOs-Angriff können Sie sich nicht als Teil des Webserver-Setups schützen. Sie werden einfach mit dem gesamten Kanal verstopft, und der Server reagiert nicht mehr. Wenn die Servermacht nicht ausreicht, um eingehende Anforderungen zu verarbeiten und zu filtern, fällt es an, dass Sie dort tun. Für den vollwertigen Schutz gegen DDOs benötigen Sie vollwertige Fonds, die greifbare finanzielle Kosten sind. Weitere Informationen mit der Theorie nach Lesen in einem separaten Artikel.

Es versteht sich, dass der Schutz gegen DDOs der Signifikanz der Ressource angemessen sein sollte. Wenn Sie einen persönlichen Blog haben, der nicht erhebliche Gewinne bringt, zahlen Sie den Schutz gegen DDOs sinnlos. Es reicht aus, nur um eine Weile hinzunehmen oder sich selbst zu schützen. Im Allgemeinen ist es immer notwendig, die Kosten für Ausfallzeiten mit den Schutzkosten und auf der Grundlage davon zu messen, um die Durchführbarkeit einer oder einer anderen Methode zu entscheiden.

Ich werde Ratschläge geben, um vor einfachen Angriffen von Bots oder kleinen Schädlingen und Packungen zu schützen, die ohne richtige Handlungen Ihrer Website Ihre Website oder Ihren Server ohne Probleme aufstellen können. Hier ist ein einfaches Beispiel. Es gibt nicht sehr schwach, an Bord, an denen 2 Yards, 8 Gigs-Operationen und eine SSD-Festplatte sind.

Der Server ist von meinem vorherigen Artikel konfiguriert, wobei der Verweis zu Beginn führte. Auf dem Server wird die WordPress-Site mit einigen Inhalten bereitgestellt. Und wir haben einen Schädling, der auf Ihrem Server den einfachen Test von Apache auf die Leistung des Webservers ausführt:

# AB -C 50 -N 30000 "https://hl.zeroxzed.ru/"

Nur 50 parallele Ströme. Was wir auf Ihrem Webserver sehen:

Kein sehr angenehmes Bild. Der Server ist um 100% belastet. Und obwohl es normalerweise Anfragen verarbeitet und im Allgemeinen ordnungsgemäß funktioniert. Es verlangsamt sich nicht einmal, aber trotzdem ist es schlecht. Und wenn es 3 Server und 100 Streams gibt? Es gibt auch für einen Test keine Probleme, von verschiedenen Hostern auf einer virtuellen Maschine wegzunehmen, und führen solche Dinge, indem Sie den Angriff von DDOs nachahmen.

Wenn Sie im Allgemeinen überhaupt keinen Schutz auf Ihrem Server vorgenommen haben, kann jeder andere Unannehmlichkeiten ohne besondere Probleme liefern. Von einem solchen "Angriff" bereitgestellt ist nicht schwierig. Dann werde ich Ihnen sagen, wie es geht.

DDOs-Schutz mit iptables

Um vor dem einfachsten Angriff zu schützen, verwenden wir Firewall - iptables., Modulkern iPset. Um eine große Liste von IP- und selbgerechten Skripts zu speichern. Für Firewall sehen Sie meinen Artikel -. Hier werde ich nicht aufhören.

IPset-Setup-Frage, die ich in meinem Artikel von detailliert betrachtet habe. Ich rate Ihnen, das Material zu sehen, da er direkt mit diesem Artikel zusammenhängt und es ergänzt.

Wir werden also fortfahren, um unseren einfachen Schutz gegen DOS-Angriffe mit einer großen Anzahl von Verbindungen von einer IP-Adresse zu schaffen. Um damit zu beginnen, überprüfen Sie den Befehl, der uns die Anzahl der Verbindungen von jeder IP-Adresse zeigt:

# Netstat -ntu | Awk "(drucken $ 5)" | Grep -ve "(Adresse | Server | 127.0.0.1)" | CUT -D: -F1 | Sortieren | UNIQ -C | Sort -n | Sed "s / ^ [\\ t] * //"

Hier ist er ein Verletzer unserer Ruhe, der versucht, den Chef auf unserem Server zu organisieren. Zeichnen Sie nun ein Skript, das alle blockiert, die mehr als 50 gleichzeitige Verbindungen mit der Website festlegen.

#! / Bin / sh netstat -ntu | Awk "(drucken $ 5)" | Grep -ve "(Adresse | Server | 127.0.0.1)" | CUT -D: -F1 | Sortieren | UNIQ -C | Sort -n | SED "S / ^ [\\ t] * //" | Awk "(wenn (1\u003e 50 $) drucken $ ipnet erledigt.

Grundsätzlich gibt es hier nichts zu kommentieren. Wir nehmen eine Liste von Verbindungen, die gerade herausgestellt haben, die erste Spalte darin vergleichen, wenn er größer als 50 ist, dann das Ergebnis der zweiten Spalte, auf der die IP-Adresse aufgezeichnet ist, übergeben Sie in die Datei.

Lesen Sie diese Datei als Nächstes und fügen Sie alle IP-Adressen von ihm in die IPset-Liste namens MOT_CONN hinzu. Zuvor müssen Sie es erstellen. Ich sprach dagegen im Detail in dem Artikel, auf dem der Link oben führte, aber ich wiederhole hier noch einmal:

# IPset -n smower_conn iphash

Die Inhalte der Liste anzeigen kann Befehlsbefehl sein:

# IPset -l Mio_Conn

Jetzt müssen Sie iptables eine Regel hinzufügen, mit der alle Anschlüsse der angegebenen IPset-Liste gesperrt werden.

# IPTABLE -A Eingang -M Set --Match-Set MY_CONN SRC -J Drop

Nur für den Fall, dass ich Sie warne, um Ihren Zugriff auf die Serverkonsole zu überprüfen, bevor Sie iptables Regeln konfigurieren. Alles passiert, Sie können einfach falsch sein, kopieren und nicht das, was Sie brauchen.

Alles, wir blockierten alle, die Massenspam-Verbindungen zum Server erstellen. Die Grenze in 50 Verbindungen kann an der Stelle korrigiert werden, es muss möglicherweise reduziert werden, wenn jemand weniger Verbindungen von einer IP eröffnet.

Der einzige Moment, den ich sagen möchte. Ich selbst habe nicht geprüft, wie viele Verbindungen Suchbots öffnen, wenn sie an der Website ankommen. Ich vermute, dass es eindeutig nicht 50 und nicht einmal 30 ist, aber ich habe wahrscheinlich nicht geprüft. Seien Sie im Allgemeinen vorsichtig, wenn Sie dieses Tool verwenden.

Dieses Skript kann in der Krone geschoben und jede Minute ausgeführt werden. Aber persönlich würde ich das nicht tun. Ich empfehle, Serverressourcen zu überwachen und ähnliche Tools nur auszuführen, wenn der Server an der Grenze seiner Funktionen arbeitet und Sie manuell eingegeben und sichergestellt werden, dass jemand mit Verbindungen sperren wird. Danach fuhr dies einige Zeit dieses Kronenskript. Wenn DDOs stoppt, trennen Sie die Verbindung.

Es wäre schön, irgendwie automatisch die verbotene Liste zu reinigen, indem sie von denjenigen entfernen, die nicht für einen Tag mit Ihnen verbunden sind, aber dies kompliziert die Aufgabe erheblich. Sie benötigen mindestens ein Protokoll in der Blockierliste, sparen Sie die letzte Berufungszeit. Bearbeitung all dies, berechnen. Im Allgemeinen ist die Aufgabe jedoch nicht sehr schwierig, aber nicht trivial. Ich wollte das nicht tun.

Es gibt jedoch nicht sehr elegant, sondern eine einfache Lösung für dieses Problem. Erstellen Sie eine Liste von IPset mit einer bestimmten Lebensdaueraufzeichnung mit auszeit.. Zum Beispiel wie folgt:

IPset -n Mig_Conn iphash Timeout 3600

In diesem Fall wird der IP-IP-Datensatz in der IPset-Liste 3600 Sekunden oder 60 Minuten gespeichert.

Es sollte verstanden werden, dass in diesem Beispiel mit 1 IP-Adresse, um IPset zu verwenden, keinen Punkt gibt, können Sie das Mittel der IPTables selbst sofort verbieten. IPset ist nur erforderlich, wenn diese Liste mindestens Hunderte von Zeilen ist. Wenn es mehrere Dutzend Adressen gibt, genug iptables.

Analyse des Webserver-Protokollservers zum Schutz vor DDOs

Betrachten Sie ein weiteres einfaches, aber immer noch eine komplexere Art von DDOs-Angriff, wenn Typabfragen von verschiedenen IP stammen. Das heißt, ein einfaches Botnetz, vielleicht sogar mit Händen von mehreren günstigen VDS-Servern zusammengebaut. Gleichzeitige Verbindungen werden nicht viel sein, aber wenn Sie einen schweren Ort haben, und ein Angreifer wird sein schwacher Ort (z. B. eine Suche), reicht es reicht, um die Website zu setzen.

Wir werden durch iptables verboten, und die Liste der Adressen für das Verbot wird aus den Webserverprotokollen extrahiert. Dazu müssen Sie Protokollierungsanfragen an den Webserver aktiviert sein. In NginX ist dies beispielsweise für diese Einstellung eines virtuellen Hosts verantwortlich:

Access_log /Web/SITES/HL.Zeroxzed.ru/log/Access.Log Main;

Wir werden die gesamte Protokolldatei nicht jedes Mal analysieren. Diese Operation selbst erhitzt den Webserver. Nehmen Sie die letzten 1000 Zeilen aus dem Protokollprotokoll ein und berücksichtigen Sie die Anzahl der Anschlüsse von einem IP mit Typ-Inhalt, z. B. der Hauptseitenanfrage von HTTP 1.0, "GET / HTTP / 1.0". Wenn Sie ein weiteres permanentes Merkmal des BotNets feststellen, dass Sie Sie angreifen, verwenden Sie sie. Es kann derselbe Benutzeragent oder etwas anderes sein. Angenommen, wenn der Angreifer auf einen anfälligen Ort fällt, ist es die Adresse dieser Seite.

# Tail -1000 /WEB/SITES/HL.Zeroxzed.ru/log/sla-Access.log | EGREP "GET / HTTP / 1.0" | Awk "(drucken $ 1)" | Sort -n | UNIQ -C.

Das Ergebnis dieses Befehls ist ungefähr eine solche Liste.

In diesem Fall habe ich einen kleinen unterschiedlichen Zustand genutzt und hat einfach eine Liste aller derjenigen mitgebracht, die auf die Hauptseite geschlagen wurden. Aber hier sehen Sie den Übertrager, den Sie verbieten können.

Wir zeichnen dem vorherigen Skript ähnlich wie das automatische Sperren derjenigen, die zu viele Anfragen an unsere Website senden und Leistungsprobleme erstellen. Ich wiederhole noch einmal, wenn es keine Probleme mit der Produktivität gibt, empfehle ich nicht, zusätzliche Bewegungen zu erfüllen.

#! / Bin / sh old -1000 /web/sits/hl.zeroxzed.ru/log/sla-Access.log | EGREP "GET / HTTP / 1.0" | Awk "(drucken $ 1)" | Sort -n | UNIQ -C | Sort -n | HAIL -N100 | Awk "(falls (1\u003e 50) drucken $ ipnet erledigt.

Hier tun wir das gleiche wie zuvor. Diejenigen, die mehr als 50 identische Anfragen auf unserer Maske für die letzten 1000 Zeilen in der Protokolldatei erstellt haben, werden an das Verbot gesendet.

Ich ziehe auf die Zeichenfolge, an der Sie Anforderungen filtern. In diesem Fall habe ich nur ein Beispiel gezeigt. Nehmen Sie nicht an und bewerben Sie sich nicht in der Form, wie ich sehe. Ich demonstriere technische Fähigkeiten und Annäherung. Sie müssen das System an meiner Stelle konfigurieren und kalibrieren. Es ist wichtig, dies zu verstehen und die Entscheidung nicht unbedenklich anzuwenden. Es wird nur Schaden geben.

Vergessen Sie nicht, eine separate Liste in IPset zu erstellen, und fügen Sie iPables eine separate Regel hinzu. Sie können die bereits vorhandene Liste verwenden und aus dem vorherigen Beispiel hinzugefügt, aber ich empfehle, alles zu lösen. So bequemer für die spätere Analyse.

Während des DDOs-Angriffs fügen Sie diese Regel zu Cron hinzu und führen Sie jede Minute aus. Nachdem der Angriff abgeschlossen ist, kann das Skript ausgeschaltet werden. Im Prinzip können Sie ständig verlassen, aber hier müssen Sie sorgfältig nachdenken und schätzen, wie es aussehen sollte. Das Hauptprinzip ist nicht schädlich.

Banya-Bots mit falschem Referenz

194.67.215.242 - - "post /index.php http / 1.1" 200 913 " g0dfw4p1.ru."" Mozilla / 5.0 (Windows NT 6.0; RV: 34.0) Gecko / 20100101 Firefox / 34.0 "" - "

Das korrekte Empfangsfeld muss entweder HTTP oder HTTPS enthalten oder leer sein. Alles, was ansonsten ansonsten ist, können Sie den Fehlerstatus sicher blockieren oder zurücksenden. Fügen Sie der virtuellen Hostkonfiguration ungefähr dieses Design in den Abschnitt hinzu server ().

If ($ http_referer! ~ * ^ ($ | Http: // | https: //)) (Rückgabe 403;)

Überprüfen Sie danach die Nginx-Konfiguration und lesen Sie ihn erneut.

# Nginxt -t # nginx -s neu laden

Wenn Sie eine Art Bot mit einem bestimmten Referenz herausnehmen, können Sie es verbieten. Dazu können Sie einen Zustand hinzufügen oder ändern. Zum Beispiel wie folgt:

If ($ http_referer \u003d "https://bots.ru/dostanim_tebya.html") (Rückgabe 403;)

Darüber hinaus können Sie alle diese Bots mit einem einfachen Skript, um iptables zu verbieten, wie in den obigen Beispielen. Übrigens können sie sofort verboten werden, um HTTP-Anfragen anzuzeigen, auch bevor sie zu Nginx fallen, beispielsweise mit NGREP, aber dies ist eine schwierigere Aufgabe. Nicht alle wissen, wie es geht, es gibt Nuancen dort, und alles ist mit Nginx vertraut. Es wird nicht viel schwierig sein, diese Methode umzusetzen.

DDOs-Schutz mit NginX-Modulen - limit_conn und limit_req

Ich teile einen weiteren einfachen Weg, um die Last auf dem Server zu reduzieren und mit den NGINX-Modulen teilweise vor DDOs zu schützen - limit_conn. und limit_req.. Es ist nicht schwierig, sie zu konfigurieren, teilweise das Ergebnis des ersten Moduls kreuzen sich mit den ersten beiden DDOs-Schutzmethoden, die am Anfang beschrieben werden. Es ist einfacher, anpassen zu können, wenn Sie also nicht mit diesen Methoden fertig werden, können Sie diese versuchen.

Die Bedeutung dieser Module ist, dass man die gleichzeitige Menge an zulässigen Verbindungen mit der Site und einer weiteren Anzahl von Verbindungen pro Zeiteinheit einschränken kann.

Ich werde in meinem Beispiel die Anzahl der gleichzeitigen Verbindungen auf die Site von einer IP-Nummer 50 einschränken, und die Anzahl der gleichzeitigen Anforderungen an den dynamischen Inhalt von nicht mehr als 2 pro Sekunde. Dies wird ein Spritzer gelöst ( platzen.) Abfragen von bis zu 5. Ich werde erklären, wie ich dieses Spritzen versteht, da ich nicht sofort verstehe, was genau das bedeutet.

Wenn wir die Anzahl der eingestellten Anforderungen pro Sekunde überschreiten, wird ihre Ausführung verzögert, und sie sind durch die angegebene Geschwindigkeit in die Warteschlange eingebaut. Die Größe dieser Warteschlange entspricht dem Wert des Bursts. Alle Anfragen, die nicht genügend Speicherplatz in der Warteschlange sind, werden mit einem Fehler abgeschlossen. Das heißt, wenn die Anforderungen 4 pro Sekunde sind, dann wird 2 sofort durchgeführt, und ein weiterer 2 erfolgt in der Warteschlange. Und wenn es 10 ist, dann wird 2 sofort durchgeführt, 5 wird in einer Warteschlange zur Ausführung von 2 Stück pro Sekunde sein, und der Rest wird mit einem Fehler abgeschlossen.

Basierend auf diesen Bedingungen muss die Anschlussbeschränkung im Kontext installiert werden server, und der Zugriff auf dynamische Inhalte in der entsprechenden lage. Gleichzeitig sollte sich die Beschreibung der Zonen, in der die Richtlinien verwendet werden http.

Hier ist ein Beispiel für die NGINX-Konfiguration für die Umsetzung etablierter Einschränkungen, um vor DDOs-Angriffen zu schützen.

Http (... limit_conn_zone $ Binary_remote_Addr Zone \u003d Perip: 10m; limit_req_zone $ Binary_remote_addr Zone \u003d dynamisch: 10m Rate \u003d 2R / s; ... server (... limit_conn perip 50; ... location ~ \\ \\ .php $ ( ... limit_req zone \u003d dynamischer burst \u003d 5 nodeley; ...))))

Danach starten Sie NginX, und überprüfen Sie, wie die Grenzen funktionieren. Die Grenze für die Anzahl der ausgeführten dynamischen Anforderungen ist zu sehen, indem er einfach sehr schnell f5 im Browser drückt. Wenn Sie ausreichend sind, werden Sie bald ein Bild sehen

und Eintrag im Protokoll mit Fehlern:

2017/11/30 15:25:26 9773 # 9773: * 51482 Begrenzungswünsche, Überschuss: 5.664 nach Zone "Dynamic", Client: 195.91.248.43, Server: HL.Zeroxzed.ru, Anfrage: "Get / http / 2.0 ", Host:" HL.Zeroxzed.ru ", Referrer:" https://hl.zeroxzed.ru/2013/03/15/featured-image-vertical/ "

Die Grenze für die Anzahl der Verbindungen kann das gleiche Dienstprogramm überprüfen abIch erzählte in der Einführung.

017/11/30 15:38:56 9773 # 9773: * 53938 Begrenzung Verbindungen nach Zone "Perip", Client: 94.142.141.246, Server: HL.Zeroxzed.ru, Anfrage: "Get / WP-Inhalt / Uploads / 2013 /03/the-dark-kknight-rises.jpg http / 1.0, host: "hl.zeroxzed.ru"

Vergessen Sie nicht, dass der Test nicht auf einer bestimmten Seite gestartet werden muss, dann werden Sie aufgenommen, um die Leistung dynamischer Inhalte zu begrenzen, jedoch für etwas anderes. Zum Beispiel wie in meinem Beispiel auf dem Bild.

Vergessen Sie beim Ausgeben von Einschränkungen nicht, zu steuern, ob die Suchbots nicht in diese Einschränkungen fallen. Standardmäßig versuchen sie, keine erhöhte Belastung auf der Website zu erstellen. Falls gewünscht, kann der Yandex-Roboter über Roboters.txt angegeben werden, wie schnell Ihre Site scannt. Und der Roboter Google kann das gleiche durch Webmaster tun.

Fazit

Ich habe die einfachen Möglichkeiten überprüft, den Webserver nicht weniger einfache DDOs-Angriffe zu schützen, die eher ein Verwöhnen sind. Ein ernster Angriff, der den gesamten ankommenden Kanalkanal einfach füllt, wird nicht einmal unseren Schutz bemerken. Trotzdem musste ich die Wirksamkeit dieser Methoden bei der Reflexion einiger Angriffe sicherstellen.

Es gibt immer noch eine große Anzahl von Webservern, die nicht einmal von dem Dienstprogramm geschützt werden. ab :) Ich weiß, worüber ich spreche, da solche Servern auf die Arbeit kommen. Und es gibt auch viele Arten von Bots und einfachen Programmen, die im Internet und Mantel, mutige Websites gefunden werden können, die überhaupt nicht bereit sind.

Es gibt einen anderen Weg, das gleiche einfache, wie ich beschrieben, und effektiv von Bots, die keine Redirekten und Kekse verstehen. Ich habe es nicht beschrieben, weil nichts zu überprüfen, und es war einfach müde, einen Artikel zu schreiben, er stellte sich sehr groß heraus. Ich habe es lange schrieb und bearbeitet, sammelte Skripts und Einstellungen auf verschiedenen Servern und erinnern daran, dass ich einmal getan habe. Dann überprüfte er das alles separat.

Die Essenz des Schutzes ist, dass wir mit Hilfe von NginX einen bestimmten Cookies an den Benutzer ausgeben und dann die angeforderte Seite umleiten. Wenn der Bot keine Kekse oder Weiterleitungen versteht, fällt es ab. Normale Benutzer bemerken nichts. Vielleicht werde ich Ihnen später von dieser Methode erzählen und einen Artikel hinzufügen. In der Zwischenzeit. Ich bin froh, dass ich die Verdienste in den Artikeln bekommt.

Online Linux-Kurs.

Wenn Sie den Wunsch haben, lernen Sie zu erfahren, wie man sehr zugängliche und zuverlässige Systeme baut und aufrechterhält, empfehle ich Ihnen, sich kennenzulernen online-Kurs "Administrator Linux" in otus. Der Kurs gilt nicht für Anfänger, denn Sie benötigen grundlegendes Wissen über Netzwerke und installieren Linux nach virtuell. Das Training dauert 5 Monate, nach dem erfolgreiche Absolventen des Kurses Interviews von Partnern bestehen können. Was gibt Ihnen diesen Kurs:
  • Kenntnis der Linux-Architektur.
  • Modernste moderne Methoden und Datenanalyse und Datenverarbeitungswerkzeuge.
  • Die Möglichkeit, die Konfiguration für die erforderlichen Aufgaben auszuwählen, Prozesse verwalten und die Sicherheit des Systems sicherzustellen.
  • Besitz der Hauptarbeitsinstrumente des Systemadministrators.
  • Das Verständnis der Funktionen der Bereitstellung, Einstellungen und Wartung von Netzwerken, die auf der Grundlage von Linux erstellt wurden.
  • Die Fähigkeit, aufstrebende Probleme schnell zu lösen und einen stabilen und ununterbrochenen Systembetrieb zu gewährleisten.
Überprüfen Sie sich auf den einleitenden Test und erfahren Sie mehr des Software-Programms.

In unserem Blog auf Habré schreiben wir nicht nur über die Entwicklung unseres Cloud-Projekts 1Cloud, sondern erfahren auch, wie Sie bestimmte technologische Aufgaben lösen können. Im Sommer 2015 erschien ein Material auf dem Nginx-Projekt Blog, wie mit seiner Hilfe DDOs-Angriffe standhalten kann. Die Notiz schien uns interessant zu sein, also geben wir hier ihre Highlights.

EINLEITUNG: Was ist DDOs?

- "Der verteilte Angriff auf den Dienst zum Nachdenken" ist ein Versuch, einen Dienst zu erstellen, in der Regel eine Website, in der Regel, unzugänglich, indem er seinen Verkehr aus einer Vielzahl von Quellen bombardiert. Infolgedessen funktioniert der Server, der es dient, einfach normal arbeitet, ohne mit Überlastungen fertig zu werden.

Das Standarddiagramm in diesem Unternehmen besteht darin, das System durch eine solche Anzahl neuer Verbindungen und Anfragen zu "Folter", damit das Netzwerk aufhört, mit ihrem Bach fertig zu werden, oder ist so langsam geworden, dass es unmöglich ist, damit zusammenzuarbeiten.

Spezifikationen DDOs-Angriffe

Auf Anwendungsebene erfolgt der DDOs-Angriff von speziellen Programmen (Bots), die Schwachstellen in einem bestimmten System verwenden können. Beispielsweise kann ein System, das durch Steuerung einer großen Anzahl von parallelen Verbindungen nicht geschärft wird, durch Erstellen einer großen Anzahl solcher "Anschlüsse" deaktiviert werden. Im aktiven Zustand können sie von Zeit zu Zeit aufrechterhalten werden, setzten sich durch ihre kleinen Verkehrsmengen auf. Eine andere Möglichkeit besteht darin, das System mit einer großen Anzahl von Anfragen zu füllen oder diese Anfragen ausreichend schwer zu erreichen. Es geht nicht um tatsächliche Verbindungen, daher durch Bots ist es sehr einfach, eine große Anzahl von Abfragen zu senden und schnell viele neue Verbindungen zu erstellen.

Nachfolgend finden Sie die technischen Merkmale von DDOs-Angriffen, für die sie anerkannt werden können, und gegebenenfalls, um mit ihnen fertig zu werden:

  • Der Verkehr stammt in der Regel von einer festen Anzahl von IP-Adressen, die zum Angriff bestimmt sind. Infolgedessen macht jede solche Adresse eine anormale Anzahl von Verbindungen und Abfragen, die nicht für einen echten Benutzer typisch sind. Zum Referenz: Es ist nicht immer eine ähnliche Ausrichtung, die einen DDOs-Angriff anzeigt. Ähnliche Aktionen können beobachtet werden, wenn der Fortschritt (anonymous) Proxy verwendet wird, da seine IP-Adresse auf dem Server verwendet wird, um jeden Benutzer zu identifizieren. Die Anzahl der Anlässe und Anfragen aus einem anonymen Proxy wird jedoch zwar kleiner als beim Angriff sein.
  • Da es sich um Bots handelt, um den Verkehr zu produzieren, "Überhitzung" Server, ist die Intensität dieses Verkehrs viel höher als der echte Benutzer kann produzieren.
  • Der Benutzer-Agent-Client-Anwendungsheader wird manchmal in einer nicht standardmäßigen Konfiguration angezeigt.
  • Manchmal kann ein Angriff vom Referen-Header erkannt werden.

Verfügt über Nginx und Nginx Plus, um DDOs-Angriffe zu bekämpfen

Viele Merkmale von Nginx und Nginx Plus können unschätzbare Hilfe bei der Lösung von Fragen zur Verfügung stellen, wie Sie den DDOs-Angriff bewältigen können. Es funktioniert in zwei Richtungen: durch die Verwaltung des ankommenden Verkehrs und durch Kontrolle der Verteilung durch interne Server.
Frequenzgrenze abfragen
Sie können die ankommende Anforderungsfrequenz über nginx und nginx plus an das Wert charakteristisch für echte Benutzer anpassen. Beispielsweise glauben Sie, dass Benutzer alle zwei Sekunden Ihre Hauptseite eingeben. Sie können das Gerät an diese Häufigkeit von Anforderungen an die Seite - 30 pro Minute konfigurieren.

Limit_req_zone $ Binary_remote_addr Zone \u003d 1: 10m Rarate \u003d 30R / m; Server (... location /login.html (limit_req zone \u003d eins; ...))
Die Richtlinie von limit_req_zone generiert die gesamte Speicherzone, um die festgelegte Anzahl von Anforderungen für einen angegebenen Schlüssel zu speichern. In diesem Fall ist dies eine Client-IP-Adresse ($ Binary_remote_addr). Die Limit_REQ-Richtlinie in block /login.html bezieht sich auf diese Speicherzone.

Einschränkung der Anzahl der Verbindungen
Sie können Einschränkungen für die Anzahl der Verbindungen auferlegen, die von der IP-Adresse des Clients stammen können. Wieder und schätzen ihr Wert für einen echten Benutzer. Beispielsweise können Sie nicht mehr als 10 Tore von einem IP in den Bereich / den Speicher Ihrer Site installieren.

Limit_conn_zone $ Binary_remote_addr Zone \u003d adr: 10m; Server (... Standort / Speicher / (Limit_CONN ADDR 10; ...))
Wie im vorherigen Beispiel erzeugt die Richtlinie limit_conn_zone eine gemeinsame Fügenspeicherzone zum Speichern von Anforderungen für eine bestimmte Taste - $ Binary_remote_Addr-Client-IP-Adresse. Limit_Conn im Body / Store bezieht sich auf diese Speicherzone und legt die Anschlüsse der Restriktion 10 von jedem Client-IP fest.

Langsame Verbindungen schließen
Sie können die Verbindungen schließen, die die Daten zu selten schließen, was ein Zeichen sein kann, dass ihr Hauptziel während der gesamten langen Zeit offen ist und neue Verbindungen behindert. Diese Art von Angriffsprogramm wird Slowloris bezeichnet. Die Client_Body_Timeout-Richtlinie steuert die NGINX-Wartezeit zwischen den Datensätzen im Körper des Kunden. Die Client_Header_Timeout-Richtlinie übernimmt dasselbe für Headers. Standardmäßig beträgt in beiden Fällen 60 Sekunden. Im folgenden Beispiel wird dieses Intervall um 5 Sekunden eingestellt.

Server (client_body_timeout 5s; client_header_timeout 5s; ...)

IP-Adressen in "Black List" herstellen
Wenn Sie die zum Angriff verwendete IP erkennen, können Sie sie der "Black List" mithilfe der Richtlinie von NginX und NginX und der NginX-Richtlinie hinzufügen, sondern auf Anforderungen von diesen Adressen nicht mehr reagiert. Wenn Sie beispielsweise herausfinden, dass der Angriff aus der Region stammt 123.123.123.1 über die Adresse 123.123.123.16:

Standort / (Ablehnung 123.123.123.0/28; ...)
Wenn es mehrere solcher Adressen gibt:

Standort / (Ablehnung 123.123.123.3; verweigern 123.123.123.5; dem 19.123.123.7; ...)

Erstellen einer zulässigen Liste von IP-Adressen
Angenommen, der Zugriff auf Ihre Site oder Anwendung ist für ein vorkannter Bereich von IP-Adressen geöffnet. Sie können es registrieren, indem Sie die Richtlinien zulassen und ablehnen. Sie können beispielsweise nur von den lokalen Netzwerkadressen Zugriff angeben.

Standort / (Erlaube 192.168.1.0/24; alles ablehnen; ...)
IP-Adressen, die die Bedingungen des installierten Bereichs nicht erfüllen, werden blockiert.

Caching, um Verkehrssprünge zu vermeiden
Sie können NginX und NginX Plus so konfigurieren, dass sie den Verkehrssprüngen während des Angriffs durch Zwischenspeicherung aufnehmen und die Parameter weitergeben, sie ignorieren die Rendite-Abfragen. Dies kann durch die folgenden Optionen erfolgen:

Der Aktualisierungsparameter in proxy_cache_use_stale meldet nginx, dass, wenn er, um veraltete Objekte im Cache aktualisieren zu müssen, nur eine Anforderung gesendet und den Zugriff auf solche Objekte für Kunden auf dem Laufenden, bis das Update von den internen Servern empfangen wird.

Der vom Proxy_Cache_Key definierte Taste besteht in der Regel aus integrierten Variationen (Standardschlüssel, $ Proxy_Host $ Request_uri hat drei Variationen). Wenn der Wert $ Query_String beinhaltet, kann der Angriff, der seltene Abfragelinien sendet, zu übermäßiger Caching führen. Es wird nicht empfohlen, diese Option auf den Schlüssel aufzunehmen, wenn kein dringender Bedarf vorliegt.

Abfrage sperren
Sie können Nginx und NginX Plus konfigurieren, um die folgenden Arten von Anforderungen zu blockieren:
  • Anfragen an eine bestimmte URL, die gefährdet sein kann.
  • Anfragen, an denen Benutzer-Agent-Header einen Wert haben, der nicht mit dem üblichen Clientverkehr entspricht.
  • Anfragen, in denen Verspreche-Header als in Bezug auf Angriff definiert werden können.
  • Anfragen, in denen andere Schlagzeilen verdächtig erscheinen.
Wenn Sie beispielsweise entscheiden, dass der Angriff auf URL /FOO.php richtet, können Sie alle Anfragen auf der Seite blockieren:

Location /foo.php (alles ablehnen;)
Wenn Sie herausfinden, dass die DDOs-Angriffen einen FOO- oder Balkenwert in den Anwender-Agenten-Header haben, können Sie sie blockieren:

Standort / (wenn ($ http_user_agent ~ * foo | bar) (Rückgabe 403;) ...)
Nach demselben Prinzip können Sie mit anderen Schlagzeilen zusammenarbeiten, die die Werte haben, die die Androhung eines Angriffs angeben.

Verbindungsverbindungen mit internen Servern anschließen
Nginx und nginx plus können gleichzeitig mit einer großen Anzahl von Verbindungen gesteuert werden, als die internen Server sich selbst ermöglichen. Mit NginX Plus können Sie die Anzahl der Verbindungen zu jedem der internen Server einschränken. Angenommen, Sie möchten die Anzahl der Verbindungen auf zwei interne Server der Gruppe beschränken, die der Website dienen, Nummer 200:

Upstream-Website (Server 192.168.100.1:80 Max_Conns \u003d 200; Server 192.168.100.2:80 Max_Conns \u003d 200; Warteschlange 10 Timeout \u003d 30s;)
Der Parameter Max_Conns setzt die maximale Anzahl von Verbindungen, die von Nginx Plus für jeden Server geöffnet werden. Die Warteschlangenrichtlinie begrenzt die Anzahl der Anforderungen in der Warteschlange, wenn alle Gruppenserver ihr Limit überschreiten. In derselben Zeile ist die Zeit in der Warteschlange in der Warteschlange - 30 Sekunden registriert.

Reichweite
Es gibt eine Angriffsoption, in der der Range-Funktionskopf mit einem sehr großen Wert gesendet wird, der zu einem Pufferüberlauf führen kann. Um herauszufinden, wie Nginx und Nginx Plus mit dieser Art von Angrabung umzugehen, raten wir Ihnen, Ihnen zu lesen.
So verwalten Sie mit großen Downloads
DDOs-Angriffe führen normalerweise zu einem kritischen Startniveau. Lesen Sie, wie Sie Nginx und Nginx Plus unterrichten und mit diesem Problem umgehen können, können Sie.

DDOs Angriffserkennung

Bisher haben wir diskutiert, wie Sie Nginx und Nginx Plus verwenden können, um die Auswirkungen von DDOs-Angriffen zu erweichen. Aber ist es möglich, den Angriff selbst mit diesen Servern selbst zu erkennen? Das NginX Plus-Statusmodul liefert detaillierte metrische Verkehrsaufzeichnungen, die über interne Server verteilt wurden. Mit diesem Tool können Sie den abnormalen Verkehrsstatus erkennen. Nginx plus hat die Funktion der Site Management-Bedienfeldfunktion, in der die Diagramme des aktuellen Status seines Systems angezeigt werden (hier kann hier angezeigt werden: Demo.nginx.com/status.html). Die gleichen Indikatoren sind über die API verfügbar, sie können in ihr eigenes Monitoring-System oder ein Drittanbieter-Überwachungssystem eingebettet sein und den Verkehr in der Zeit verfolgen, warnen ungewöhnliche Bedingungen.

Zusammenfassung

Nginx und nginx plus können unschätzbare Unterstützung bei der Lösung von Fragen zur Verfügung stellen, wie Sie DDOs-Angriffe aufhalten können. Gleichzeitig hat Nginx Plus zusätzliche Eigenschaften, um sich gegen diese Art von Angriffen zu schützen, die ihr Aussehen gewarnt.

Sie können helfen und etwas Geld vor Ort übersetzen.



Berücksichtigen Sie den Schutz des NGIX-Webservers, der auf dem Betriebssystem Ubuntu (grundsätzlich - beliebige Linux) ausgeführt wird.

Es gibt zwei Arten von DOS / DDOs-Angriffen, die auf der Idee von Flut basieren, dh Opfer von Opfern mit einer großen Anzahl von Paketen.

Flut ist anders: ICMP-Flut, Syn-Flut, UDP-Flut und HTTP-Flut. Moderne DOS-Bots können alle diese Angriffen gleichzeitig verwenden, sodass Sie von jedem von ihnen einen angemessenen Schutz kümmern.

  • ICMP-Flut
  • Primitive Methode der Verstopfung der Bandbreite und Erstellen von Lasten auf dem Netzwerkstapel durch das Monoton-Paket von Anfragen für ICMP-Echo (Ping). Es wird durch Analyse der Verkehrsströme in beide Richtungen festgelegt: Während eines ICMP-Hochwasserangriffs sind sie fast identisch. Eine praktisch schmerzlose absolute Schutzmethode basiert auf der Deaktivierung von Antworten auf ICMP Echo-Anfragen:

    speichern und anwenden:

    Sudo sysctl -p.
  • Syn-Flut.
  • Eine der allgemeinen Möglichkeiten ist nicht nur, den Kommunikationskanal zu erzielen, sondern auch den Betriebssystem-Netzwerkstapel in einen solchen Zustand einzugeben, wenn er keine neuen Verbindungsanforderungen mehr erhalten kann.
    Basierend auf einem Versuch, eine große Anzahl von simultanen TCP-Verbindungen über das SYN-Paket mit einer nicht vorhandenen Renditeadresse zu initialisieren. Nach mehreren Versuchen, ein Antwort-ACK-Paket an eine unzugängliche Adresse zu senden, setzen die meisten Systeme eine nicht identifizierte Verbindung zur Warteschlange. Und erst nach N-Th ist die Verbindung geschlossen.
    Da der ACK-Paketstrom sehr groß ist, ist die Warteschlange vollständig abgeschlossen, und der Kernel gibt eine Weigerung, eine neue Verbindung zu öffnen.
    Die intelligentesten DOS-Bots analysieren auch das System, bevor Sie den Angriff starten, um Anfragen nur zur Eröffnung von Vital Ports zu senden. Ich identifiziere einfach einen solchen Angriff: Es reicht aus, um zu versuchen, eine Verbindung mit einem der Dienste herzustellen.

    Defensive Ereignisse enthalten in der Regel:
    Erhöhte Warteschlange "halböffnete" TCP-Verbindungen,
    Reduzierung der Abzugszeit "halböffnende" Verbindungen,
    TCP-Syncookies-Mechanismus einschalten,
    Einschränkung der maximalen Anzahl von "halböffentlichen" Anschlüsse von einem IP an einen bestimmten Anschluss "

  • UDP-Flut
  • Die übliche Bandbreitensteigmethode. Basierend auf der unendlichen Prämisse von UDP-Paketen in den Häfen verschiedener UDP-Dienste. Leicht beseitigt durch Abschneiden solcher Dienste von der Außenwelt und setzen Sie das Limit auf die Anzahl der Verbindungen pro Zeiteinheit zum DNS-Server auf der Gateway-Seite ein:

    IPTABLE -I INPUT -P UDP --DPort 53 -J Drop -M iPlimit --Plimit-über 1

    Höchstwahrscheinlich müssen Sie den Kern widerlegen. Aber es ist schon .......

  • HTTP-Flut
  • Eine der beliebtesten Methoden der Überschwemmung. Basierend auf dem endlosen Senden von Get-Anfragen an den 80.-Anschluss, um den Webserver hochzuladen, damit alle anderen Anforderungen nicht verarbeitet werden können.
    Es passiert, dass der Zweck der Flut nicht zur Wurzel des Webservers wird, sondern eine der Skripts, die die ressourcenintensiven Aufgaben ausführen oder mit der Datenbank arbeiten. In jedem Fall dient der Indikator des Startangriffs ein ungewöhnlich schnelles Wachstum der Webserverprotokolle.
    HTTP-Flood-Steuerungsmethoden umfassen das Einrichten eines Webservers und der Datenbank, um den Effekt des Angriffs zu verringern, sowie zum Screen-Dos-Bots mit verschiedenen Techniken.

    Erstens sollten Sie die maximale Anzahl von Verbindungen gleichzeitig in die Datenbank erhöhen.
    Zweitens, um einen einfachen und produktiven Nginx an den Apache-Webserver zu installieren, erhebt er Anforderungen und erteilt Statik. Dies ist eine Lösung von der Liste "MUSS haben", die nicht nur den Effekt von DOS-Angriffen verringert, sondern den Server ermöglicht, große Belastungen standhalten.
    Beispielsweise:

    Nano /etc/ginx/ginx.conf.
    # Erhöhen Sie die maximale Anzahl der verwendeten Dateien
    Arbeiter_rlimit_nofile 8192;
    ## Anzahl der Workflows, es wird empfohlen, die Anzahl der Kerne anzugeben
    Arbeiter_Prozessen 1;
    # Reduziert die Anzahl der GetTimefay-Systemaufrufe (), das zu einer Zunahme der Produktivität führt
    Timer_resolution 100ms;
    # Richtlinie setzt die Priorität der Workflows von -20 bis 20 (eine negative Zahl bedeutet höhere Priorität).
    Arbeiter_Priorität -5;

    veranstaltungen (
    # Erhöhen Sie die maximale Anzahl von Verbindungen
    Arbeiter_Connections 2048;
    # Verwenden Sie ein effektives Epoll-Verfahren zur Verbindungsverarbeitung
    Verwenden Sie Epoll;
    }
    http (
    # SendFile () aktivieren. Die Verwendung von sendFile () speichert Systemaufrufe, reduziert die Anzahl der Datenkopierungen
    SendFile auf;
    Output_buffers 2 64k;

    gzip auf;
    gzip_min_length 1100;
    gzip_buffers 64 8k;
    gzip_comp_level 3;
    gzip_http_version 1.1;
    Gzip_proxied jeder;
    GZIP_TYPES-Text- / Normalanwendung / XML-Anwendung / X-Javascript-Text / CSS;
    # Schalten Sie das Timeout an der Schließung von Hebes-Alive-Verbindungen aus
    keepalive_timeout 0;
    # Geben Sie keine Version von NginX in der Antwortheader an
    Server_tokens off;
    # Tropfen die Zeiten
    reset_timedout_connection auf;
    Die Richtlinie beschreibt die Zone, in der der Zustand der Sitzungen gespeichert sind. Die Sitzungswerte werden von einer bestimmten Variablen bestimmt.
    limit_req_zone $ Binary_remote_addr Zone \u003d 1: 10m Rate \u003d 1R / s;

    server (
    Hören Sie 80 Standardeinstellung;
    server_name localhost;

    access_log /var/log/nginx/localHost.Access.log;

    lage / (
    root / var / www /;
    Index Index.html Index.htm Index.php;
    Open_file_cache max \u003d 1024 inaktiv \u003d 600s;
    Open_File_Cache_Valid 2000s;
    Open_file_cache_min_uses 1;
    Open_File_Cache_Errors auf;
    }
    location ~ \\ .php $ (
    limit_req zone \u003d ein burst \u003d 5;
    Fastcgi_pass Unix: //tmp/php5-fpm.sock;
    Fastcgi_Index Index.php;
    Fastcgi_param script_fileename / var / www $ Fastcgi_script_name;
    Fastcgi_params einschließen;
    Fastcgi_Hide_Header "Cache-Control";
    }
    ort ~ /.ht (
    Alles verweigern;
    }
    Läuft max; # Beachtung!!! Diese Zeichenfolge läuft aus!
    Add_header Letzte-modifizierte $ SENT_HTTP_EXPIRES;
    }


    Bei Bedarf können Sie das NGNX-Modul NGX_HTTP_LIMIT_REQ_MODULE verwenden, der die Anzahl der gleichzeitigen Verbindungen von einer Adresse begrenzt. Die ressourcenintensiven Skripts können vor Bots mit Verzögerungen, Schaltflächen "Klicken Sie auf mich geschützt werden, schreiben Sie Cookies und andere Techniken, um die" Menschheit "zu überprüfen.

    Um während des Zusammenbruchs des DDOs-Storms auf dem System nicht in eine hoffnungslose Stelle zu fallen, ist es notwendig, sie gründlich auf eine solche Situation vorzubereiten:

    1. Servern, die direkten Zugriff auf das externe Netzwerk haben, müssen für einen einfachen und rohen Remote-Neustart vorbereitet sein (SSHD speichert den Vater der russischen Demokratie). Der große Vorteil ist das Vorhandensein einer zweiten, administrativen Netzwerkschnittstelle, über die Sie auf den Server in einem Stabbard des Hauptkanals zugreifen können.
    2. Software (Software), die auf dem Server verwendet wird, sollte immer auf dem neuesten Stand sein. Alle Löcher sind empfohlen, Updates werden installiert (übrigens eine einfache Beratung, die viele nicht folgen). Es wird vor DOS-Angriffen, die Bedienungswanzen in Dienstleistungen angeht, schützen.
    3. Alle Hörnetzdienste, die für die Verwaltungsnutzung bestimmt sind, sollten von der Firewall von allen, die nicht Zugriff auf sie haben sollten, verborgen sein. Dann kann der Angreifer sie nicht für DOS-Angriffe oder GRUUTFORS verwenden.
    4. Bei Annähern an den Server (nächster Router) muss ein Verkehrsanalysesystem installiert sein (NetFlow to Help), mit dem Sie den Anfangsingreffer erfahren können und Maßnahmen ergreifen, um es rechtzeitig zu verhindern.

    Wiederholen Sie die Probe in zehn Sekunden

    Speichern und anwenden:

    Sudo sysctl -p.

    Alle in diesem Thema gezeigten Techniken zielen darauf ab, die Wirksamkeit von DDOs-Angriffen zu reduzieren, die die Ressourcen der Maschine ausgeben möchten.
    Von der Flut, dem Kanalmüll, ist es fast unmöglich, sich zu verteidigen, und das einzige Richtige, aber nicht immer eine machbare Methode ist, "den Angriff der Bedeutung berauben".
    Wenn Sie einen wirklich breiten Kanal zu Ihrer Verfügung haben, der einen kleinen Botnet-Traffic problemlos verpassen lässt, dann ziehen Sie an, dass von 90% Angriff Ihres Servers geschützt ist. Es gibt einen anspruchsvolleren Weg zum Schutz.
    Es basiert auf der Organisation eines verteilten Computernetzwerks, das viele doppelte Server umfasst, die an verschiedene Hauptkanäle angeschlossen sind.
    Bei der Berechnung der Energie- oder Kanalbandbreite endet alle neuen Clients an einen anderen Server (oder schrittweise "auf Servern auf dem Rund-Robin-Prinzip) umgeleitet werden.
    Dies ist eine sehr teure, aber sehr hartnäckige Struktur, um fast unwirklich auszufüllen.
    Eine weitere oder weniger wirksame Entscheidung besteht darin, einen teuren Cisco Traffic Anomaly Detector und Cisco Guard zu kaufen.
    Wenn Sie in einem Bündel arbeiten, können sie den Startangriff unterdrücken, aber wie die meisten anderen Lösungen, die auf Lern- und Analysebedingungen basieren, sind Fehlfunktionen.
    Daher sollten Sie darüber nachdenken, ob Sie Zehntausende von Dollars an einem solchen Schutz ausschlagen möchten.

    "Zensiert, es begann. Was zu tun?"

    Die Hauptsache ist keine Panik. Vor dem unmittelbaren Anfang des Anfalls von Bots "erhitzt", wodurch der Fluss von Paketen mit der angegriffenen Maschine schrittweise erhöht wird. Es ist wichtig, den Moment zu fangen und aktive Aktionen zu beginnen. Es hilft bei dieser permanenten Überwachung des mit dem externen Netzwerk angeschlossenen Routers (NetFlow-Graph-Analyse). Auf dem Server-Opfer ist es möglich, den Beginn des Angriffs angemessen zu ermitteln.

    Das Vorhandensein von SYN-Flut ist leicht eingestellt - durch Zählen der Anzahl der "halböffentlichen" TCP-Verbindungen:

    Werte, mehrmals höher als der Durchschnitt, geben den Anschluss an, um zu denken. Zeigen Sie anschließend die Liste der IP-Adressen an, aus denen die Verbindungsanforderungen gehen:

    Stellen Sie sicher, dass die ETH1-Schnittstelle vorhanden ist. Überprüfen Sie es einfach - ifconfig. In diesem Fall ersetzen Sie Ihre.

    Der Indikator ist ein großer monotoner Strom (und nicht mit nützlicher Informationen) von Paketen aus verschiedenen IPS, die auf einen Anschluss / Dienst (z. B. ein Webserverwurzel oder ein bestimmtes CGI-Skript) abzielen.
    Schließlich ermittelt, beginnend, aus IP-Adressen abzutreten (es gibt viel mehr Effekt, wenn Sie es auf dem Router tun):

    Dies gibt Ihnen einige Chancen (sehr klein; oft die Quell-IP-Adresse eingestellt), die Sie verwenden sollten, um den Anbieter / Host zu kontaktieren (mit den Log-Server-Protokollen, die an das Protokoll, Kernel, Firewall und die Liste von IP angehängt sind Adressen identifiziert).
    Die meisten von ihnen ignorieren natürlich diese Nachricht (und das Hosting mit der Zahlung des Verkehrs wird auch glücklich sein - der DOS-Angriff wird ihre Gewinne bringen) oder schalten Sie einfach Ihren Server aus. In jedem Fall sollte jedoch notwendigerweise erfolgen - effektiver Schutz gegen DDOs ist nur auf Kofferraumkanälen möglich. Allein Sie werden mit kleinen Angriffen auf die Abnahme von Serverressourcen umgehen, werden jedoch vor einem mehr oder weniger ernsthaften DDOs "Ohm.

    Sie müssen nicht alles von hier aus kopieren und in die Konfiguration einfügen. Überprüfen Sie zuerst den Parameter, der Parameter ist bereits definiert, und es lohnt sich, neu zu definieren. beispielsweise

    Cat /etc/sysctl.conf | Grep Net.IPV6.conf.LO.DISABLE_IPV6

    Wir senden zwei Server: Frontend (wird die Rolle des Filterservers ausführen: nginx, iptables, naxsi \\ moducurity, fail2ban uswb) und Backend (Schutzwebanwendung). In diesem Artikel werden praktische Beispiele der böswilligen Verkehrsfilterung des Frontendservers beschrieben.

    1. Optimieren Sie das Betriebssystem

    Das erste, was das Betriebssystem auf dem Frontend-Server für schwere Lasten optimiert. Bearbeiten Sie die Datei /etc/sysctl.conf:

    ## Optimierung des RAM
    kernel.shmmax \u003d xxx.
    kernel.shmall \u003d xxx.

    ## Optimierung des Nachrichtenausgangs-Subsystems
    kernel.msgmnb \u003d 65536.
    kernel.msgmax \u003d 65536.

    ## Optimierung der Arbeit mit Swap
    vm.swapping \u003d 10.
    vm.dirty_ratio \u003d 40.
    vm.dirty_background_ratio \u003d 5.

    ## Optimierung des Subsystems der Arbeit mit Dateien ("zu viele offene Dateien fix")
    Fs.File-Max \u003d 2097152

    ## Netzwerksubsystemoptimierung
    net.ipv4.ip_forward \u003d 1.
    net.core.somaxconn \u003d 65535.
    net.netfilter.nf_conntrack_max \u003d 10000000.
    net.netfilter.nf_conntrack_tcp_loose \u003d 0.
    net.netfilter.nf_conntrack_tcp_timeout_Establed \u003d 1800.
    net.netfilter.nf_conntrack_tcp_timeout_close \u003d 10.
    net.netfilter.nf_conntrack_tcp_timeout_close_wait \u003d 10.
    net.netfilter.nf_conntrack_tcp_timeout_fin_wait \u003d 20.
    net.netfilter.nf_conntrack_tcp_timeout_last_ack \u003d 20.
    net.netfilter.nf_conntrack_tcp_timeout_syn_recv \u003d 20.
    net.netfilter.nf_conntrack_tcp_timeout_syn_sent \u003d 20.
    net.netfilter.nf_conntrack_tcp_timeout_time_wait \u003d 10.
    net.ipv4.tcp_congestion_control \u003d Hybla.
    net.ipv4.tcp_slow_start_after_idle \u003d 0.
    Net.IPV4.IP_LOCAL_PORT_RANGE \u003d 1024 65000
    net.IPV4.IP_NO_PMTU_DISC \u003d 1.
    net.IPV4.Route.Flush \u003d 1.
    net.IPV4.Route.max_size \u003d 8048576.
    net.ipv4.icmp_echo_ignore_broadcasts \u003d 1.
    net.ipv4.icmp_ignore_bogus_error_responses \u003d 1.
    Net.IPV4.TCP_MEM \u003d 65536 131072 262144
    net.ipv4.udp_mem \u003d 65536 131072 262144
    Net.IPV4.TCP_RMEM \u003d 4096 87380 33554432
    Net.ipv4.udp_rmem_min \u003d 16384.
    Net.IPV4.TCP_WMEM \u003d 4096 87380 33554432
    Net.ipv4.udp_wmem_min \u003d 16384.
    net.ipv4.tcp_max_tw_buckets \u003d 1440000.
    net.ipv4.tcp_tw_recycle \u003d 0.
    net.ipv4.tcp_tw_reuse \u003d 1.
    net.ipv4.tcp_max_orphans \u003d 400000.
    net.ipv4.tcp_window_scaling \u003d 1.
    net.ipv4.tcp_rfc1337 \u003d 1.
    net.ipv4.tcp_syncookies \u003d 1.
    net.ipv4.tcp_synack_retries \u003d 1.
    net.ipv4.tcp_syn_retries \u003d 2.
    net.ipv4.tcp_max_syn_backlog \u003d 16384.
    net.ipv4.tcp_timestamps \u003d 1.
    net.ipv4.tcp_sack \u003d 1.
    net.ipv4.tcp_fack \u003d 1.
    net.ipv4.tcp_ecn \u003d 2.
    Net.IPV4.TCP_FIN_TIMEOUT \u003d 10.
    net.iPv4.tcp_Heakalive_time \u003d 600.
    net.IPV4.tcp_Heakalive_intvl \u003d 60.
    net.iPv4.tcp_Heakalive_Probes \u003d 10.
    net.ipv4.tcp_no_metrics_save \u003d 1.
    net.ipv4.conf.all.accept_Redirects \u003d 0.
    net.ipv4.conf.all.send_Redirects \u003d 0.
    net.ipv4.conf.all.accept_source_route \u003d 0.
    net.ipv4.conf.all.rp_filter \u003d 1.

    Die Werte des Kernel.SHMAX- und Kernel.SHMALL-Parameters werden basierend auf dem RAM-Volumen berechnet. Um zu zählen, können Sie das Skript verwenden:

    #! / bin / bash # Simple shmsetup-Skript Page_size \u003d `getconf Page_Size 'phys_pages \u003d` getconf _Pys_pages' shmall \u003d `expr $ physide_pages / 2 'shmmax \u003d` expr $ shmall \\ * $ Page_size` echo kernel.shmmax \u003d $ shmmax echo kernel.shmall \u003d $ shmall

    Diese Parameter werden den Betrieb des Systems für hohe Belastungen optimieren. Die Anwendung von Änderungen erfolgt vom Befehl "systle -p" oder neu startes System.

    2. iptables.

    Filtern Sie die Angriffe auf das Netzwerk \\ Transport-Level mit iptables:

    ## Ungültige Pakete blockieren
    Iptables -a input -i eth0 -m condtrack - utstate Invalid -j Drop
    ## Neue Pakete blockieren, die keine Syn-Flag haben
    Iptables -a input -i eth0 -p TCP! --Syn -M Condtrack - CCTState New -j Drop
    ## Nicht-Standard-MSS-Werte blockieren
    Iptables -a input -i eth0 -p tcp -m conntrack - UctState New -m TCPMSS! --MMS 536: 65535 -J Drop
    ## Blockieren von fragmentierten Paketen
    IPTABLE -A Eingang -I ETH0 -F -J Drop
    ## Blockieren von Paketen mit falschen TCP-Flaggen
    IPTAles -A Input -I ETH0 -P TCP - TCP-Flags FIN, SYN, RST, PSH, ACK, URG NONS-JOPL
    Iptables -a input -i eth0 -p TCP - TCP-Flags Flosse, SYN-Flosse, syn -j-Drop
    IPTABLE -A Input -I ETH0 -P TCP - TCP-Flags SYN, RST SYN, RST -J Drop
    IPTABLE -A-Eingang -I ETH0 -P TCP - TCP-Flags SYN, FIN-SYN, FIN -J Drop
    Iptables -a input -i eth0 -p TCP - TCP-Flaggenflosse, RST FIN, RST -J Drop
    Iptables -a input -i eth0 -p TCP - TCP-Flags FIN, ACK FIN -J Drop
    IPTAles -A Input -I ETH0 -P TCP - TCP-Flags ACK, URG-URG -J Drop
    IPTAles -A Input -I ETH0 -P TCP - TCP-Flags ACK, FIN FIN -J Drop
    IPTAles -A Input -I ETH0 -P TCP - TCP-Flags ACK, PSH PSH -J -D
    Iptables -a input -i eth0 -p TCP - TCP-Flaggen alle All-J Drop
    IPTAles -A Input -I ETH0 -P TCP - TCP-Flags alle nicht -j Drop
    Iptables -a input -i eth0 -p TCP - TCP-Flaggen Alle Flosse, PSH, Urg -J Drop
    IPTABLE -A Input -I ETH0 -P TCP - TCP-Flaggen Alle SYN, FIN, PSH, URG -J Drop
    IPTAles -A Input -I ETH0 -P TCP - TCP-Flags All Syn, RST, ACK, FIN, URG -J Drop
    ## Einkaufsöffnungen.
    Iptables -n port-scanning
    Iptables -a port-scans -p TCP - TCP-Flags SYN, ACK, FIN, RST RST -M-Limit - Limit 1 / S-Limit-Burst 2 -j-Rückkehr
    Iptablesa port-scanning -j tropfen

    Wir begrenzen die Anzahl der Verbindungen mit einem Webserver:

    IPTABLE -A Input -I ETH0 -O ETH1 -P TCP --Syn -M Multiport --dport 80,443 -m Connlimit --connlimit-über 30 - Connlimit-Mask 32 -j Drop
    Iptables -a input -i eth0 -o eth1 -p tcp -m multiport --dports 80,443 -j akzeptieren

    Die Regeln schränken die Anzahl der Sitzungen auf 30 pro Sekunde für jede externe Adresse ein. Der Wert wird je nach Art der Webanwendung individuell ausgewählt. In der Regel reichen 30 Werte für CONNLIMIT-oben ausreichen.

    3. Nginx.

    3.1 Block redundante Beschwerden

    Sie konfigurieren den NginX auf dem Frontend-Server so, dass der übermäßige Zugriff auf den Server einschränkt. Bearbeiten Sie die VHOST-Datei:

    # Nano / etc / nginx / sit-fähig / frontend

    Limit_req_zone $ Binary_remote_addrzone \u003d Standort: 10m Rate \u003d 10R / s;
    Server (
    Hören Sie 80;
    Server_name Site;
    ...
    }
    Lage / (
    proxy_pass ...
    ...
    Limit_req zone \u003d site burst \u003d 20;
    limit_req_log_level Fehler;
    limit_req_status 503;
    ...
    }

    Somit läuft Nginx den Kunden auf den Backend-Server, nicht mehr als 10 Anforderungen pro Sekunde (Parameterrate). Überschüssige Berufungen werden in der Warteschlange und in der Warteschlange ansammelt, da der "Pool" von Berufungen freigegeben wird. Wenn die Anzahl der Beschwerde den Wert 20 überschreitet (Burst-Parameter), ergibt NginX auf dem Frontend 503 Fehler, bis der Pool freigegeben wird.

    3.2 Verdächtige Benutzer blockieren

    Wir werden Userragenten blockieren, die in der Regel keine legitimen Benutzer verwenden:

    # Nano /etc/ginx/ginx.conf.

    Map $ http_user_Agent $ bad_useragent (
    Umfassen / etc / nginx / bad_useragents;
    }

    # Nano / etc / nginx / bad_useragents

    ~ * nmap 1;
    ~ * NIKTO1 1;
    ~ * Wikto 1;
    ~ * sf 1;
    ~ * sqlmap 1;
    ~ * BSQLBF 1;
    ~ * Acunetix 1;
    ~ * havij 1;
    ~ * appscan 1;
    ~ * wpscan 1;
    ~ * Mj12bot 1;
    ~ * Apachebench 1;
    ~ * WordPress 1;
    ~ * Dirbuster 1;
    ~ * perl 1;
    ~ * Phpstorm 1;
    ~ * Python 1;
    ~ * W3AF 1;
    ~ * Whatweb 1;
    ~ * Arachni 1;
    ~ * Xspider 1;
    ~ * Hydra 1;
    ~ * Evasionen 1;
    ~ * OpenVAS 1;
    ~ * Visionutils 1;
    ~ * Synapse 1;
    ~ * Http_request2 1;
    ~ * GORZERHTTP 1;
    ~ * Paros 1;
    ~ * Synapse 1;
    ~ * Python-urllib 1;

    Separat ist es wert, den Benutzer-Agent "WordPress" aufmerksam zu machen. Wenn die geschützte Webanwendung nicht CMS WordPress verwendet, oder die Funktion "TRACK-BACK" und "Ping-Back" ist nicht geplant, dass (höchstwahrscheinlich) Blockierungsanforderungen an den Benutzer-Agenten verwendet werden können, um die Angriffe zu blockieren Verwenden der Merkmale der Implementierung einer solchen Funktionalität in WordPress. Um die Merkmale solcher Angriffe zu studieren, kann es sein.

    Die Umsetzung solcher einfache Regeln sorgt für einen qualitativ hochwertigen Schutz gegen DDO-Angriffe der Website mit minimalen Kosten.

    P.S.: Stellen Sie sicher, dass andere Frontend-Serverdienste gut geschützt sind und einen Angreifer nicht zulässt, um den Fernzugriff zu erhalten (z. B. SSH oder FTP).

    Update: Alternativ können Sie NEMESIDA WAF Free - völlig kostenlos ausprobieren, in Form eines dynamischen NginX-Moduls präsentiert, installiert und vom Repository aktualisiert, erfordert keine Zusammenstellung, verbindet sich in wenigen Minuten mit dem bereits installierten NginX. WAF.PENSTIT.RU/ABOUT/2511.

    Sie können so sitzen, Sie berühren niemanden, und dann rufen Sie an und sagen, dass die Dienste langsam funktionieren, Websites für 2-3 Minuten geöffnet, um 504 Fehler zu erzeugen.
    Steigender Aufstieg in Kakteen, und es gibt:

    Nachfolgend finden Sie die Befehle, die Ihnen helfen, zu verstehen, was passiert ist, und ist es genau DDOs.

    Erstens empfehle ich, den Artikel darin ausführlich zu lesen, welche Protokolle für uns interessant sind, wie Sie die Top-Befehlsausgabe lesen und wie das PS-Team verwendet wird. Alle von ihnen werden für uns nützlich sein, um zu verstehen, welche Gastgeber wir den Angriff unterzogen haben und welche Engpässe auf dem Server vorhanden sind.

    Welche Teams und was können wir bestimmen?

    Um zu starten, können Sie die Anzahl der ausgeführten Apache-Prozesse sehen. Wenn mehr als 20-30 mehr als 20-30 sind, ist etwas nicht so.

    Wir betrachten die Anzahl der Apache-Prozesse in Debian:

    PS AUX | Grep Apache | WC -L.

    Wir betrachten die Anzahl der Apache-Prozesse in CentOS:

    PS AUX | Grep httpd | WC -L.

    Dieser Befehl können wir die Anzahl der Verbindungen zum Server sehen:

    Cat / Proc / net / ip_conntrack | WC -L.

    Auch der Indikator, den der Server an den Server ankommt, kann als Anzahl der Anschlüsse auf dem 80 oder 443-Anschluss dienen. Hier sind die Teams, die diese Nummer zeigen können:

    Netstat -na | GREP: 80 | WC -L Netstat -NA | GREP: 443 | WC -L.

    Es gibt noch eine solche Vielfalt von DDOD als Syn. Nachfolgend finden Sie ein Befehl, mit dem Sie die Anzahl der SYN-Anforderungen für dieselben 80 und 443-Ports ermitteln können:

    Netstat -na | GREP: 80 | GREP SYN | Sort -u | Mehr netstat -na | GREP: 443 | GREP SYN | Sort -u | Mehr

    Und dieser Befehl zeigt die Anzahl der SYN-Anforderungen an:

    Netstat -n -t | GREP SYN_RECV | WC -L.

    Der folgende Befehl ermöglicht es uns, zu verstehen, welche Domäne die meisten von Anfragen ist:

    TCPDUMP -NPI ETH0-Anschlussdomäne

    Nun sehen wir, wie viele Anfragen von jedem IP stammen. Dieser Befehl zeigt alle Ports:

    Netstat -ntu | Awk "(drucken $ 5)" | CUT -D: -F1 | Sortieren | UNIQ -C | Sort -nr | Mehr

    Ähnliche Befehle:

    Netstat -anp | Grep "TCP \\ | UDP" | | Awk "(drucken $ 5)" | CUT -D: -F1 | Sortieren | UNIQ -C | Sort -n netstat -antu | Awk "$ 5 ~ /: / (Split (5 $, A,": "); IPS [A] ++) Ende (für (IP in IPS) drucken IPS, IP |" sort -k1 -nr ")"

    Dieser Befehl zeigt die Anzahl der Anforderungen nur auf 80 Ports:

    Netstat -ntu | Grep ": 80 \\" | Awk "(drucken $ 5)" | CUT -D: -F1 | Sortieren | UNIQ -C | Sort -nr | Mehr

    Dieser Befehl zeigt alle Anfragen für 80 Port und zählen nicht, d. H. "Vereinfacht", aber "Vollständige" Ausgabeoption:

    Netstat -na | GREP: 80 | Sortieren | UNIQ -C | Sort -nr | Mehr

    Die Berechnung der am meisten aktivsten IP kann auch ansehen, welche Ports von IT-Anforderungen ausgehen. Hier zum Beispiel substituiert IP 127.0.0.1 substituiert:

    Netstat -na | GREP 127.0.0.1.

    Wenn Sie übrigens nicht mit dem Serverstatus auf Apache konfiguriert sind, kann der Status dieses Servers in der CLI angezeigt werden:

    Apachectl Status.

    Protokolldateien

    Globale Apache-Protokolle, Debian, sind normalerweise da:

    • /var/log/apache2/ror.log.
    • /var/log/apache2/access.log.
    • /var/log/httpd/error.log.
    • /var/log/httpd/access.log.

    Globale NginX-Protokolle gibt es da:

    /var/log/nginx/ror.log.
    /var/log/nginx/access.log.

    Vergessen Sie auch nicht, die Protokolle virtueller Hosts anzuzeigen, wenn die Hosts konfiguriert sind. Wir werden an dem größten Protokoll interessiert sein, das vor sich "wächst".

    Es ist notwendig, in diesen Protokollen eine Anomalie zu suchen, nämlich derselben Art von Anforderungen ohne Benutzeragenten (oder mit derselben), eine große Anzahl von Anforderungen aus derselben IP, Anforderung ohne Angabe eines virtuellen Hosts usw.

    Um ein bestimmtes IP mit der Anzahl der Anforderungen an die Site zu identifizieren, können Sie diesen Befehl:

    Cat Access.log | Awk "(drucken $ 1)" | Sortieren | UNIQ -C.

    Sie können auch Statistiken auf Anfragen mit der IP-Gruppierung mit dem LogTop-Dienstprogramm erhalten.

    Installieren Sie diesen Dienstprogramm, um zu beginnen:

    APT-GET INSTALLIEREN GIT LIBNCURES5-DEV UTHASH-DEV GCC # Für den Fall, dass Sie keine Pakete für den korrekten Betrieb haben Git Git Clone https://github.com/julienpalard/logtop.git

    Und jetzt erhalten wir Statistiken:

    Tail -f Access.log | Awk ("drucken $ 1; fflush ();") | Logtop.

    Der folgende Befehl hilft uns, beliebte Benutzeragenten zu identifizieren:

    Cat Access.log | Awk -f \\ "" (drucken $ 6) "| Sortieren | UNIQ -C | sort -n

    Wie blockieren Sie?

    Jedenfalls müssen Sie iptables stehen. Am wahrscheinlichsten kann es nicht konfiguriert werden, insbesondere wenn Sie nicht wissen, was es ist. Früher schrieb ich bereits einen Artikel darüber, wie Sie es verwenden: "", also werde ich nur die erforderlichen Befehle geben, um das Problem hier und jetzt zu lösen.

    So ist es möglich blockieren Sie die TCP-Anforderungen für 80 Port von einer bestimmten IP:

    Iptables -a input -p tcp --dport 80-ss 12.34.56.78 -j fallen

    So haben wir blockabfragen für alle Ports aus einer bestimmten IP:

    Iptables -a input -s 12.34.56.78 -j tropfen

    Liste bereits gesperrt anzeigen Wir können diesen Teams geben:

    Iptables -l -n.

    Iptables -l -n --line-Zahlen

    Wenn wir brauchen entfernen, um eine bestimmte IP zu blockierenSie können diesen Befehl verwenden

    Iptables -d-input -s 1.2.3.4 -j Drop

    oder es ist möglich löschen Sie die Regel durch seine NummerNach Überprüfung seines Befehls von iptables -l -n -n -n -Netze:

    Iptables -d-Eingang 6

    Um alle Regeln zu löschen, Können Sie das Team verwenden:

    Iptables -f.

    Etwas Prävention, um sich gegen DDOs zu schützen ...

    Es gibt noch einige weitere Regeln, die uns vor gedankenlosen Bots schützen können, die eine Last auf dem Server erstellen.

    Wir installieren den nächsten Befehl maximale Anzahl von Verbindungen von einer IP auf 80 Port:

    Iptables -a input -p tcp --dport 80 -m connlimit --connlimit-über 128 -j Drop iptables -a input -p tcp --dport 80 -j akzeptieren

    Das selbe Sie können ich machen. für DNS.:

    Iptables -a input -p uDP --dport 53-ml connlimit --connlimit-über 16 -j tropfen iptables -a input -p uDP --dport 53 -j akzeptieren

    Die folgende Regel in iptables verhindert einen Tipp von unserem Namen. In der Regel erhalten wir während der DDOs ein Paket mit installierten SYN- und ACK-Flags auf einer nicht offenen Verbindung (diese Kombination von Flags hat nur die Antwort auf das SYN-Paket). Dies deutet darauf hin, dass jemand einen anderen Syn-Host-Host aus unserem Namen gesendet hat, und die Antwort kam uns an uns.
    Gemäß dieser Regel wird unser Host mit einem ersten Paket reagieren, nachdem der angegriffene Host die Verbindung geschlossen hat.

    Iptables -i Input -M CondTrack - CCTState Neu, Invalid -p TCP - TCP-Flags SYN, ACK SYN, ACK -J Ablehnen - mit TCP-Reset

    Iptables-sparen\u003e /etc/iptables.Rules

    Was kannst du noch tun?

    Es verhindert nicht ein bisschen "Outstuning" des Kernels, macht eine feine Einstellung von Apache und Nginx (falls es lohnt), zusätzliche Module und Packungen zum Schutz vor Angriffen wie Failct2ban, Mod_Evasive, Modsecurity.

    Aber all dies sind die Themen anderer Artikeln, die bald geschrieben werden werden ...

    Fortsetzung des Themas:
    Smartphone

    Konfigurieren und aktivieren Sie einen speziellen AHCI-Modus, der vorzugsweise jedem Benutzer, der erheblich erweitern möchte, und gleichzeitig die Fähigkeiten Ihres PCs zur Arbeit mit ...