Iptables
IPtables NAT 謎題:為什麼來自防火牆主機的流量被 NAT,即使它不是來自規定的源地址之一?
我執行一個小型網路,其中 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
獲得預期的行為。