fail2ban
我在 Ubuntu 13.10 服务器上有以下配置片段:
#jail.conf
[apache-getphp]
enabled = true
port = http,https
filter = apache-getphp
action = iptables-multiport[name=apache-getphp, port="http,https", protocol=tcp]
mail-whois[name=apache-getphp, dest=root]
logpath = /srv/apache/log/access.log
maxretry = 1
#filter.d/apache-getphp.conf
[Definition]
failregex = ^<HOST> - - (?:\[[^]]*\] )+\"(GET|POST) /(?i)(PMA|phptest|phpmyadmin|myadmin|mysql|mysqladmin|sqladmin|mypma|admin|xampp|mysqldb|mydb|db|pmadb|phpmyadmin1|phpmyadmin2|cgi-bin)
ignoreregex =
我知道正则表达式很好,因为如果我在 access.log 上运行测试命令:
fail2ban-regex /srv/apache/log/access.log /etc/fail2ban/filter.d/apache-getphp.conf
我得到了多次命中的成功结果,并且在我的日志中我看到了类似的条目
187.192.89.147 - - [13/Apr/2014:11:36:03 +0100] "GET /phpTest/zologize/axa.php HTTP/1.1" 301 585 "-" "-"
187.192.89.147 - - [13/Apr/2014:11:36:03 +0100] "GET /phpMyAdmin/scripts/setup.php HTTP/1.1" 301 593 "-" "-"
其次,我知道电子邮件配置正确,因为每次我service fail2ban restart
都会收到每个过滤器停止/启动的电子邮件。
然而,尽管如此,当其中一个请求进入时,似乎没有采取任何行动。没有带有 whois 的电子邮件,iptables 中也没有条目。可能是什么阻止了 fail2ban 采取行动?(一切看起来都井然有序fail2ban-client -d
,我可以看到链已经加载iptables -L
)
答案1
我遇到过类似的问题。解决方案似乎很简单 - 在 jail.conf 文件中,我启用了两个类似的 jail - “Apache” 和 “Apache Multiport”。两个 jail 都使用相同的过滤器和相同的日志文件作为输入。注释掉 jail “Apache Multiport” 后,fail2ban 开始正确匹配日志文件中的正则表达式。
PS. 我没有在 failregex 中使用引号,并且我使用的是 fail2ban 0.9.0.dev。