![双栈 ipv4/ipv6 上的 Postfix smtp 客户端 HELO](https://linux22.com/image/712765/%E5%8F%8C%E6%A0%88%20ipv4%2Fipv6%20%E4%B8%8A%E7%9A%84%20Postfix%20smtp%20%E5%AE%A2%E6%88%B7%E7%AB%AF%20HELO.png)
我有一个 Postfix 邮件服务器,配置为在双栈(IPv4 + IPv6)服务器上发送邮件。
IPv4 地址是私有的,因为它与同一连接上的其他服务共享(SNAT 到公共 IPv4),而 IPv6 地址是公共的且唯一的(全局范围、互联网可路由)。
在这种情况下,公共 IPv4 和 IPv6 地址通常具有不同的反向 DNS(PTR 记录),因此我希望 Postfix 使用其 SMTP 客户端中的 HELO 来匹配反向 DNS。进行这种匹配是一种很好的做法,因为如果设置不对称,则会触发激进的邮件过滤。
我的情况:
IPv4 10.0.3.12 - SNAT 至 212.XX.XX.22(PTR -
srv1.example.com
,Asrv1.example.com
指向 212.XX.XX.22)主机的 IPv6(此处未使用),2001:XX:XX::1(PTR - ,指向 2001:XX:XX::1
srv1.example.com
的 AAAA )srv1.example.com
Postfix 容器的 IPv6,2001:XX:XX::12(PTR -
srv1-postfix.example.com
,srv1-postfix.example.com
指向 2001:XX:XX::12 的 AAAA)
使用的 HELO 主机名必须取决于 SMTP 客户端用于设置连接的地址系列。如果通过 IPv4 发送,则 HELO 必须是srv1.example.com
,如果客户端通过 IPv6 发送,则 HELO 必须是 ,srv1-postfix.example.com
以符合 SMTP 最佳实践。
如何做到?我想避免在 IPv6 上进行任何形式的 NAT。
我见过这样的情况:postfix 多 IP SMTP 横幅。这里不太有用,因为它解释了如何在监听套接字(smtpd
)而不是SMTP 客户端(smtp
)。
答案1
您的问题本质上是,对于邮件来说,主机名和 IP 地址的正向和反向查找保持一致非常重要。(请注意,对于大多数其他服务来说,这一点并不那么重要。)
目前,您的邮件服务器在 IPv4 上显示的主机名与在 IPv6 上使用的主机名不同。
最简单的解决方案就是简单地调整您的服务器名称,以便邮件服务器在 IPv4 和 IPv6 上都使用相同的主机名。
换句话说:给主机一个新名字,并将 Postfix 使用的主机名从 srv1-postfix 更改为 srv1,并相应地更新 IPv6 记录。
然后,您就会得到通常的情况,即您的 Postfix 主机有一个主机名srv1.example.com
、一个 IPv4 地址(192.0.2.1
)和一个 IPv62001:db8:0:0:0:0:0:1
地址,并且所有正向和反向映射都解析为同一个srv1.example.com
接收和发送邮件所需的 DNS 记录将是
example.com. IN MX 1 srv1.example.com.
srv1.example.com. IN A 192.0.2.1
srv1.example.com. IN AAAA 2001:db8:0:0:0:0:0:1
相应的反向记录是
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa. IN PTR srv1.example.com.
1.2.0.192.in-addr.arpa. IN PTR srv1.example.com.
然后在你的后缀中你可以简单地使用myhostname = srv1.example.com
在需要主机名的任何地方(例如在 EHLO 横幅中),都会使用该主机名并正确对齐。