Heim >Betrieb und Instandhaltung >Nginx >So konfigurieren Sie den Nginx-Server, um Flood-Angriffe zu verhindern
Testen
Ich erkläre Ihnen kurz, wie Sie das Nginx-Limit-Request-Modul konfigurieren und wie es Ihre Website vor Angriffen durch DDoS oder andere http-basierte Denial-of-Service-Angriffe schützt.
In diesem Test habe ich die Beispielseite in blitz.io (jetzt ein kostenloser Dienst) gespeichert und sie about.html genannt, um den Befehl limit_req zu testen.
Zuerst habe ich den folgenden Befehl auf Blitz verwendet, um 1075 gleichzeitige Anfragen zu initiieren eine Minute, das Antwort-Timeout ist auf 2 Minuten eingestellt, die Region ist Kalifornien und alle anderen Bundesstaaten außer Status 200 werden auf den abnormalen Status gesetzt, selbst 503 gilt als erfolglos.
-p 1-1075:60 --status 200 - t 2000 -r california http://kbeezie.com/about.html
Nicht schlecht, oder? Aber wenn es sich um ein PHP-Dokument handelt, werden einige Benutzer höchstwahrscheinlich den 502/504-Status des PHP-Prozesses verursachen Dies führt dazu, dass der Server abstürzt oder nicht mehr reagiert. Insbesondere wenn Sie einen VPS oder einen anderen billigen Server ohne Schutz verwenden, ist die Ausfallrate höher. (Originalanzeige, hier blockiert)
Natürlich können Sie Caching oder andere Tools verwenden, um die Serverleistung und Reaktionsfähigkeit zu verbessern. Wenn Sie beispielsweise WordPress verwenden, müssen Sie für die Art von Personen, die wir verwenden können, das WordPress-Caching-Plugin verwenden das Limit-Request-Modul.
In Nginx erstellen wir eine Region http { }, ich nenne sie Blitz und stelle sie auf 5 Anfragen pro Sekunde ein, mit einer maximalen Datenkapazität von 10 MB, ich verwende $binary_remote_addr als Sitzungsvariable, um mehr zu erreichen normal als $remote_addr Besucher können auf Speicherplatz zugreifen, der größer als 10 MB ist.
Code kopieren Der Code lautet wie folgt:
limit_req_zone $binary_remote_addr zone=blitz:10m rate=5r/s;
Dann hat Zhou diese Regeln im Server definiert:
Code kopieren Der Code lautet wie folgt:
location = /about.html {
limit_req zone=blitz nodelay;
}
Laden Sie dann die Nginx-Konfiguration neu und sehen Sie sich den Effekt an:
Das werden Sie finden Derzeit können nur 285 Personen auf den Server zugreifen. Die Anzahl der Anfragen pro Sekunde beträgt 4,75, was die von uns festgelegten 5 Mal pro Sekunde nicht überschreitet. Überprüfen Sie das Protokoll und Sie werden feststellen, dass die Anfragen, auf die nicht zugegriffen wird, http 503 sind Anfragen, auf die zugegriffen wird, sind alle http 200.
Die Verwendung einer solchen Einstellung ist hilfreich für diejenigen, die den Regionszugriff einschränken möchten. Sie kann auch auf alle PHP-Anfragen angewendet werden.
Wenn Sie möchten Begrenzen Sie alle PHP-Anwendungen, Sie können dies tun:
Code kopieren Der Code lautet wie folgt:location ~ .php {limit_req zone=flood;
include php_params.conf; fastcgi_pass unix:/tmp/php5-fpm .sock;
}
Es kann Ihnen helfen, mit Einstellungen wie Beschleunigung oder Verzögerung zu spielen. Um mit plötzlichen oder nicht verzögerten Anforderungen umzugehen, klicken Sie hier: httplimitreqmodule.
Hinweis:
Möglicherweise bemerken Sie das oben Gesagte Hier liegt eine Irreführung vor, da alle Zugriffsanfragen von derselben IP (50.18.0.223) in Kalifornien stammen.
Es ist für mich schwierig, ein wirklich stark frequentiertes Netzwerk oder DDoS (Distributed Denial) zu implementieren Aus diesem Grund ist die Anzahl der von uns erfolgreich aufgerufenen Benutzer nicht sehr groß. Die Serverauslastung wirkt sich auch auf die Anzahl der Besuche oder Regionen der Testbenutzer aus Die Anzahl der gleichzeitigen Benutzer, auf die Sie zugreifen können, beträgt 50. Natürlich können Sie 49 US-Dollar pro Tag ausgeben, um 1.000 Benutzern den Zugriff auf Ihre Website zu ermöglichen.
Wenn Sie über genügend Speicher und Bandbreite verfügen, ist es sehr einfach, mit einer einzigen IP-Adresse zu testen Sie können Folgendes erreichen: hohe Parallelität, AB, Openload usw. Es befindet sich nur in der Terminalschnittstelle, ohne Benutzeroberfläche.
Besserer Ersatz
Ich werde hier nicht näher darauf eingehen, wenn Sie es ernst meinen. Um zu verhindern, dass DDoS- oder Multi-Service-Angriffe Ihren Server angreifen, gibt es andere großartige Softwaretools wie iptables ( Linux), pf (Paketfilter für BSD), oder wenn Ihr Server Hardware bereitstellt, können Sie Ihre Hardware-Firewall verwenden. Das oben genannte Einschränkungsmodul verhindert nur Flood-Angriffe durch HTTP-Anfragen. Es verhindert keine Ping-Packet-Flood-Angriffe oder andere Schwachstellen. In diesen Fällen können Sie unnötige Dienste und Ports schließen, um zu verhindern, dass andere durchbrechen.
Die einzigen Ports, die mein Server dem externen Netzwerk zugänglich macht, sind http/https und ssh. Dienste wie MySQL sind an lokale Verbindungen gebunden . Sie können einige allgemeine Dienste auch auf Ports festlegen, die nicht häufig verwendet werden, damit kein Sniffing stattfindet (iptables/pf hilft in diesem Fall).Das obige ist der detaillierte Inhalt vonSo konfigurieren Sie den Nginx-Server, um Flood-Angriffe zu verhindern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!