我们使用具有多个外部 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
答案1
是的,这基本上就是您需要的防火墙规则。注意,它是--dport
,即您需要双破折号。
另一种方法是要求您的 ISP 为第二个 IP 地址设置另一个反向 DNS 记录(也称为 PTR),然后使用具有更高值的相同 IP 地址获取 MX 记录,以便始终首先尝试在真实服务器上进行外部传送。
答案2
我会使用 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
答案3
您是否考虑过将 IP 地址转发到邮件服务器。然后它将从所需的地址发送。在这种情况下,您不会对邮件服务器使用 NAT。查看 Shorewall 的文档以获取一些示例。