我有来自2个子网的数据包进入我的防火墙eth1:
10.111.12.0/24和10.10.100.0/24
我设置了这样的iptables规则:
iptables -A INPUT -i eth1 ! -s 10.111.12.0/24 -j DROP iptables -A INPUT -i eth1 ! -s 10.10.100.0/24 -j DROP
但是 – 第一个规则不允许检查第二个,因为10.10.100.0/24不是10.111.12.0/24,它匹配第一个规则。 如何解决它?
最简单的方法是标记允许的数据包,然后丢弃所有未标记的数据包:
iptables -t mangle -A PREROUTING -i eth1 -s 10.111.12.0/24 -j MARK --set-mark 1 iptables -t mangle -A PREROUTING -i eth1 -s 10.10.100.0/24 -j MARK --set-mark 1 iptables -t mangle -A PREROUTING -i eth1 -m mark ! --mark 1 -j DROP
你应该考虑可能有其他的数据包,你需要/想要通过。
链将是一个有用的方法在这里。 链条有点像子程序或函数。 RETURN只是意味着该数据包的控制将返回到前一个链,规则将继续进行评估。
# create a new chain iptables -t filter -N in_validnet # all incoming packets on eth1 are evaluated by the chain iptables -t filter -A INPUT -i eth1 -j in_validnet # packets from these networks are returned for further evaluation iptables -A in_validnet -s 10.111.12.0/24 -j RETURN iptables -A in_validnet -s 10.10.100.0/24 -j RETURN # everything else gets dropped iptables -A in_validnet -j DROP