如果访问某些错误文件,如何正确配置fail2ban以禁止IP

Sal*_*ali 7 fail2ban

我正在尝试在我的测试服务器上配置fail2ban。我只想临时阻止任何试图探测我网站的脚本机器人。所以所有有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
Run Code Online (Sandbox Code Playgroud)

我也创造了apache-script-bots.conffilter.d文件夹,里面只有这里面:

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

重新启动fail2ban 时,它告诉我一切正常。但是当我尝试通过尝试触发它来测试我的监狱是否有效时:mydomain/main.php我看到我没有被监禁。

当我检查fail2ban的状态时,它告诉我我的监狱正在工作

fail2ban-client status
Status
|- Number of jail:  2
`- Jail list:       ssh, apache-script-bots
Run Code Online (Sandbox Code Playgroud)

我认为问题出在正则表达式上,但不明白为什么。

use*_*517 6

您需要告诉fail2ban(通过正则表达式)它会在日志条目中的哪个位置找到a,<HOST>以便它可以禁止该主机。对于位于行首的正常访问日志,因此

<HOST> -.*(w00tw00t|main.php|setup.php)
Run Code Online (Sandbox Code Playgroud)

会工作,但可能不会完全按照您的要求执行,因为它会匹配日志条目中任何位置的相关触发器。


你可能想尝试类似的东西

<HOST> -.*(/w00tw00t|/main.php |setup.php )
Run Code Online (Sandbox Code Playgroud)

这应该将一些字符串绑定到更具体的位置