如何正確設定fail2ban以在存取某些錯誤檔案時禁止IP

如何正確設定fail2ban以在存取某些錯誤檔案時禁止IP

我正在嘗試配置失敗2禁止在我的測試伺服器上。我只想暫時阻止任何嘗試探測我的網站的腳本機器人。所以所有有cgi-binadminsetup.php等等的東西。我之前查看了所有產生 404 錯誤的內容,例如grep "HTTP/1.1\" 404" access.log | awk '{print $7 } ' | sort | uniq -c | sort -n我的 access.log 中的內容。

我確保我的所有網址都不包含這些部分。

所以安裝後我創建了jail.local並且沒有對jail.conf.我的文件如下所示(我想阻止 IP 10 分鐘):

[DEFAULT]
ignoreip  = 127.0.0.1
bantime   = 600
destemail = myemail
banaction = iptables-multiport
action    = %(action_mwl)s


[apache-script-bots]
enabled  = true
port     = http,https
filter   = apache-script-bots
logpath  = /var/log/apache2/access.log
maxretry = 1

我還在資料夾apache-script-bots.conf中創建了它filter.d,裡面只有這個:

[Definition]
failregex = (admin|setup.php|main.php|w00tw00t|web-console|.jsp|manager|cgi-bin)
ignoreregex =

當重新啟動fail2ban時,它顯示一切正常。但是,當我嘗試透過以下方式觸發它來測試我的監獄是否有效時:mydomain/main.php我發現我沒有被監禁。

當我檢查fail2ban的狀態時,它告訴我我的監獄正在工作

fail2ban-client status
Status
|- Number of jail:  2
`- Jail list:       ssh, apache-script-bots

我認為問題出在正規表示式上,但無法理解為什麼。

答案1

您需要告訴fail2ban(透過正規表示式)它將在日誌條目中的哪個位置找到a,<HOST>以便它可以禁止該主機。對於正常的存取日誌,該日誌位於行的開頭,因此

<HOST> -.*(w00tw00t|main.php|setup.php)

可以工作,但可能無法完全滿足您的要求,因為它會匹配日誌條目中任何位置的相關觸發器。


你可能想嘗試類似的事情

<HOST> -.*(/w00tw00t|/main.php |setup.php )

這應該將一些字串綁定到更具體的位置

相關內容