我想要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.253
192.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”内的信息。)