Hoe controleer je snel of je website beschermd is tegen DoS-aanvallen?
Het doel van deze snelle handleiding is om uit te leggen hoe je een stresstest uitvoert op je site en hoe deze presteert onder extreme belasting. Het Open Source-hulpprogramma dat we voor deze test gebruiken, is de HTTP-benchmarkingtool wrk.
Wat is een (DoS) Denial-Of-Service aanval:
Een Denial Of Service (DoS) is een type aanval waarbij de aanvaller geautoriseerde gebruikers de toegang tot een dienst ontzegt. De meest voorkomende methode van DoS omvat het overspoelen van de dienst met zoveel verkeer of dataverzoeken, dat de dienst niet in staat zou zijn om te reageren op legitieme gebruikers totdat de kwaadaardige stroom is beëindigd. We zullen de HTTP-benchmarkingtool, wrk, gebruiken om dit type aanval te emuleren.
Wat is een benchmark in de computerwereld:
Volgens wikipedia is een benchmark:
In de computerwereld is een benchmark de handeling van het uitvoeren van een computerprogramma, een reeks programma's of andere bewerkingen, om de relatieve prestaties van een object te beoordelen, normaal gesproken door er een aantal standaardtests en -proeven tegenaan te lopen. De term benchmark wordt ook vaak gebruikt voor de doeleinden van uitgebreid ontworpen benchmarkingprogramma's zelf.
Twee belangrijke kenmerken van een benchmark zijn:
- Moet herhaalbaar zijn.
- Moet kwantificeerbaar zijn.
Wat is wrk:
Voor het uitvoeren van de belastingstest op onze website gebruiken we wrk, volgens hun officiële documentatie:
wrk is een moderne HTTP-benchmarkingtool die aanzienlijke belasting kan genereren wanneer deze op een enkele multi-core CPU wordt uitgevoerd. Het combineert een multithreaded ontwerp met schaalbare gebeurteniskennisgevingssystemen zoals epoll en kqueue.
wrk is open source, maar voordat je het gebruikt, bekijk de cryptografische kennisgeving op https://github.com/wg/wrk#cryptography-notice
Hoe wrk te installeren
Oké, eindelijk gaan we beginnen met testen. Zorg ervoor dat je comfortabel bent met het uitvoeren van commando's in de terminal, aangezien er momenteel geen GUI is om wrk uit te voeren.
Hoe wrk op Mac te installeren
- Installeer homebrew, voer het volgende commando uit in een terminal:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- Om wrk te installeren, voer het volgende commando uit in een terminal:
brew install wrk
Hoe wrk op de Linux-distributie Ubuntu te installeren
sudo apt-get update
sudo apt-get install wrk
hoe wrk op windows te installeren
Windows-gebruikers moeten eerst Ubuntu installeren via deze link en daarna de twee bovenstaande commando's uitvoeren.
Hoe je site te stresstesten
Het basisgebruik van wrk ziet er als volgt uit:
wrk -t12 -c400 -d30s http://127.0.0.1:8080/index.html
De geldige commando-regelopties zijn:
-c, --connections: totaal aantal HTTP-verbindingen dat open moet blijven met
elke thread die N = verbindingen/threads afhandelt
-d, --duration: duur van de test, bijv. 2s, 2m, 2h
-t, --threads: totaal aantal threads dat gebruikt moet worden
-s, --script: LuaJIT script, zie SCRIPTING
-H, --header: HTTP-header die aan het verzoek moet worden toegevoegd, bijv. "User-Agent: wrk"
--latency: gedetailleerde latentiestatistieken afdrukken
--timeout: een time-out registreren als er binnen deze tijd geen antwoord wordt ontvangen.
Ik zal een benchmark uitvoeren voor 90 seconden, met 10 threads, en 100000 HTTP-verbindingen openhouden.
wrk -t10 -c100000 -d90s https://davidloor.com --timeout 3s --latency -H 'Client: wrk terminal'
Snelle uitleg over wat ik doe met de doorgegeven opties:
-t10: Gebruik tien aparte threads
-c100000: Open 100000 verbindingen
-d90s: Voer de test negentig seconden uit
https://davidloor.com De doelwebsite
--timeout 3s: Definieer een time-out van drie seconden
--latency: gedetailleerde latentiestatistieken afdrukken
-H 'Client: wrk terminal': Geef een Client-header door
Dus, we kunnen zeggen dat de stresstest probeert 100000 gebruikers te emuleren die de homepage van de website meerdere keren gedurende 90 seconden openen.
Belangrijk: Terwijl je de stresstest uitvoert, open de website en probeer ook in te loggen (als de website deze functionaliteit heeft). Als de site zoals gewoonlijk snel laadt, kun je ervan uitgaan dat deze beschermd is tegen eenvoudige DoS-aanvallen en dat de server een aanzienlijke belasting aankan. Als de site enige tijd nodig heeft om te laden, of een foutmelding weergeeft, heb je een probleem met de website en moet je je hostingprovider hierover informeren. In sommige gevallen kan de site zichzelf niet herstellen en moet deze mogelijk enkele services opnieuw opstarten.
Analyseer de uitvoer
Na het uitvoeren van het commando krijg ik dit:
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
Het geeft een snelle samenvatting over hoe lang de test duurde en de website (https://davidloor.com) die werd getest. Het toont ook de normale distributieparameters voor latentie en Req/Sec. Het laat zien dat wrk in 1,5 minuut 11662 verzoeken deed en 735,63 MB aan gegevens overdroeg.
Zijn de gemiddelde waarden voor Latency en Req/Sec goed? Het hangt af van elke individuele situatie. We moeten altijd proberen de Latency laag en de Req/Sec hoog te houden, en je moet er rekening mee houden dat hoe hoger het aantal verbindingen, hoe lager deze 2 waarden zullen zijn.
Conclusies
- Je kunt je site snel stresstesten met wrk. https://github.com/wg/wrk
- Het commando om een stresstest uit te voeren, na het installeren van wrk, is: `wrk -t10 -c100000 -d90s https://davidloor.com âtimeout 3s âlatency -H âClient: wrk terminalâ`
- Voer het wrk-commando uit en probeer tegelijkertijd de site in je browser te laden en kijk of je vertraging ervaart.
- Er zijn gratis bronnen om de prestaties van je website te verbeteren zonder meer middelen aan de server(s) toe te voegen, zoals het gebruik van een gratis CDN, zoals cloudflare.
- Als je een CDN hebt, zorg er dan voor dat je de voordelen ervan volledig benut.
Disclaimer: De informatie die beschikbaar is in dit blogbericht is uitsluitend bedoeld voor educatieve doeleinden. Ik ben niet verantwoordelijk voor hoe je de informatie hier gebruikt.