fail2ban 规则导致“iptables 返回 200”错误消息

fail2ban 规则导致“iptables 返回 200”错误消息

我刚刚尝试添加一个新的 fail2ban 规则,该规则应该扫描 Apache2 错误日志以查找可疑的文件访问尝试(尝试访问三个不存在的常见登录 URL 的人通常没有良好的意图)。

为此,我在 jail.local 文件中添加了一条新规则:

[apache-suspiciousfiles]
enabled   = true
port      = http,https
filter    = apache-suspiciousfiles
banaction = iptables-allports
action    = %(action_mwl)s
logpath   = /var/log/apache2/error*.log
maxretry  = 3

然而,这在我的日志中出现了一条意外的错误消息:

2014-02-10 13:28:51,450 fail2ban.jail   : INFO   Jail 'apache-suspiciousfiles' started
2014-02-10 13:28:51,690 fail2ban.actions.action: ERROR  iptables -N fail2ban-apache-suspiciousfiles
iptables -A fail2ban-apache-suspiciousfiles -j RETURN
iptables -I INPUT -p tcp -j fail2ban-apache-suspiciousfiles returned 200

在此之前,我已经使用 fail2ban-regex 检查过过滤器,因此我很确定那里面没有东西。

(注:这是“退回 200”。很多人似乎对 100 有疑问,但这是关于200

答案1

我快速地在谷歌上搜索了一下,似乎没有任何答案能帮助我,所以我只是尝试了首先想到的办法:

我重命名了该规则并使其名称更短:

[apache-suspicious]
enabled   = true
port      = http,https
filter    = apache-suspicious
banaction = iptables-allports
action    = %(action_mwl)s
logpath   = /var/log/apache2/error*.log
maxretry  = 3

(我将规则从 apache-suspiciousfiles 重命名为 apache-suspicious)

这确实对我有帮助。现在一切都正常启动,我的规则也开始起作用了。

答案2

如果您的配置同时产生“多端口”和“全部”,也会发生这种情况(“全部”可用于解决从 tcp 到 udp 的机器人切换问题,这会在日志中填充“警告:...已被禁止”)。

$ sudo iptables -I INPUT -p all -m multiport --dports ssh -j fail2ban-ssh
iptables: multiport needs `-p tcp', `-p udp', `-p udplite', `-p sctp' or `-p dccp'

$ echo $?
2

$ cat fail2ban.log
iptables -I INPUT -p all -m multiport --dports ssh -j fail2ban-ssh returned 200

答案3

对我来说,200 是因为无法解析发送到 iptables 的 action.d 规则。

我的 iptables action.d 规则如下

[Definition]
actionstart = iptables -N fail2ban-<name>
              iptables -A fail2ban-<name> -j RETURN
              iptables -I INPUT -p <protocol> --dport <port> -j fail2ban-<name>
##comments and more actions removed for brevity
[Init]
name = default
#port = ssh
protocol = any

注意我的端口变量是如何被注释掉的!我不知道 iptables 会输入什么,我假设它会是空白的。无论它的值是什么,它都不会是 iptables 可以理解的已知端口。

我必须编辑我的规则以删除 --dport 位,因为我实际上并不打算传递端口,然后就可以加载而不会导致它返回 200。

答案4

就我的情况而言,我的规则名称足够短,但 200 错误仍然存​​在。

我的错误是试图用一个iptables[]操作禁止多个端口,但该操作只对单个端口有效。一旦我将操作改为使用iptables-multiport[],错误就停止了:

action = iptables[name=HTTPD, port="http,https", protocol=tcp]  # < bad
action = iptables-multiport[name=HTTPD, port="http,https", protocol=tcp] # < good

错误停止了。

相关内容