iptables SNAT 限制到特定网络

iptables SNAT 限制到特定网络

我有一个无法解决的问题,因为坦白说我不知道​​如何解决,我不经常使用 iptables....

我有一个主要的 Linux 路由器,它代表互联网访问的网关,并将流量从(WAN IP)123.123.123.0/30 -> 传递到 234.234.234.0/23(内部)网络。在内部网络 234.234.234.0 内有另一个具有 3 个接口的 Linux 路由器。为了澄清起见,我们可以说:234.234.234.254/23 eth0、192.168.1.1/24 eth1 和 172.16.0.1/24 eth2。所以原理图看起来像:

WAN:123.123.123.2 (eth0) -> (eth1) LAN:234.234.234.1/23 // (eth2) LAN:234.234.234.2 -> (eth0) LAN:192.168.0.1/24 和 (eth1) LAN:172.16。 0.1/24

显然,只需设置主路由器0.0.0.0 0.0.0.0 上通过123.123.123.1/30(接口为ISP网关)的默认路由即可

我已经从 eth0 和 eth1 设置了 SNAT,或者我应该说(192.168.1.0/24 和 172.16.0.0/24)通过 234.234.234.254/23 eth2 出去

例子:

iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 234.234.234.2

现在,来自两个专用网络的所有流量都通过 234.234.234.254 发出,这很好。我可以访问我想要的互联网,但问题是从专用网络我也可以访问 234.234.234.0/23 网络,这是我不想要的。我想将整个流量隔离到外部,但无法到达网络 234.234.234.0/23 中的任何计算机

我怎样才能做到这一点?

缺少哪些规则来限制流量流出,或者我应该说只允许“互联网”访问,但不允许“内联网”(网络 234.234.234.0/23)...?

答案1

filter/FORWARD如之前nat/POSTROUTING所见,根据之前的规则评估数据包在这个 Netfilter 原理图中,因此FORWARD仍然可以看到未修改的源IP地址。因此,无需考虑复杂性或特殊设置,甚至无需考虑 NAT。在第二个路由器上添加的防火墙规则很简单:

iptables -A FORWARD -s 192.168.1.0/24 -d 234.234.234.0/23 -j REJECT
iptables -A FORWARD -s 172.16.0.0/24 -d 234.234.234.0/23 -j REJECT

可能需要考虑许多变化,这些变化在这里都是可能的。例如,您可以替换-s 192.168.1.0/24-i eth0-s 172.16.0.0/24-i eth1

反向方向恰好受到 NAT 的“保护”。无论如何,您应该添加更多规则来强制执行它(并保护专用网络免受内部网络的影响),但是您最好考虑一组真正的有状态规则,它可以跟踪打开的流量,然后简化您的情况d 希望在专用网络和内部网络之间为某些源或目的地授予一些例外。请进一步检查各种例子 使用 有状态的 防火墙,或者只是搜索“stateful iptables”(请注意,在这些示例中state模块现在被取代conntrack模块)。

相关内容