iptables 捕获到 DENY 条件,但无法捕获到位于该条件之前的 ACCEPT 条件

iptables 捕获到 DENY 条件,但无法捕获到位于该条件之前的 ACCEPT 条件

我的 iptables 防火墙遇到了一个奇怪的问题:如果我设置了两个连续的相同规则,第一个是ACCEPT,第二个是DENY,则传入的数据包会被拒绝(并记录为这样)。

为什么传入的数据包被第一条规则忽略,却被第二条规则捕获?

fwbuilder 视图在这里: 在此处输入图片描述

这是iptables转储:

Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state     RELATED,ESTABLISHED
In_RULE_0  all  --  0.0.0.0/0            0.0.0.0/0            state NEW
In_RULE_1  all  --  0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
In_RULE_0  all  --  0.0.0.0/0            0.0.0.0/0            state NEW
In_RULE_1  all  --  0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED

Chain In_RULE_0 (2 references)
target     prot opt source               destination         
LOG        all  --  0.0.0.0/0            0.0.0.0/0            LOG flags 0     level 6 prefix "FW RULE 0 -- ACCEPT "
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           

Chain In_RULE_1 (2 references)
target     prot opt source               destination         
LOG        all  --  0.0.0.0/0            0.0.0.0/0            LOG flags 0 level 6 prefix "FW RULE 1 -- DENY "
DROP       all  --  0.0.0.0/0            0.0.0.0/0  

我也尝试ACCEPT单独使用该规则,但没有成功。

我看到的唯一区别是DENY规则不是state NEW,但对于我已经配置且运行正常的数十个防火墙来说,规则是相同的。

答案1

您需要知道:带有-Iiptables 选项的规则会将规则放在列表的开头;带有-A选项的规则会将规则放在列表的末尾。

就你的情况而言:我认为你可能在两个(几乎相同的) iptables 规则中都使用了“-I”,第二条规则会插入到列表开头的第一条规则之前,因此你创建了一个规则列表,其规则顺序如下:

match -s x.x.x.x action DROP
match -s x.x.x.x action ACCEPT

由于您的数据包同时匹配这两条规则,因此实际操作表(驻留在 RAM 中)顺序中的第一个 ( DROP) 将生效。该顺序与 iptable 配置文件中的顺序无关。

交换顺序,结果就会有所不同。

答案2

好的,我找到了。结果发现我的 FW 完全没问题,但虚拟主机配置错误。我没有遇到任何错误,但不允许使用 iptables。当我允许它时,FW 开始运行……难怪我们无法在 iptables 级别找到错误……感谢大家的帮助 :)

答案3

当您使用时,您的 iptablesIn_RULE_0仅适用于新连接state NEW

它也设置在您的 FORWARD 链(通过服务器的数据包)上,而不是您的 INPUT 链(到服务器的数据包)上。

你是如何测试的?你正在 ping 服务器的某个特定接口吗?

您能否发布完整的输出:

iptables -vnL

尝试以下规则来记录 INPUT 链上的流量(ping 服务器接口)

iptables -I INPUT 1 -j In_RULE_0

相关内容