处理HTTP洪stream通过networking服务器configuration(Django应用程序)

我维护的一个基于Django的networking论坛最近在应用层受到频繁的DDOS攻击。 本质上,它似乎是一个HTTP泛滥的主页,造成服务器执行大量的内部请求,并加载各种文件来创build页面。 洪水峰值约为每分钟4000个请求(典型的吞吐量为500转/分钟左右),导致我的服务器在这个过程中。

我的networking服务器是nginx,作为一个gunicorn应用服务器的反向代理。

我还没有使用gunicorn的安全参数: limit_request_linelimit_request_fieldslimit_request_field_size )。 但是我已经安装了nginx fail2ban ,并且在我的jail.local有两个jail来确保HTTP floods被挫败:

 [nginx-postflood] enabled = true filter = nginx-postflood port = http,https logpath = /var/log/nginx/access.log findtime = 60 maxretry = 13 bantime = 300 [nginx-getflood] enabled = true filter = nginx-getflood port = http,https logpath = /var/log/nginx/access.log findtime = 5 maxretry = 6 bantime = 600 

这个设置没有帮助,我不明白为什么。 当我testing它时,我能够阻止我的IP,所以它肯定是function性的。 也许HTTP洪水已经随机化了IP。

我可以采用什么策略来阻止这种应用层的DDOS? 作为一个新手,我仍然围绕着这一切。 专家的帮助非常感谢!

我结束了在nginx级别处理这个。 我添加了以下内容到http {nginx.conf

 limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m; limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=7r/s; limit_conn_status 403; limit_req_status 403; 

然后在虚拟主机文件的server { block(以下任何location { blocks):

 limit_conn conn_limit_per_ip 10; limit_req zone=req_limit_per_ip burst=5 nodelay; 

到目前为止,这个configuration对我来说工作得很好。


注意:适用于DoS,但不知道它将如何坚持DDoS。 希望有一个专家可以参加。