Maison  >  Article  >  Opération et maintenance  >  Comment prévenir les attaques DDoS dans nginx

Comment prévenir les attaques DDoS dans nginx

(*-*)浩
(*-*)浩original
2019-06-06 14:05:153644parcourir

La défense contre les DDOS est un projet systématique. Il existe de nombreux types d'attaques, le coût de la défense est élevé et la défense est passive et impuissante. La caractéristique du DDOS est qu'il est distribué et cible les attaques de bande passante et de service, c'est-à-dire les attaques de trafic de couche 4 et les attaques d'applications de couche 7. Le goulot d'étranglement de défense correspondant au niveau de la couche 4 est la bande passante, et la couche 7 se situe principalement au niveau du débit de l'architecture. . Pour les attaques d’applications de couche sept, nous pouvons toujours effectuer certaines configurations pour nous défendre contre elles.

Comment prévenir les attaques DDoS dans nginx

Par exemple, le frontal est Nginx, qui utilise principalement les modules http_limit_conn et http_limit_req de nginx pour la défense. ngx_http_limit_conn_module peut limiter le nombre de connexions d'une seule IP. ngx_http_limit_req_module peut limiter le nombre de requêtes par seconde d'une seule IP. En limitant le nombre de connexions et de requêtes, les attaques CC peuvent être défendues de manière relativement efficace.

Voici la méthode de configuration :

Limiter le nombre de requêtes par seconde
Le module ngx_http_limit_req_module utilise le fuite Principe du bucket pour limiter le temps unitaire Une fois que le nombre de requêtes par unité de temps dépasse la limite, une erreur 503 sera renvoyée. La configuration doit être définie à deux endroits :

Les conditions de déclenchement sont définies dans la section http de nginx.conf Il peut y avoir plusieurs conditions
A l'emplacement, les actions à effectuer par nginx sont définies. lorsque les conditions de déclenchement sont remplies
Par exemple :

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; //触发条件,所有访问ip 限制每秒10个请求    ...
    server {        ...
        location  ~ \.php$ {
            limit_req zone=one burst=5 nodelay;   //执行的动作,通过zone名字对应
               }
           }
     }

Description du paramètre :

$binary_remote_addr  二进制远程地址
zone=one:10m    定义zone名字叫one,并为这个zone分配10M内存,用来存储会话(二进制远程地址),1m内存可以保存16000会话
rate=10r/s;     限制频率为每秒10个请求
burst=5         允许超过频率限制的请求数不多于5个,假设1、2、3、4秒请求为每秒9个,那么第5秒内请求15个是允许的,反之,如果第一秒内请求15个,会将5个请求放到第二秒,第二秒内超过10的请求直接503,类似多秒内平均速率限制。
nodelay         超过的请求不被延迟处理,设置后15个请求在1秒内处理。

Limiter le nombre de connexions IP
La méthode de configuration et les paramètres de ngx_http_limit_conn_module sont les mêmes que Le module http_limit_req est très similaire, avec moins de paramètres et beaucoup plus simple

http {
    limit_conn_zone $binary_remote_addr zone=addr:10m; //触发条件    ...
    server {        ...
        location /download/ {
            limit_conn addr 1;    // 限制同一时间内1个连接,超出的连接返回503
                }
           }
     }

Pour plus d'articles techniques liés à Nginx, veuillez visiter le Tutoriel d'utilisation de Nginxcolonne pour apprendre !

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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn