如何阻止洪水流量到 Nginx?

如何阻止洪水流量到 Nginx?

我有这个简单的 Nginx 配置:

server { 
    listen 80;
    server_name example.com;
    rewrite ^(.*) http://www.example.com$1 permanent;
}

server {
    listen   80;
    server_name www.example.com;
    access_log /var/log/nginx/www.example.com.access.log;
    error_log /var/log/nginx/www.example.com.error.log;

     root   /var/www/example.com/;

    location / {        
        index index.html index.php;
    }

    location ~ \.php$ {        
        include /etc/nginx/fastcgi_params;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/example.com/$fastcgi_script_name;
    }
}

现在是防止洪水攻击(dos)的时候了。我想实现这两条规则:

1)我会每秒拦截超过 3 个请求PHP 请求

例子:

www.example.com/page.php
www.example.com/page.php
www.example.com/page.php
www.example.com/page.php (blocks it stop if it is within the second)

2)我会每秒阻止超过 3 个针对同一资源的请求

www.example.com/img.jpg
www.example.com/img.jpg
www.example.com/img.jpg
www.example.com/img.jpg (blocks it stop if it is within the second)

我的目标是完全阻止请求,我这么说是因为我看到了节点延迟param 返回 503 给攻击者。在这种情况下,如果达到限制,我肯定知道这是一次攻击,所以我想阻止响应。“阻止”的意思是我不想发送 503 消息,我希望 NGINX 断开连接而不发送任何内容。

我该如何优化此配置来实现这些规则?

谢谢。

答案1

nginx 有HttpLimitReq模块模块可用。您可以定义不同的区域和允许的访问模式。如果用户超出允许的访问次数,则返回 503。

相关内容