使用iptables为多个隔离networking设置NAT

我有一个网关机器连接到多个内部networking,我想build立NAT。 但是,这些networking需要彼此隔离,这是我无法想象的。 这是我的configuration:

eth0:192.168.1.0/28(上行),网关分配为192.168.1.1
eth1:192.168.1.16/28(下游1),网关分配为192.168.1.16
eth2:192.168.1.32/28(下行2),网关分配为192.168.1.32

到目前为止,我已经configuration了iptables来允许默认链:

iptables -P INPUT ALLOW iptables -P OUTPUT ALLOW iptables -P FORWARD ALLOW 

然后,我在内核中启用了IP转发,并设置了iptables:

 echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.1 iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT iptables -A FORWARD -i eth2 -o eth0 -j ACCEPT 

但是,这种configuration允许eth1上的一台机器访问eth2上的另一台机器,即使我没有明确指定一个允许这样做的规则。 我如何隔离这些networking,或者至多只允许访问某些主机/端口?

您将FORWARD链的策略设置为ALLOW ,因此即使链中没有任何内容匹配,stream量也将被允许。

你可能应该把它设置为DROP

正如在对汉普顿(M. Hampton)的回应中指出的那样,你必须保持NAT的转发function。

作为一个快速入侵,我会尝试阻止内部子网之间的转发,例如。 添加这些命令给你:

 iptables -A FORWARD -i eth1 -o eth2 -j DENY iptables -A FORWARD -i eth2 -o eth1 -j DENY 

这将是3个内部子网的混乱,因为你将有6个阻塞规则,并相当可怕的4 :)。