iptables:DROP 策略如何与自定义链配合使用

iptables:DROP 策略如何与自定义链配合使用

我一直在为一个项目开发 iptables。iptables 是通过自定义规则链为不同的接口实现的。由于接受规则的声明,INPUT 的默认策略设置为 DROP。现在我的问题是:即使规则应该匹配,流量似乎也没有通过。如果我将相应的规则放入 INPUT 链,它似乎可以工作。所以我对自定义链中 drop 的解释有点困惑。

以下是不起作用的示例(我删除了不必要的信息):

Chain INPUT (policy DROP)
target     prot opt source               destination
LOINPUT    all  --  0.0.0.0/0            0.0.0.0/0
M2M_INPUT  all  --  0.0.0.0/0            0.0.0.0/0
NE_INPUT   all  --  0.0.0.0/0            0.0.0.0/0

Chain NE_INPUT (1 references)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            10.196.95.208       state RELATED,ESTABLISHED
....
ACCEPT     tcp  --  10.196.95.74         10.196.95.208       tcp dpt:22
....

当 ssh 从 10.196.95.74 向 10.196.95.208 进行时,它不起作用。

为了进一步测试,我添加了从 NE_INPUT 到 INPUT 的行,并且它可以正常工作。

Chain INPUT (policy DROP)
num  target     prot opt source               destination
LOINPUT    all  --  0.0.0.0/0            0.0.0.0/0
M2M_INPUT  all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     tcp  --  10.196.95.74         10.196.95.208       tcp dpt:22
NE_INPUT   all  --  0.0.0.0/0            0.0.0.0/0

据我所知,当没有规则匹配时,DROP 策略将“激活”。因此,我预计 iptables 将解析每个规则(在每个规则链中),并且如果没有规则匹配,则将激活 DROP 策略。

但就我的测试而言,DROP 策略无需解析每个规则链(在我的情况下是 NE_INPUT)即可激活。

有任何提示/解释吗?提前致谢。

[更新日期:15/06]:好的,经过进一步分析,我确认 DROP 工作正常,但问题似乎与自定义链更相关。

[更新日期:6 月 16 日]: 似乎自定义链的声明是导致错误行为的原因。当声明相应网络接口 (-i eth1) 的链时,它不起作用 (NE_INPUT 链的 ping NOK / ssh NOK) 但是如果我声明分配给此接口的 IP 地址而不是接口,ping 效果会更好。

挪威克朗:

Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
3        0     0 NE_INPUT   all  --  eth1   *       0.0.0.0/0            0.0.0.0/0

好的:

Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
3        5   420 NE_INPUT   all  --  *      *       0.0.0.0/0            10.196.95.208

那么数据包是如何通过 iptables 进行解释的呢?正常情况下,到达接口 eth1 的数据包应该由 NE_INPUT 处理,而不是被丢弃。因此,当通过目标 IP 寻址时,这些数据包似乎得到了正确的处理。

[更新日期:17/06]:遵循 ip link & ip address 的输出

# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:50:56:8e:17:33 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:50:56:8e:9a:f9 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:50:56:8e:2e:9b brd ff:ff:ff:ff:ff:ff
5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:50:56:8e:de:03 brd ff:ff:ff:ff:ff:ff

# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:50:56:8e:17:33 brd ff:ff:ff:ff:ff:ff
inet 10.196.95.207/24 brd 10.196.95.255 scope global eth0
inet6 fe80::250:56ff:fe8e:1733/64 scope link valid_lft forever preferred_lft forever

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:50:56:8e:9a:f9 brd ff:ff:ff:ff:ff:ff
inet 10.196.95.208/24 brd 10.196.95.255 scope global eth1
inet6 fe80::250:56ff:fe8e:9af9/64 scope link  valid_lft forever preferred_lft forever

4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:50:56:8e:2e:9b brd ff:ff:ff:ff:ff:ff
inet 10.109.197.207/24 brd 10.109.197.255 scope global eth2
inet6 fe80::250:56ff:fe8e:2e9b/64 scope link valid_lft forever preferred_lft forever

5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:50:56:8e:de:03 brd ff:ff:ff:ff:ff:ff
inet 10.79.105.207/24 brd 10.79.105.255 scope global eth3
inet6 fe80::250:56ff:fe8e:de03/64 scope link valid_lft forever preferred_lft forever

答案1

您的推理是正确的:如果在自定义链中匹配 DROP 规则,则数据包将被丢弃并且不会返回到内置链(在您的情况下为 INPUT)。

我怀疑您删除的那些“非必要”行可能出了问题。

尝试在尝试 ssh 到您的机器时使用 来调试防火墙iptables -L -v -t filter。它将为您提供每条规则匹配次数的计数器。

您的 nat 和 mangle 表是否为空,并且在所有内置链中都有 ACCEPT 策略?

答案2

对于自定义链,我看到的情况是,如果链中没有匹配项,则自定义链将采用默认策略。

相关内容