Maison >Opération et maintenance >Nginx >Comment utiliser Nginx et Nginx Plus pour résister aux attaques DDOS

Comment utiliser Nginx et Nginx Plus pour résister aux attaques DDOS

WBOY
WBOYavant
2023-05-14 20:34:041195parcourir

1. Caractéristiques des attaques DDoS de la couche application

Couche application (septième couche/couche http) Les attaques DDoS sont généralement lancées par des programmes de chevaux de Troie, qui peuvent mieux exploiter les vulnérabilités du système cible grâce à leur conception. Par exemple, pour un système qui ne peut pas gérer un grand nombre de requêtes simultanées, simplement en établissant un grand nombre de connexions et en envoyant périodiquement un petit nombre de paquets de données pour maintenir la session, les ressources du système peuvent être épuisées, le rendant incapable de accepter de nouvelles demandes de connexion pour atteindre les objectifs DDoS. D'autres attaques incluent l'envoi d'un grand nombre de demandes de connexion pour envoyer de gros paquets de données. L'attaque étant initiée par un cheval de Troie, l'attaquant peut établir rapidement un grand nombre de connexions et émettre un grand nombre de requêtes en peu de temps.

Voici quelques caractéristiques DDoS, nous pouvons utiliser ces caractéristiques pour résister aux DDoS (y compris, mais sans s'y limiter) :

  1. Les attaques proviennent souvent de certaines IP ou segments IP relativement fixes, et chaque IP a un nombre beaucoup plus grand que le réel Le nombre de connexions et de requêtes des utilisateurs. (Remarque : cela ne signifie pas que toutes ces requêtes représentent des attaques DDoS. Dans de nombreuses architectures de réseau utilisant NAT, de nombreux clients utilisent l'adresse IP de la passerelle pour accéder aux ressources du réseau public. Cependant, même ainsi, le nombre de ces requêtes et le nombre Le nombre de connexions sera également bien inférieur à celui d'une attaque ddos. )

  2. Comme l'attaque est envoyée par un cheval de Troie et que le but est de surcharger le serveur, la fréquence des requêtes sera bien supérieure à celle d'un cheval de Troie. personne normale.

  3. user-agent est généralement une valeur non standard

  4. referer est parfois une valeur facilement associée aux attaques

2. Utilisez nginx et nginx plus pour résister aux attaques ddos ​​

Combinés avec les caractéristiques mentionnées ci-dessus, nginx et nginx plus possèdent de nombreuses fonctionnalités qui peuvent être utilisées pour se défendre efficacement contre les attaques Ddos en ajustant le trafic d'accès à l'entrée et en contrôlant le trafic depuis le. proxy inverse vers le serveur principal Objectif.

1. Limiter la vitesse de la requête

Définissez la demande de connexion de nginx et nginx plus dans une plage raisonnable d'une demande réelle d'un utilisateur. Par exemple, si vous pensez qu'un utilisateur normal peut demander la page de connexion toutes les deux secondes, vous pouvez configurer nginx pour qu'il reçoive une requête de l'adresse IP du client toutes les deux secondes (ce qui équivaut approximativement à 30 requêtes par minute).

limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m; 
server { 
... 
location /login.html { 
limit_req zone=one; 
... 
} 
}

La commande `limit_req_zone` configure une zone de mémoire partagée appelée one pour stocker une valeur clé spécifique de l'état de la demande, dans l'exemple ci-dessus il s'agit de l'adresse IP du client ($binary_remote_addr). Le `limit_req` dans le bloc d'emplacement restreint l'accès à /login.html en faisant référence à une zone de mémoire partagée.

2. Limiter le nombre de connexions

Définissez le nombre de connexions pour nginx et nginx plus dans une plage raisonnable d'une demande réelle de l'utilisateur. Par exemple, vous ne pouvez pas définir plus de 10 connexions à /store par adresse IP client.

limit_conn_zone $binary_remote_addr zone=addr:10m; 
server { 
... 
location /store/ { 
limit_conn addr 10; 
... 
} 
}

La commande `limit_conn_zone` configure une zone de mémoire partagée appelée addr pour stocker l'état d'une valeur de clé spécifique, dans l'exemple ci-dessus l'adresse IP du client ($binary_remote_addr). `limit_conn` dans le bloc d'emplacement limite le nombre maximum de connexions à /store/ à 10 en faisant référence à la zone de mémoire partagée de l'adresse.

3. Fermez les connexions lentes

Certaines attaques DDoS, telles que slowlris, atteignent l'objectif de l'attaque en établissant un grand nombre de connexions et en envoyant périodiquement des paquets de données pour maintenir la session. . demander. Dans ce cas, nous pouvons résister à l'attaque en fermant la connexion lente.

La commande `client_body_timeout` est utilisée pour définir le délai d'expiration de lecture des requêtes client, et la commande `client_header_timeout` est utilisée pour définir le délai d'expiration de lecture des en-têtes de requête client. Les valeurs par défaut de ces deux paramètres sont 60s. Nous pouvons les définir sur 5s via la commande suivante :

server { 
client_body_timeout 5s; 
client_header_timeout 5s; 
... 
}

4 Définir la liste noire IP

S'il est déterminé que l'attaque provient de certaines adresses IP, nous pouvons S'ils sont ajoutés à la liste noire, nginx n'acceptera plus leurs demandes. Par exemple, si vous avez déterminé que l'attaque provient d'une plage d'adresses IP allant de 123.123.123.1 à 123.123.123.16, vous pouvez la définir comme ceci :

location / { 
deny 123.123.123.0/28; 
... 
}

Ou vous avez déterminé que l'attaque provient de plusieurs adresses IP : 123.123 .123.3, 123.123.123.5 et 123.123.123.7. Il peut être défini comme ceci :

location / { 
deny 123.123.123.3; 
deny 123.123.123.5; 
deny 123.123.123.7; 
... 
}

5. Définir la liste blanche des adresses IP

Si votre site Web autorise uniquement l'accès à des adresses IP ou à des segments IP spécifiques, vous pouvez utiliser l'autorisation. et refuser les commandes en combinaison pour restreindre l'accès aux seules adresses IP que vous spécifiez votre site Web. Comme suit, vous pouvez définir que seuls les utilisateurs intranet du segment 192.168.1.0 soient autorisés à accéder : La commande

location / { 
allow 192.168.1.0/24; 
deny all; 
... 
}

deny refusera les demandes d'accès de toutes les autres adresses IP, à l'exception du segment IP spécifié par Allow.

6. Utilisez la mise en cache pour réduire les pics de trafic

En activant la fonction de mise en cache de nginx et en définissant des paramètres de mise en cache spécifiques, vous pouvez réduire le trafic dû aux attaques et également réduire la pression des requêtes sur le serveur backend. Voici quelques paramètres utiles : Le paramètre de mise à jour de

  1. proxy_cache_use_stale` indique à nginx quand mettre à jour l'objet mis en cache. Seule une demande de mise à jour vers le backend est requise et les demandes des clients pour l'objet ne nécessitent pas d'accès au serveur backend tant que le cache est valide. Lorsqu'une attaque est menée via des requêtes fréquentes d'un fichier, la mise en cache peut réduire considérablement le nombre de requêtes adressées au serveur backend.

  2. proxy_cache_key ` 命令定义的键值通常包含一些内嵌的变量(默认的键值 $scheme$proxy_host$request_uri 包含了三个变量)。如果键值包含 `$query_string` 变量,当攻击的请求字符串是随机的时候就会给 nginx 代理过重的缓存负担,因此我们建议一般情况下不要包含 `$query_string` 变量。

7. 屏蔽特定的请求

可以设置 nginx、nginx plus 屏蔽一些类型的请求:

  1. 针对特定 url 的请求

  2. 针对不是常见的 user-agent 的请求

  3. 针对 referer 头中包含可以联想到攻击的值的请求

  4. 针对其他请求头中包含可以联想到攻击的值的请求

比如,如果你判定攻击是针对一个特定的 url:/foo.php,我们就可以屏蔽到这个页面的请求:

location /foo.php { 
deny all; 
}

或者你判定攻击请求的 user-agent 中包含 foo 或 bar,我们也可以屏蔽这些请求:

location / { 
if ($http_user_agent ~* foo|bar) { 
return 403; 
} 
... 
}

http_name 变量引用一个请求头,上述例子中是 user-agent 头。可以针对其他的 http 头使用类似的方法来识别攻击。

8. 限制到后端服务器的连接数

一个 nginx、nginx plus 实例可以处理比后端服务器多的多的并发请求。在 nginx plus 中,你可以限制到每一个后端服务器的连接数,比如可以设置 nginx plus 与 website upstream 中的每个后端服务器建立的连接数不得超过200个:

upstream website { 
server 192.168.100.1:80 max_conns=200; 
server 192.168.100.2:80 max_conns=200; 
queue 10 timeout=30s; 
}

`max_conns` 参数可以针对每一个后端服务器设置 nginx plus 可以与之建立的最大连接数。`queue` 命令设置了当每个后端服务器都达到最大连接数后的队列大小,`timeout` 参数指定了请求在队列中的保留时间。

9. 处理特定类型的攻击

有一种攻击是发送包含特别大的值的请求头,引起服务器端缓冲区溢出。nginx、nginx plus 针对这种攻击类型的防御,可以参考

[using nginx and nginx plus to protect against cve-2015-1635]
)

10. 优化nginx性能

ddos 攻击通常会带来高的负载压力,可以通过一些调优参数,提高 nginx、nginx plus 处理性能,硬抗 ddos 攻击,详细参考:

[tuning nginx for performance]

三、识别ddos攻击

到目前为止,我们都是集中在如何是用 nginx、nginx plus 来减轻 ddos 攻击带来的影响。如何才能让 nginx、nginx plus 帮助我们识别 ddos 攻击呢?`nginx plus status module` 提供了到后端服务器流量的详细统计,可以用来识别异常的流量。nginx plus 提供一个当前服务状态的仪表盘页面,同时也可以在自定义系统或其他第三方系统中通过 api 的方式获取这些统计信息,并根据历史趋势分析识别非正常的流量进而发出告警。

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer