Firewall
iptables birectional nat / 兩次 nat 用於 smtp
我們使用具有多個外部 IP 地址的 linux 防火牆。假設我們有這個:
webserver (www.blabla.com) : (ext)10.0.0.1 -> (int)172.99.0.2 mailserver (mail.blabla.com) : (ext)10.0.0.2 -> (int)172.99.1.2
這個路由是通過簡單的埠轉發完成的。但如果郵件伺服器發送郵件,它會使用第一個外部 IP 地址 (10.0.0.1)。
它工作得很好,但一些 smtp 伺服器將我們的郵件視為垃圾郵件。因為 10.0.0.1 沒有被 mail.blabla.com 覆蓋(這是修復)。
我讀了一些關於雙向 nat 的東西來完成這個:
偽邏輯:
if destination port == smpt and source is internal 172.99.1.2 { set external address 10.0.0.2 }
你知道怎麼做嗎?
這是一種方法嗎:
iptables -t nat -A POSTROUTING -s $INTERNAL_NET -d ! $INTERNAL_NET -dport SMTP -j SNAT --to $EXTERNAL_IP
是的,這基本上就是您需要的防火牆規則。當心,它是
--dport
,即你需要一個雙破折號。另一種方法是要求您的 ISP 為第二個 IP 地址放置另一個反向 DNS 記錄(也稱為 PTR),然後使用具有更高值的相同 IP 地址創建一個 MX 記錄,以便始終從外部傳遞首先在真實伺服器上嘗試。
我會使用 iptables 和 iproute:
1.使用 iptables 標記來自郵件伺服器並發送到任何埠的數據包,埠 25
iptables -A PREROUTING -i <mailsrv_iface> -t mangle -p tcp --dport 25 -j MARK --set-mark 25
2.通過正確的介面正確路由標記的數據包
echo 25 mailgw >> /etc/iproute2/rt_tables ip ru add fwmark 25 table mailgw ip ro add default via <correct_mailgw_ip> dev <correct_mailgw_iface> table mailgw