我在http://www.openspf.org/SPF_Record_Syntax 并且我已经在我的旧设置上运行它了。
设置已经改变,我发现自己再次陷入困境。
我有一个外部 DNS 服务。一个动态 IP 连接的路由器。一个内部 IP 为 10.0.1.3 的服务器。此服务器上的 DNS 记录表明 server.example.com 指向 10.0.1.3。我使用服务器 DNS 来解析其自身和本地网络查询。我还安装了一个应用程序,如果路由器 IP 发生变化,它会发送我的外部 DNS 服务更新。
到目前为止,我发现在这种特殊情况下,我可能能够成功使用 TXT 记录,如下所示
“v = spf1 a:server.example.com-all”
这可行吗?假设 IP 在发送电子邮件时不会准确更改...设置它的最佳方法是什么?
谢谢你!
PS。据我所知,我可以使用“v=spf1 mx -all”并将我的 server.example.com 作为 mx 记录,反过来,server.example.com 会在 IP 发生变化时动态更新到我的 IP。这样,当某个收件人从我的 IP 收到电子邮件时……它会检查 MX 记录以查看 IP 是否在该列表中,然后它会将 server.example.com 作为响应,而后者又会始终解析为我的最新动态 IP。
答案1
SPF 依赖于 DNS。
DNS 系统使用生存时间来减少 DNS 服务器上的请求负载。这意味着 DNS 中的更改不会立即传播到整个互联网。
因此,只要您的邮件服务器的公网 IP 突然发生变化,就不可能使您的计划配置完全安全。
您的首选应该是尝试获取静态 IP。一些 ISP 将此作为附加服务提供。
如果这不可行,我建议您通过另一个具有静态 IP 的邮件服务器发送邮件。这样您就可以在 SPF 记录中指定此服务器,并使其更加可靠。
您可以将 OS X 服务器设置为通过指定服务器中继所有外发邮件。要使此功能始终有效,中继服务器必须配置为识别并信任您的服务器,即使您的服务器更改了 IP 地址。我为一家提供此类邮件中继服务的 ISP 工作,我相信其他人也这样做。
PS:在 DNS 中依赖非常低的 TTL 是不明智的。首先,许多 DNS 管理员会将他们的 DNS 解析器配置为忽略低 TTL。其次,无论你将 TTL 设置得多低,任何依赖于正确 DNS 数据的服务总会有一个失败窗口。最好的办法是将你的服务设置为 DNS 更改很少发生。
答案2
按照您描述的方式使用 a 或 mx 条目,如果您直接更新 DNS,它就会起作用。通过添加与您当前 IP 相对应的额外“a”条目,最容易解决反向查找问题。
例如,我的边缘 IP 是 172.16.1.1 - host37.ispname.somecom。我没有使用“myname.mycom”,而是在我的域中放置了一个指向 ISP FQDN 的 CNAME。这样,正向和反向最终都会得到检验。我认为 SPF 指向 CNAME(然后指向 ISP FQDN)没有任何限制。或者,更简单的是,只需更新 SPF 而不是“a”以对应真实的 FQDN。
不过,如果这是您的住所,我不建议这样做。您可能会将当前 IP 推送到 DNS,让任何知道您电子邮件地址的人都可能暴露位置信息。
答案3
说实话,我不会纠结于 SPF 记录,它们的使用非常不一致。根据我的经验,许多接收邮件服务器不使用 SPF 检查,如果使用,它们大多会为您的垃圾邮件评分加一分。
但是,如果您确实想继续将 SPF 记录与动态 IP 地址结合使用,请确保该 DNS 记录上的 TTL 尽可能低。同时,让您的 SPF 记录以 ~all 而不是 -all 结尾(根据我的经验,~all 是最常用的机制)
笔记
如果指定了 -all,并且您的 IP 不匹配,则服务器应该拒绝该消息。
如果指定了 ~all 并且您的 IP 不匹配,则服务器应该接受该消息但对其进行标记。