我正在尝试在我的testing服务器上configurationfail2ban 。 我只想暂时阻止任何试图探测我的网站的脚本机器人。 所以一切都有cgi-bin
, admin
, setup.php
等等。 我以前回顾了所有在我的access.log中用grep "HTTP/1.1\" 404" access.log | awk '{print $7 } ' | sort | uniq -c | sort -n
生成404错误。
我确保我的网站没有一个没有这些部分。
所以在安装之后,我创build了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
我还在filter.d
文件夹中创build了apache-script-bots.conf
,其中只有这个:
[Definition] failregex = (admin|setup.php|main.php|w00tw00t|web-console|.jsp|manager|cgi-bin) ignoreregex =
当重新启动fail2ban它显示我一切正常。 但是,当我尝试用mydomain/main.php
来testing我的监狱是否工作时,我发现我没有被监禁。
当我检查fail2ban的状态,它告诉我,我的监狱正在工作
fail2ban-client status Status |- Number of jail: 2 `- Jail list: ssh, apache-script-bots
我认为问题是用正则expression式,但不明白为什么。
你需要告诉fail2ban(通过正则expression式)在日志条目中的哪个地方find一个<HOST>
这样它就可以禁止该主机。 对于一个正常的访问日志,这将是在行的开始
<HOST> -.*(w00tw00t|main.php|setup.php)
会工作,但可能不会做你想要的,因为它会匹配日志条目中任何地方的相关触发器。
你可能想尝试类似的东西
<HOST> -.*(/w00tw00t|/main.php |setup.php )
这应该把一些string连接到更具体的位置