Networking

這個 iptables NAT 可以從外部利用嗎?

  • July 30, 2013

您能否簡要了解一下這個簡單的 iptables/NAT-Setup,我相信它有一個相當嚴重的安全問題(由於過於簡單)。

在這個網路上,有一台連接網際網路的機器(執行 Debian Squeeze/2.6.32-5 和 iptables 1.4.8)充當 192.168/24 中少數客戶端的 NAT/網關。

機器有兩個網卡:

eth0: internet-faced
eth1: LAN-faced, 192.168.0.1, the default GW for 192.168/24

路由表是兩個 NICs-default,無需手動更改:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
(externalNet)   0.0.0.0         255.255.252.0   U     0      0        0 eth0
0.0.0.0         (externalGW)    0.0.0.0         UG    0      0        0 eth0

然後僅啟用 NAT ,僅通過這些操作,不再有 iptables 規則:

echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# (all iptables policies are ACCEPT)

這可以完成工作,但我在這裡錯過了幾件事,我認為這可能是一個安全問題:

  1. 完全沒有關於允許的源介面或源網路的限制
  2. 沒有防火牆部分,例如:

(將策略設置為 DROP)

/sbin/iptables -A FORWARD -i eth0 -o eth1 -m state –state RELATED,ESTABLISHED -j ACCEPT

/sbin/iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

因此,我不眠之夜的問題是,而第一個問題對我來說更重要:

  1. 同一 ISP 子網中將此機器設置為預設網關的任何人都可以使用此 NAT 服務嗎?
    我會說是的,因為沒有任何跡象表明傳入的外部連接(通過 eth0)應該與傳入的內部連接(通過 eth1)處理任何不同,只要輸出介面是 eth0 - 並且路由方式這適用於想要訪問網際網路的外部和內部客戶端。因此,如果我是對的,任何人都可以通過在此處對數據包進行 NAT 來使用這台機器作為開放代理。所以請告訴我這是否正確或為什麼不正確。

作為“修補程序”,我在 NAT 啟動命令中添加了“-s 192.168.0.0/24”選項。我想知道不使用此選項是否確實是一個安全問題,或者由於某些我不知道的機製而無關緊要。 2. 由於策略都是 ACCEPT,目前沒有限制將 eth1 轉發到 eth0(內部到外部)。但是,目前沒有限制只有 RELATED 和 ESTABLISHED 狀態從 eth0 轉發到 eth1(外部到內部)的有效含義是什麼?

換句話說,我應該將策略更改為 DROP 並應用我上面提到的兩個“防火牆”規則,還是缺少它們不會影響安全?

感謝您的澄清!

  1. 是的,但是,機器必須與您在 ISP 端位於同一子網中。但在這種情況下,攻擊者可以簡單地將他的源 IP 地址偽造為您的,或者使用未分配的地址。但是,當您編寫規則時,外部攻擊者可以瀏覽您的 LAN,但是他將不得不處理您的伺服器可能在返迴路徑上偽裝數據包的事實。因此,您應該使用 iptables 丟棄從 eth0 到 192.168.0/16 的數據包(不,在這裡使用策略路由為時已晚)。
  2. 轉發無效數據包可能會導致私有地址在 Internet 上洩漏,或未翻譯的數據包到達主機。MASQUERADE 可能拒絕偽裝/取消偽裝無效數據包,或者這些無效數據包甚至可能無法到達 nat 表。至少丟棄處於無效狀態的數據包通常是一個好主意。然後只接受來自 eth0 的 ESTABLISHED 或 RELATED 狀態的數據包。如果你的區域網路中的主機執行正常,我認為它不會有任何安全問題,但無論如何我都會這樣做。

引用自:https://serverfault.com/questions/457123