我正在尝试使用 fail2ban 阻止某些恶意机器人攻击我的网站。我一开始只是在 jail.local 中启用默认的“apache-badbots”(我确实更改了日志路径以匹配我自己的日志和它发送报告的用户)
enabled = true filter = apache-badbots action = iptables-multiport[name=BadBots, port="http,https"] sendmail-buffered[name=BadBots, lines=5, dest=jisti] logpath = /var/logs/httpd/access_log bantime = 172800 maxretry = 1
我重启了 fail2ban,然后收到一封电子邮件,说 jail 已启动。然而,当我查看日志时,其中一个恶意机器人攻击了该网站,而 fail2ban 却没有采取任何行动。
因此,我检查了过滤器中的 apache-badbots.conf。我得出的结论是,正则表达式可能与我使用的自定义日志格式不匹配,也不是在寻找攻击我网站的特定恶意机器人。我修改了 failregex,然后使用
fail2ban-regex /var/log/httpd/access_log /etc/fail2ban/filter.d/apache-badbots.conf
这报告成功,匹配了 300 多个。我心想,哇哦。我重启了 fail2ban。不久之后,我看到机器人再次攻击该网站,而 fail2ban 什么也没做。我检查了 iptables,只是想看看它是否在做某事,但 iptables 规则却错了
iptables -S -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-BadBots -N fail2ban-SSH -N fail2ban-php-url-open -A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH -A fail2ban-BadBots -j RETURN -A fail2ban-SSH -j RETURN -A fail2ban-php-url-open -j RETURN
另外,我应该提到,当它阻止 SSH 攻击时,它确实正确地添加了 iptables 规则。所以有些东西确实有效,只是 apache-badbots 不行。
接下来,我尝试将 fail2ban 的日志设置为调试,并读取 fail2ban.log。不幸的是,那里没有任何有用的信息。有日志条目记录 jail 启动和定义正确的正则表达式以及定义操作。但是,没有日志条目记录 apache-badbots jail 匹配并针对任何 IP 采取行动。
另外我要说的是,SSH jail 似乎运行良好,所以 fail2ban 确实可以在该机器上运行,只是 apache-badbots jail 不行。
我需要做什么才能让它工作?
答案1
在你的 jail.local 中,你将 fail2ban 指向/var/logs/httpd/access_log代替/var/log/httpd/access_log就像你的正则表达式测试一样。