iptables从2个子网中进行欺骗

我有来自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