Fail2ban

如果它正在訪問一些錯誤的文件,如何正確配置fail2ban以禁止IP

  • May 14, 2014

我正在嘗試在我的測試伺服器上配置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.conffilter.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 )

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

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