Nginx
使用 Nginx 緩解 404 炸彈
我遇到了 404 個查詢,這導致我的機器停機。靠近我所有的頁面都是 http 記憶體的,我有一些基本的 Dos 保護
limit_conn_zone $http_x_forwarded_for zone=addr:10m; limit_conn addr 8; limit_req_zone $http_x_forwarded_for zone=one:10m rate=2r/s; limit_req zone=one burst=50; client_body_timeout 5s; client_header_timeout 5s; send_timeout 10s;
除了上述之外,我還能做些什麼來防止這些 404 攻擊?
設置
limit_req
並limit_conn
在nginx中之後,您是否在虛擬主機中啟用了它們?如:server { # ... location / { limit_req zone=one; limit_conn addr 10; # ... } }
此外,fail2ban 是一個日誌解析器,用於在防火牆(iptables)中自動創建動態規則。您可以在 fail2ban 中創建過濾器和操作,過濾 404 的源 IP 並在多次嘗試後阻止它們,或者您可以過濾 limit_req 和 limit_conn 日誌,以便您可以禁止這些 IP(阻止 404 客戶端 IP 可能會導致一些不需要的塊)。
vim /etc/fail2ban/jail.d/nginx.conf
複製這個:
[nginx-req-limit] enabled = true filter = nginx-req-limit action = iptables-multiport[name=ReqLimit, port="http,https", protocol=tcp] logpath = /var/log/nginx/*error.log findtime = 600 bantime = 7200 maxretry = 10
findtime
是 中發生的時間(以秒為單位)maxretry
,在這種情況下,它將在 10 分鐘(600 秒)內發生 10 個事件後觸發。bantime
是時候在防火牆中將 IP 列入黑名單了。同樣在幾秒鐘內。在這種情況下,它將阻止有問題的 IP 2 小時(7200 秒)。logpath
是您在nginx中為虛擬主機配置的錯誤日誌。確保
jail.conf
包含jail.d/*.conf
引用並重新啟動服務:
service fail2ban restart
這應該可以幫助您避免 DDoS 攻擊。
另一個值得考慮的選擇是使用上面評論中所述的 CDN。Cloudflare 有一個很好的免費版本,它可以提供很多幫助,它有一個 Web 應用程序防火牆,可以阻止一些不良機器人和東西。專業版/商業版有更多選擇,但要花錢。