Nginx

使用 Nginx 緩解 404 炸彈

  • May 15, 2018

我遇到了 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_reqlimit_connnginx中之後,您是否在虛擬主機中啟用了它們?如:

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 應用程序防火牆,可以阻止一些不良機器人和東西。專業版/商業版有更多選擇,但要花錢。

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