iptables 规则未按预期工作

iptables 规则未按预期工作

我无法让这一规则正常运作。

我的界面:

#WAN
auto wan0
iface wan0 inet dhcp

#LAN
auto lan0.7
iface lan0.7 inet static
    address 172.17.7.1
    netmask 255.255.255.0
    vlan-raw-device lan0

#DMZ
auto lan0.17
iface lan0.17 inet static
    address 172.17.17.1
    netmask 255.255.255.0
    vlan-raw-device lan0

我遇到问题的 iptables 规则:

iptables -A FORWARD -i lan0.17 -o lan0.7 -j DROP

这里的目标是阻止 DMZ 流量流向 LAN,但反之亦然。上述规则也将 LAN 切至 DMZ。我在这里做错了什么?

输出iptables -nvL

Chain INPUT (policy ACCEPT 578 packets, 70339 bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                                                                                                                                                                              

Chain FORWARD (policy ACCEPT 2062 packets, 173K bytes)
 pkts bytes target     prot opt in     out     source               destination                                                                                                                                                                                                                                              
  164 13776 DROP       0    --  lan0.17 lan0.7  0.0.0.0/0            0.0.0.0/0                                                                                                                                                                                                                                               

Chain OUTPUT (policy ACCEPT 402 packets, 33334 bytes)
 pkts bytes target     prot opt in     out     source               destination

答案1

流量是双向的,特别是对于 TCP:要从 lan0.7 到 lan0.17 获得流量,回复流量,从 lan0.17 到 lan0.7,从初始回复开始:SYN/ACK,必须被允许,否则通信无法进行(LAN 客户端将具有 SYN-SENT 状态,而 DMZ 服务器将具有 SYN-RECV 状态)。因此使用国家统治查询Netfilter的conntrack(跟踪系统看到的所有流状态)首先允许回复流量(以及相关流量,例如 ICMP 错误)。剩下的不是回复流量:根据需要对其进行过滤,例如从 lan0.17 删除到 lan0.7 未回复的流量(在之前的规则中已接受):

iptables -A FORWARD -i lan0.17 -o lan0.7 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i lan0.17 -o lan0.7 -j DROP

实际上,没有理由进一步过滤 conntrack 状态规则:它可以用于多个同时发生的情况,并且一个规则可以处理所有情况。所以不要说明它适用于哪些接口:

iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i lan0.17 -o lan0.7 -j DROP

相关内容