Iptables

IPtables NAT 謎題:為什麼來自防火牆主機的流量被 NAT,即使它不是來自規定的源地址之一?

  • December 16, 2013

我執行一個小型網路,其中 linux 網路/郵件伺服器還為 Windows 框的集合提供 NAT。其中一台 Windows 機器顯然行為不端(ZeroAccess 殭屍網路,即使我在使用 Norton PowerEraser 時找不到任何問題,並且在數週的日誌記錄中只能在 /var/syslog 中找到 3 個輸出埠 16465 數據包)。出於某種原因,設置防火牆規則以丟棄所有傳出的 16465 數據包也不能解決問題,但這是一個不相關的問題。

此問題導致郵件伺服器被列入黑名單,例如 spamhaus.org。由於找不到受感染的 Windows 主機,我想到了使用 IP 別名通過不同的 IP 地址發送 NAT 流量的想法。

外部介面:

eth0:   216.82.212.230
eth0:1  72.48.103.182

內部介面:

eth1:   172.18.90.1

在我的防火牆規則中,我然後改變了

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 216.82.212.230

iptables -t nat -A POSTROUTING -s 172.18.90.0/24 -o eth0 -j SNAT --to 72.48.103.182

問題是現在一切似乎都以 72.48.103.182 的形式發出,包括來自郵件伺服器的流量。如果我從防火牆主機 ssh 到另一台外部機器,則連接被辨識為來自 72.48.103.182。

這對我來說沒有意義,因為我專門指定了應該被 NAT 的源 IP。最初我嘗試了上面沒有“-s 172.18.90.0/24”的行並得到了完全相同的結果。

有什麼想法嗎?想像一下,我不是 iptables 專家,但在發佈到 serverfault 之前,我已經努力嘗試和研究這一點。

=======================

root@www:etc# ip ro
216.82.212.0/24 dev eth0  proto kernel  scope link  src 216.82.212.230
72.48.103.0/24 dev eth0  proto kernel  scope link  src 72.48.103.182
172.18.90.0/24 dev eth1  proto kernel  scope link  src 172.18.90.1
default via 216.82.212.254 dev eth0  src 72.48.103.182  metric 100
default via 216.82.212.254 dev eth0  metric 100

“神奇”部分完全不是 SNAT 規則或 NAT 表,而是這個路由表條目:

default via 216.82.212.254 dev eth0  src 72.48.103.182  metric 100

它告訴您的核心使用 72.48.103.182 進行本地發起的出站連接(只要套接字在創建時未顯式綁定到特定地址),如果可以通過此路由到達目的地 - 這將是所有“外部”目的地,因為這是您的預設路線。您應該將其重新定義為

default via 216.82.212.254 dev eth0  src 216.82.212.230  metric 100

獲得預期的行為。

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