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 via 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)……?
如此 Netfilter 示意圖所示,數據包根據
filter/FORWARD
之前的規則進行評估,因此仍然可以看到未修改的源 IP 地址。因此,無需考慮複雜性或特殊設置,甚至 NAT。在第二個路由器上添加的防火牆規則很簡單:nat/POSTROUTING``FORWARD
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 希望為某些源或目的地在專用網路和內部網路之間授予一些例外。請進一步檢查使用有狀態防火牆的各種範例 ,或簡單地搜尋“有狀態 iptables”(請注意,在這些範例中,模組現在已被模組取代)。
state
conntrack