使用 iptables 進行 NAT 重寫日誌中的來源 IP

使用 iptables 進行 NAT 重寫日誌中的來源 IP

我擁有以下基礎設施:

網際網路 [外部 81.xxx] 路由器 [內部 192.168.1.1]
                                    | [網192.168.1.0/24]
                                    |
                                   郵件伺服器[192.168.1.2]

在有 iptables 的路由器 (DD-WRT) 上。我啟用了 NAT,因為我希望我的郵件伺服器回應外部 IP。我有以下設定:

iptables -t nat -I PREROUTING -d 81.x.x.x -j DNAT --to 192.168.1.2 
iptables -t nat -I POSTROUTING -s 192.168.1.2 -j SNAT --to 81.x.x.x 
iptables -I FORWARD -d 192.168.1.2 -p tcp --dport 25 -j ACCEPT

還有一些其他開放連接埠。

但是,當郵件到達郵件伺服器 postfix 時,會顯示下列訊息:

postfix/smtpd[6964]: connect from unknown[192.168.1.1]

所有來自外部的郵件似乎都是透過內部 IP 位址的路由器發送的。我缺少什麼,以便顯示原始 IP 位址,而不是 IP 內的路由器?

答案1

您似乎已經使用前兩個 iptables 規則設定了一對一 NAT,但隨後添加了第三個相當奇怪的規則:

iptables -I FORWARD -d 192.168.1.2 -p tcp --dport 25 -j ACCEPT

在進行一對一 NAT 時,此類規則不是必需的,而且實際上並沒有做任何有用的事情。根據您提供的信息,這似乎是最有可能導致問題的原因。只需將其刪除即可。

iptables -D FORWARD -d 192.168.1.2 -p tcp --dport 25 -j ACCEPT

答案2

ISTR 的怪事以前也有過這樣的情況,但正如你所說,缺少了一些東西。路由器中的以下資訊可能有用:

iptables -t nat -L -n
iptables -L -n
ip route

這是來自郵件伺服器的:

iptables -t nat -L -n
ip route
grep . /proc/sys/net/ipv4/conf/*/rp_filter

如果沒有這些訊息,我想我只會清除現有的防火牆並做一些更具體的事情:

iptables -t nat -F  # also on server
iptables -t nat -I PREROUTING -p tcp -d 81.x.x.x --dport 25 \
    -j DNAT --to 192.168.1.2:25

並查看郵件日誌中發生了什麼。如果您需要用於傳出 SMTP 的 SNAT,如下所示:

iptables -t nat -I POSTROUTING -p tcp -s 192.168.1.2 --dport 25 \
    -m multiport --sports 1024:65535 -j SNAT --to 81.x.x.x:25

如果本機 DNS 解析器不夠用:

iptables -t nat -I POSTROUTING -p udp -s 192.168.1.2 --dport 53 \
    -j SNAT --to 81.x.x.x

相關內容