如何正确configurationfail2ban禁止IP访问一些错误的文件

我正在尝试在我的testing服务器上configurationfail2ban 。 我只想暂时阻止任何试图探测我的网站的脚本机器人。 所以一切都有cgi-binadminsetup.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连接到更具体的位置