使用 iptables 为多个隔离网络设置 NAT

使用 iptables 为多个隔离网络设置 NAT

我有一台网关机器连接到多个内部网络,我想在这些网络上设置 NAT。但问题是这些网络需要彼此隔离,这一点我还没搞清楚。这是我的配置:

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

到目前为止,我已经将 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

但是,此配置允许 eth1 上的一台机器访问 eth2 上的另一台机器,尽管我没有明确指定允许此操作的规则。我如何隔离这些网络,或者最多只允许访问某些主机/端口?

答案1

您将链的策略设置FORWARDALLOW,因此即使链中没有任何内容匹配,也会允许流量。

您可能应该将其设置为DROP

答案2

正如对 M. Hampton 的回复中所述,您必须保留转发功能才能使 NAT 正常工作。

作为一种快速破解,我会尝试阻止内部子网之间的转发,例如将这些命令添加到您的子网中:

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

3 个内部子网会比较混乱,因为您将有 6 条阻止规则,而 4 条则相当可怕 :)。

相关内容