我正在尝试配置失败2ban在我的测试服务器上。我只想暂时阻止任何试图探测我网站的脚本机器人。所以所有带有cgi-bin
、admin
等setup.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 )
这应该将一些字符串绑定到更具体的位置