Maison > Article > Opération et maintenance > Comment configurer le serveur Nginx pour empêcher les attaques Flood
Tests
Je vais vous expliquer brièvement comment configurer le module de demande de limite nginx et comment il protège votre site Web contre les attaques DDoS ou d'autres attaques par déni de service basées sur http.
Dans ce test, j'ai enregistré l'exemple de page dans blitz.io (maintenant un service gratuit) et je l'ai nommé about.html pour tester la commande limit_req
Tout d'abord, j'ai utilisé la commande suivante sur blitz pour lancer 1075 requêtes simultanées pour. une minute, le délai de réponse est défini sur 2 minutes, la région est la Californie et tous les autres États, à l'exception du statut 200, sont définis sur un statut anormal, même 503 est considéré comme un échec.
-p 1-1075:60 --statut 200 - t 2000 -r california http://kbeezie.com/about.html
Pas mal, non ? Mais s'il s'agit d'un document php, il est très probable que certains utilisateurs provoquent le statut 502/504 du processus php. , provoquant le crash du serveur ou son blocage, surtout si vous utilisez un vps ou un autre serveur bon marché sans aucune protection, le taux d'échec sera plus élevé. (Publicité originale, bloquée ici)
Bien sûr, vous pouvez utiliser la mise en cache ou d'autres outils pour améliorer les performances et la réactivité du serveur. Par exemple, si vous utilisez WordPress, vous devez utiliser le plugin de mise en cache WordPress pour ce type de personnes que nous pouvons utiliser. le module de demande de limite.
Dans nginx, nous créons une région http { }, je l'appelle blitz et je la règle sur 5 requêtes par seconde, avec une capacité de données maximale de 10 Mo. J'utilise $binary_remote_addr comme variable de session pour vous faire plus. normal que $remote_addr Les visiteurs peuvent accéder à un espace supérieur à 10 Mo
Copier le code Le code est le suivant :
limit_req_zone $binary_remote_addr zone=blitz:10m rate=5r/s;
Ensuite, Zhou a défini ces règles dans le serveur :
Copier le code Le code est le suivant :
location = /about.html {
limit_req zone=blitz nodelay;
}
Rechargez ensuite la configuration nginx et voyez l'effet :
Vous constaterez que seules 285 personnes peuvent accéder au serveur maintenant, le nombre de requêtes par seconde est de 4,75, ce qui ne dépasse pas les 5 fois par seconde que nous avons définies. Vérifiez le journal et vous constaterez que les requêtes auxquelles on n'accède pas sont http 503 et le. les requêtes consultées sont toutes http 200.
Utiliser un tel paramètre pour ceux qui souhaitent limiter l'accès à la région est utile, il peut également être appliqué à toutes les requêtes php
limite des requêtes d'application php
Si vous le souhaitez. limitez toutes les limites des applications php, vous pouvez faire ceci :
Copier le code Le code est le suivant :
location ~ .php {
limit_req zone=flood;
include php_params.conf;
fastcgi_pass unix:/tmp/php5-fpm .sock;
}
Il peut vous aider à jouer avec des paramètres tels que l'accélération ou la décélération, pour faire face à des exigences soudaines ou sans retard. Pour les détails des éléments de configuration, cliquez ici : httplimitreqmodule.
Remarque :
Vous remarquerez peut-être ce qui précède. graphique a testé 1075 demandes d'utilisateurs. Il y a une erreur ici, car toutes les demandes d'accès proviennent de la même IP (50.18.0.223) en Californie
Il m'est difficile de mettre en œuvre un véritable réseau à fort trafic ou DDoS (déni distribué). d'attaque de service). C'est pourquoi le nombre d'utilisateurs auxquels nous avons réussi à accéder est lié à l'IP. La charge du serveur affectera également le nombre de visites ou de régions des utilisateurs de test. Avec la version gratuite, le nombre maximum de. le nombre d'utilisateurs simultanés auxquels vous pouvez accéder est de 50. Bien sûr, vous pouvez dépenser 49 $ par jour pour que 1 000 utilisateurs accèdent à votre site Web
Si vous disposez de suffisamment de mémoire et de bande passante, il est très facile de tester avec une seule adresse IP avec cet outil. , vous pouvez obtenir : une simultanéité élevée, ab, openload, etc. C'est juste dans l'interface du terminal, sans UI.
Bien sûr, vous devez le tester vous-même, n'oubliez pas d'utiliser le drapeau d'état, car le blitz répondra à l'accès demande en 5 secondes environ
Meilleur remplacement
Je n'entrerai pas dans plus de détails ici, si vous êtes sérieux. Pour empêcher les attaques DDoS ou multiservices d'attaquer votre serveur, il existe d'autres excellents outils logiciels comme iptables ( linux), pf (filtre de paquets pour bsd), ou si votre serveur fournit du matériel, vous pouvez utiliser votre pare-feu matériel. Le module de restriction ci-dessus empêchera uniquement les attaques par inondation via des requêtes http. Il n'empêchera pas les attaques par inondation de paquets ping ou d'autres vulnérabilités. Dans ces cas, vous pouvez fermer les services inutiles et les ports inutiles pour empêcher les autres de passer. .
Par exemple, les seuls ports que mon serveur expose au réseau externe sont http/https et ssh. Les services comme mysql sont liés aux connexions locales. . Vous pouvez également définir certains services communs sur des ports qui ne sont pas couramment utilisés, afin qu'il n'y ait pas de détection (iptables/pf vous aidera dans ce cas).
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!