Comment vérifier rapidement si votre site web est protégé contre les attaques DoS ?
L'objectif de ce guide rapide est d'expliquer comment effectuer un test de charge sur votre site et observer son comportement sous une charge extrême. L'outil Open Source que nous utilisons pour ce test est l'outil de benchmarking HTTP wrk.
Qu'est-ce qu'une attaque par déni de service (DoS) :
Un déni de service (DoS) est un type d'attaque où l'attaquant empêche les utilisateurs autorisés d'accéder à un service. La méthode la plus courante de DoS consiste à inonder le service avec tellement de trafic ou de requêtes de données que le service ne peut pas répondre aux utilisateurs légitimes tant que le flux malveillant n'a pas été arrêté. Nous utiliserons l'outil de benchmarking HTTP, wrk, pour émuler ce type d'attaque.
En informatique, qu'est-ce qu'un benchmark :
Selon wikipedia, un benchmark est :
En informatique, un benchmark est l'acte d'exécuter un programme informatique, un ensemble de programmes ou d'autres opérations, afin d'évaluer les performances relatives d'un objet, normalement en exécutant un certain nombre de tests et d'essais standard sur celui-ci. Le terme benchmark est également couramment utilisé pour les programmes de benchmarking eux-mêmes, conçus de manière élaborée.
Deux caractéristiques clés d'un benchmark sont :
- Il doit être reproductible.
- Il doit être quantifiable.
Qu'est-ce que wrk :
Pour exécuter le test de charge sur notre site web, nous utilisons wrk, selon leur documentation officielle :
wrk est un outil moderne de benchmarking HTTP capable de générer une charge significative lorsqu'il est exécuté sur un seul CPU multi-cœur. Il combine une conception multithread avec des systèmes de notification d'événements évolutifs tels que epoll et kqueue.
wrk est open source, mais avant de l'utiliser, jetez un œil à l'avis de cryptographie sur https://github.com/wg/wrk#cryptography-notice
Comment installer wrk
Ok, nous allons enfin commencer les tests. Assurez-vous d'être à l'aise pour exécuter des commandes dans le terminal, car il n'y a pas d'interface graphique pour exécuter wrk pour le moment.
Comment installer wrk sur Mac
- Installez homebrew, exécutez la commande suivante dans un terminal :
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- Pour installer wrk, exécutez la commande suivante dans un terminal :
brew install wrk
Comment installer wrk sur la distribution Linux Ubuntu
sudo apt-get update
sudo apt-get install wrk
Comment installer wrk sur Windows
Les utilisateurs de Windows devront d'abord installer Ubuntu via ce lien et exécuter ensuite les deux commandes ci-dessus.
Comment tester la charge de votre site
L'utilisation de base de wrk ressemble à ceci :
wrk -t12 -c400 -d30s http://127.0.0.1:8080/index.html
Les options de ligne de commande valides sont :
-c, --connections: nombre total de connexions HTTP à maintenir ouvertes avec
chaque thread gérant N = connexions/threads
-d, --duration: durée du test, par exemple 2s, 2m, 2h
-t, --threads: nombre total de threads à utiliser
-s, --script: script LuaJIT, voir SCRIPTING
-H, --header: en-tête HTTP à ajouter à la requête, par exemple "User-Agent: wrk"
--latency: afficher des statistiques de latence détaillées
--timeout: enregistrer un timeout si une réponse n'est pas reçue dans
ce laps de temps.
Je vais exécuter un benchmark pendant 90 secondes, en utilisant 10 threads, et en maintenant 100000 connexions HTTP ouvertes.
wrk -t10 -c100000 -d90s https://davidloor.com --timeout 3s --latency -H 'Client: wrk terminal'
Explication rapide de ce que je fais avec les options passées :
-t10 : Utiliser dix threads séparés
-c100000 : Ouvrir 100000 connexions
-d90s : Exécuter le test pendant quatre-vingt-dix secondes
https://davidloor.com Le site web cible
--timeout 3s : Définir un timeout de trois secondes
--latency : afficher des statistiques de latence détaillées
-H 'Client: wrk terminal' : Passer un en-tête Client
Ainsi, on peut dire que le test de charge tente d'émuler 100000 utilisateurs ouvrant la page d'accueil du site web plusieurs fois pendant 90 secondes.
Important : Pendant l'exécution du test de charge, ouvrez le site web et essayez également de vous connecter (si le site web en a la possibilité), si le site se charge rapidement comme d'habitude, vous pouvez supposer qu'il est protégé contre les attaques DoS simples et que le serveur est capable de gérer une charge importante. Si le site met du temps à se charger, ou affiche une erreur, vous avez un problème avec le site web et vous devriez contacter votre hébergeur à ce sujet. Dans certains cas, le site ne pourra pas se rétablir de lui-même et pourrait nécessiter le redémarrage de certains services.
Analyser la sortie
Après avoir exécuté la commande, j'obtiens ceci :
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
Cela donne un résumé rapide sur la durée du test et le site web (https://davidloor.com) qui a été testé. Il montre également les paramètres de distribution normaux pour la latence et les Req/Sec. Il indique qu'en 1,5 minute, wrk a effectué 11662 requêtes et transféré 735,63 Mo de données.
Les valeurs moyennes de latence et de Req/Sec sont-elles bonnes ? Cela dépend de chaque situation individuelle. Nous devrions toujours essayer de maintenir la latence basse et les Req/Sec élevées, et vous devez garder à l'esprit que plus le nombre de connexions est élevé, plus ces 2 valeurs seront basses.
Conclusions
- Vous pouvez tester rapidement la charge de votre site avec wrk. https://github.com/wg/wrk
- La commande pour exécuter un test de charge, après avoir installé wrk, est : `wrk -t10 -c100000 -d90s https://davidloor.com –timeout 3s –latency -H ‘Client: wrk terminal’`
- Exécutez la commande wrk, et en même temps, essayez de charger le site dans votre navigateur et voyez si vous rencontrez des ralentissements.
- Il existe des ressources gratuites pour améliorer les performances de votre site web sans ajouter plus de ressources aux serveurs, comme l'utilisation d'un CDN gratuit, tel que cloudflare.
- Si vous avez un CDN, assurez-vous de l'utiliser pleinement.
Avis de non-responsabilité : Les informations disponibles dans cet article de blog sont uniquement à des fins éducatives. Je ne suis pas responsable de la manière dont vous utilisez les informations ici.