我正在嘗試配置失敗2禁止在我的測試伺服器上。我只想暫時阻止任何嘗試探測我的網站的腳本機器人。所以所有有cgi-bin
、admin
、setup.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 )
這應該將一些字串綁定到更具體的位置