Nginx

通過網路伺服器配置處理 HTTP 洪水(Django 應用程序)

  • April 23, 2017

我維護的一個基於 Django 的網路論壇最近在應用層經常遭受 DDOS 攻擊。本質上,它似乎是一個 HTTP 洪水攻擊首頁,導致伺服器執行大量內部請求並載入各種文件來創建頁面。洪流以每分鐘約 4000 個請求的速度達到峰值(典型吞吐量約為 500 rpm),導致我的伺服器在此過程中停機。

我的網路伺服器是 nginx,用作 gunicorn 應用程序伺服器的反向代理。

我還沒有使用 gunicorn 的安全參數:limit_request_line, limit_request_fields, limit_request_field_size)。但是我安裝了nginx fail2ban,並且有兩個監獄jail.local以確保阻止 HTTP 洪水:

[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

這個設置沒有幫助,我不知道為什麼。當我測試它時,我能夠阻止我的 IP,所以它絕對是功能性的。也許 HTTP 洪水俱有隨機 IP。

我可以採用什麼策略來阻止這種應用層 DDOS?作為一個新手,我還在糾結這一切。非常感謝專家的幫助!

我最終在 nginx 級別處理了這個問題。http {我在 in 中添加了以下內容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 {塊中(在任何location {塊之外):

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

到目前為止,這種配置對我來說效果很好。


注意:適用於 DoS,但不確定它對 DDoS 的支持程度。希望高手能指點一下。

引用自:https://serverfault.com/questions/845554