Fail2ban
如果它正在訪問一些錯誤的文件,如何正確配置fail2ban以禁止IP
我正在嘗試在我的測試伺服器上配置fail2ban 。我只想暫時阻止任何試圖探測我的網站的腳本機器人。所以所有有
cgi-bin
,admin
,setup.php
等等。我之前grep "HTTP/1.1\" 404" access.log | awk '{print $7 } ' | sort | uniq -c | sort -n
在我的 access.log 中查看了所有生成 404 錯誤的內容。我確保我的網址都沒有這些部分。
因此,安裝後我創建
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
我認為問題出在正則表達式上,但不明白為什麼。
您需要告訴fail2ban(通過正則表達式)它將在日誌條目中的哪個位置找到a
<HOST>
,以便它可以禁止該主機。對於將位於行首的正常訪問日誌,因此<HOST> -.*(w00tw00t|main.php|setup.php)
會起作用,但可能不會完全按照您的意願行事,因為它會匹配日誌條目中任何位置的相關觸發器。
您可能想嘗試類似的東西
<HOST> -.*(/w00tw00t|/main.php |setup.php )
這應該將一些字元串綁定到更具體的位置