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

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

我正在尝试配置失败2ban在我的测试服务器上。我只想暂时阻止任何试图探测我网站的脚本机器人。所以所有带有cgi-binadminsetup.php的内容。我之前查看了所有产生 404 错误的内容,其中的内容类似于grep "HTTP/1.1\" 404" access.log | awk '{print $7 } ' | sort | uniq -c | sort -n我的 access.log。

我确保我的 URL 都不包含这些部分。

因此,安装后我创建了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 时,它显示一切正常。但当我尝试通过以下方式触发 jail 以测试它是否正常工作时:mydomain/main.php我发现我没有被 jailed。

当我检查 fail2ban 的状态时,它告诉我 jail 正在运行

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

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

答案1

您需要通过正则表达式告诉 fail2ban 它将在哪里找到日志条目,<HOST>以便它可以禁止该主机。对于普通访问日志,它将位于行的开头,因此

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

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


你可能想尝试一下

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

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

相关内容