當您啟用 http 到 https 重定向時,使用 fail2ban 阻止 301 暴力破解是否明智?
最近我的伺服器開始受到匿名掃描器/蠻力的轟炸。
這就是攻擊後我的 nginx access.log 的樣子:
xxx.xxx.xxx.xxx - - [07/Sep/2019:23:30:16 +0200] "GET /phpMyAdmin/index.php HTTP/1.1" 404 548 "-" "Mozilla/5.0.. xxx.xxx.xxx.xxx - - [07/Sep/2019:23:30:18 +0200] "GET /admin/index.php HTTP/1.1" 404 548 "-" "Mozilla/5.0..
連同他們試圖訪問的大量其他網址/管理頁面/隨機名稱。我做了一些研究,fail2ban 出現了。所以我安裝了它。
我把它打開了一段時間,但攻擊又發生了。我意識到預設設置
[nginx-botsearch]
並不能擷取所有攻擊,更不用說它的日誌路徑配置錯誤了。我做了一些Google搜尋並確定了這個自定義過濾器:
# /etc/fail2ban/jail.local [nginx-404-errors] enabled = true port = http,https logpath = /var/log/nginx/*.log maxretry = 2 # /etc/fail2ban/filter.d/nginx-404-errors.conf [Definition] failregex = ^<HOST>.*"(GET|POST|HEAD).*" (404|444|403|400) .*$ ignoreregex =
這工作得很好,但攻擊者/s 決定點擊 http。但問題是我在 nginx 上有一個 http 到 https 的重定向規則。
server { listen 80; server_name example.com www.example.com; return 301 https://$server_name$request_uri; }
所以現在我得到了大量的 301 重定向登錄
access.log
。我想也許我應該在301
上面使用的正則表達式中添加一個。所以現在是:failregex = ^<HOST>.*"(GET|POST|HEAD).*" (404|444|403|400|301) .*$
攻擊暫時停止。但我擔心普通訪問者在嘗試通過 http 訪問該站點時可能會遇到麻煩,而 fail2ban 可能會選擇他們。
這是我應該減輕這種蠻力攻擊的方式嗎?還是我應該採取不同的路線?
我會考慮您的頁面如何在 HTML 中連結。如果您的訪問者只獲得https://-Links,一旦他升級到 https 的連接,您就可以保持 301-Bans 處於活動狀態。如果您網站上的每一次點擊都會導致 301 重定向到它的 https 等效項,那麼這樣做顯然是不明智的。另外,我建議將 301 的合法數量增加到 10 或 15。
更成問題的是僅 2 次點擊 404 頁面後的禁令。這將使在您的網站上使用內容管理系統變得非常困難,因為每次嘗試連結到不存在的圖像或 URL 都會導致 BAN。將有效限制提高到兩位數。十個 404 請求不會破壞您的伺服器。即使在合法使用情況下,它們也會經常發生,尤其是在多語言站點、缺少 favicon.ico、新頁面部署、延遲圖像上傳等…