Nginx
通過網路伺服器配置處理 HTTP 洪水(Django 應用程序)
我維護的一個基於 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 的支持程度。希望高手能指點一下。