iptables 双向 nat / smtp 两次 nat

iptables 双向 nat / smtp 两次 nat

我们使用具有多个外部 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 的文档以获取一些示例。

相关内容