Wie Sie schnell prüfen können, ob Ihre Website vor DoS-Angriffen geschützt ist?
Ziel dieser schnellen Anleitung ist es zu erklären, wie Sie einen Stresstest für Ihre Website durchführen und wie sie unter extremer Last reagiert. Das Open-Source-Tool, das wir für diesen Test verwenden, ist das HTTP-Benchmarking-Tool wrk.
Was ist ein (DoS) Denial-Of-Service-Angriff:
Ein Denial Of Service (DoS) ist eine Art von Angriff, bei dem der Angreifer autorisierten Benutzern den Zugriff auf einen Dienst verweigert. Die häufigste Methode eines DoS besteht darin, den Dienst mit so viel Datenverkehr oder Datenanfragen zu überfluten, dass der Dienst nicht in der Lage ist, auf legitime Benutzer zu antworten, bis der bösartige Datenfluss beendet wurde. Wir werden das HTTP-Benchmarking-Tool wrk verwenden, um diese Art von Angriff zu emulieren.
Was ist ein Benchmark in der Informatik:
Laut Wikipedia ist ein Benchmark:
In der Informatik ist ein Benchmark die Ausführung eines Computerprogramms, einer Programmsammlung oder anderer Operationen, um die relative Leistung eines Objekts zu bewerten, normalerweise durch Ausführung einer Reihe von Standardtests und -versuchen dagegen. Der Begriff Benchmark wird auch häufig für aufwendig gestaltete Benchmark-Programme selbst verwendet.
Zwei Hauptmerkmale eines Benchmarks sind:
- Muss wiederholbar sein.
- Muss quantifizierbar sein.
Was ist wrk:
Für die Durchführung des Lasttests auf unserer Website verwenden wir wrk, laut deren offizieller Dokumentation:
wrk ist ein modernes HTTP-Benchmarking-Tool, das in der Lage ist, erhebliche Last zu erzeugen, wenn es auf einer einzigen Multi-Core-CPU ausgeführt wird. Es kombiniert ein Multithreading-Design mit skalierbaren Ereignisbenachrichtigungssystemen wie epoll und kqueue.
wrk ist Open Source, aber bevor Sie es verwenden, werfen Sie einen Blick auf den Kryptografie-Hinweis unter https://github.com/wg/wrk#cryptography-notice
Wie man wrk installiert
Ok, endlich beginnen wir mit dem Testen. Stellen Sie sicher, dass Sie mit der Ausführung von Befehlen im Terminal vertraut sind, da es derzeit keine GUI zum Ausführen von wrk gibt.
Wie man wrk auf Mac installiert
- Installieren Sie Homebrew, führen Sie den folgenden Befehl in einem Terminal aus:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- Um wrk zu installieren, führen Sie den folgenden Befehl in einem Terminal aus:
brew install wrk
Wie man wrk auf der Linux-Distribution Ubuntu installiert
sudo apt-get update
sudo apt-get install wrk
Wie man wrk unter Windows installiert
Windows-Benutzer müssen zuerst Ubuntu gemäß diesem Link installieren und anschließend die beiden obigen Befehle ausführen.
Wie man Ihre Website stresstests
Die grundlegende Verwendung von wrk sieht so aus:
wrk -t12 -c400 -d30s http://127.0.0.1:8080/index.html
Die gültigen Befehlszeilenoptionen sind:
-c, --connections: Gesamtzahl der offenen HTTP-Verbindungen, wobei jeder Thread N = Verbindungen/Threads behandelt
-d, --duration: Dauer des Tests, z. B. 2s, 2m, 2h
-t, --threads: Gesamtzahl der zu verwendenden Threads
-s, --script: LuaJIT-Skript, siehe SKRIPTING
-H, --header: Hinzuzufügender HTTP-Header zur Anfrage, z. B. "User-Agent: wrk"
--latency: detaillierte Latenzstatistiken anzeigen
--timeout: einen Timeout aufzeichnen, wenn innerhalb dieser Zeit keine Antwort empfangen wird.
Ich werde einen Benchmark für 90 Sekunden mit 10 Threads und 100000 offenen HTTP-Verbindungen ausführen.
wrk -t10 -c100000 -d90s https://davidloor.com --timeout 3s --latency -H 'Client: wrk terminal'
Kurze Erklärung, was ich mit den übergebenen Optionen mache:
-t10: Zehn separate Threads verwenden
-c100000: 100000 Verbindungen öffnen
-d90s: Den Test neunzig Sekunden lang ausführen
https://davidloor.com Die Zielwebsite
--timeout 3s: Einen Drei-Sekunden-Timeout definieren
--latency: detaillierte Latenzstatistiken anzeigen
-H 'Client: wrk terminal': Einen Client-Header übergeben
Der Stresstest versucht also, 100000 Benutzer zu emulieren, die die Homepage der Website 90 Sekunden lang mehrmals öffnen.
Wichtig: Öffnen Sie während des Stresstests die Website und versuchen Sie auch, sich anzumelden (falls die Website diese Funktion hat). Wenn die Website wie gewohnt schnell lädt, können Sie davon ausgehen, dass sie vor einfachen DoS-Angriffen geschützt ist und der Server eine erhebliche Last bewältigen kann. Wenn die Website lange zum Laden braucht oder eine Fehlermeldung anzeigt, haben Sie ein Problem mit der Website und sollten Ihren Hosting-Anbieter kontaktieren. In einigen Fällen kann sich die Website nicht von selbst erholen und muss möglicherweise einige Dienste neu starten.
Analysieren Sie die Ausgabe
Nachdem ich den Befehl ausgeführt habe, erhalte ich Folgendes:
Running 2m test @ https://davidloor.com
10 threads and 100000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 528.12ms 527.33ms 2.99s 87.92%
Req/Sec 20.30 16.93 116.00 74.75%
Latency Distribution
50% 356.27ms
75% 638.27ms
90% 1.20s
99% 2.62s
11662 requests in 1.50m, 735.63MB read
Socket errors: connect 97681, read 117, write 0, timeout 1581
Requests/sec: 129.43
Transfer/sec: 8.16MB
Es gibt eine kurze Zusammenfassung darüber, wie lange der Test lief und welche Website (https://davidloor.com) getestet wurde. Es zeigt auch die normalen Verteilungsparameter für Latenz und Req/Sec. Es zeigt, dass wrk in 1,5 Minuten 11662 Anfragen durchführte und 735,63 MB Daten übertragen hat.
Sind die Durchschnittswerte für Latenz und Req/Sec gut? Das hängt von jeder einzelnen Situation ab. Wir sollten immer versuchen, die Latenz niedrig und die Req/Sec hoch zu halten, und Sie sollten bedenken, dass diese beiden Werte umso niedriger werden, je höher die Anzahl der Verbindungen ist.
Schlussfolgerungen
- Sie können Ihre Website mit wrk schnell stresstesten. https://github.com/wg/wrk
- Der Befehl zum Ausführen eines Stresstests nach der Installation von wrk lautet: `wrk -t10 -c100000 -d90s https://davidloor.com –timeout 3s –latency -H ‘Client: wrk terminal’`
- Führen Sie den wrk-Befehl aus und versuchen Sie gleichzeitig, die Website in Ihrem Browser zu laden und zu sehen, ob Sie Verlangsamungen feststellen.
- Es gibt kostenlose Ressourcen zur Verbesserung der Website-Leistung, ohne zusätzliche Ressourcen zum Server hinzuzufügen, wie z. B. die Verwendung eines kostenlosen CDNs wie Cloudflare.
- Wenn Sie ein CDN haben, stellen Sie sicher, dass Sie dessen Vorteile voll ausschöpfen.
Haftungsausschluss: Die Informationen in diesem Blogbeitrag dienen ausschließlich Bildungszwecken. Ich bin nicht verantwortlich für die Art und Weise, wie Sie die hier enthaltenen Informationen verwenden.