iptables,子网规则覆盖ip规则

iptables,子网规则覆盖ip规则

我想要DROP来自192.168.112.0/24带有目的地的子网的所有数据包192.168.112.0/24,但我只想允许访问特定的目的地 ( 192.168.112.253)。

我正在使用以下规则,第一个 ( DROP) 规则按预期工作,丢弃所有数据包,但第二个 ( ACCEPT) 规则不允许特定目的地的数据包通过。

iptables -I FORWARD -s 192.168.112.0/24 -d 192.168.112.0/24 -j DROP
iptables -I FORWARD -s 192.168.112.0/24 -d 192.168.112.253 -j ACCEPT

在此输入图像描述

是否有任何原因导致第一条规则 ( ACCEPT) 被忽略?

答案1

我无法重现你的问题。

我有一个主人在172.17.0.2/16。最初,它可以到达192.168.1.0/24网络上的任何主机:

/ # ping -c1 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: seq=0 ttl=63 time=0.350 ms

--- 192.168.1.1 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.350/0.350/0.350 ms
/ # ping -c1 192.168.1.6
PING 192.168.1.6 (192.168.1.6): 56 data bytes
64 bytes from 192.168.1.6: seq=0 ttl=63 time=6.690 ms

--- 192.168.1.6 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 6.690/6.690/6.690 ms

如果在中间路由器上我添加此规则:

iptables -I FORWARD -s 172.17.0.0/16 -d 192.168.1.0/24 -j DROP

然后该主机将无法再访问192.168.1.0/24网络上的任何主机:

/ # ping -c1 192.118.1.1
PING 192.118.1.1 (192.118.1.1): 51 data bytes

--- 192.118.1.1 ping statistics ---
1 packets transmitted, 0 packets received, 100% packet loss

但如果我添加适当的ACCEPT规则:

iptables -I FORWARD -s 172.17.0.0/16 -d 192.168.1.1 -j ACCEPT

然后我恢复了以下连接192.168.1.1

/ # ping -c1 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: seq=0 ttl=63 time=0.484 ms

--- 192.168.1.1 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.484/0.484/0.484 ms

当与网络上其他主机的连接192.168.1.0/24继续被阻止时:

/ # ping -c1 192.168.1.6
PING 192.168.1.6 (192.168.1.6): 56 data bytes

--- 192.168.1.6 ping statistics ---
1 packets transmitted, 0 packets received, 100% packet loss

添加这两条规则后,FORWARD链看起来像:

# iptables -S FORWARD
-P FORWARD ACCEPT
-A FORWARD -s 172.17.0.0/16 -d 192.168.1.1/32 -j ACCEPT
-A FORWARD -s 172.17.0.0/16 -d 192.168.1.0/24 -j DROP

答案2

您错过的主要事情是您还需要一条规则来允许来自to 的ACCEPT回复:192.168.112.253192.168.112.0/24

-I FORWARD -s 192.168.112.253 -d 192.168.112.0/24 -j ACCEPT

这两个ACCEPT规则都需要放置在规则之前(即-I之后)DROP,因为192.168.112.0/24包含192.168.112.253,这意味着您希望列入“白名单”的流量将被它覆盖。因此,如果与first匹配,则ACCEPT规则不会产生任何作用。

不过,这两个规则本身的顺序ACCEPT并不重要,因为它们不会相互“重叠”。

顺便说一句,这里采用的方法有两个注意事项。首先,如您所见,ACCEPT每个“对”流量需要两个 ( ) 规则。其次,它允许192.168.112.253启动与192.168.112.0/24. (话虽如此,您可能认为它们都不是实际问题。)

通常我们只是有以下允许所有回复流量的“有状态”规则:

-I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

(准确地说,ESTABLISHED除了第一个发起连接的流量外,两个方向的流量都将具有以下状态。RELATED用于某些已识别的应答流量,其中端口号对不仅交换而且与原始流量不同。其,含义“包含或”,即使流量不会同时处于两种状态,但请考虑括号“AFAIK”内的信息。)

相关内容