SPF 是发送方策略框架 (Sender Policy Framework) 的缩写,希望能成为一个防伪标准,来防止伪造邮件地址。这篇文章对 SPF 进行了简单介绍,并介绍了它的一些优点和不足。
简介
事实上,SPF 需要 DNS 以某种特定的方式来工作。也就是必须提供所谓的“反向 MX 解析”记录,这些记录用来解析来自给定域名的邮件对应的发送
主机。这和目前使用的 MX 记录不同,后者是用来解析给定域名对应的接收邮件的
主机的。
需求
SPF 有哪些需求?
要想用 SPF 来保护你的系统,你必须:
配置 DNS,添加 TXT 记录,用于容纳 SPF 问询的信息。
配置你的
电子邮件系统(qmail, sendmail)使用 SPF,也就是说对服务器上每封进入的邮件进行验证。
上述第一步要在
邮件服务器所属的
域名服务器上进行调整,下一节中,我们将讨论这个记录的细节内容。你首先需要确定的一点是你的
域名服务器(bind,djbdns)所使用的语法。但别担心,SPF 的官方网站提供了一个很好用的向导来指导你如何添加记录。
SPF 的 TXT 记录
SPF 记录包含在一个 TXT 记录之中,格式如下:
v=spf1 [[pre]type [ext] ] ... [mod]
每个参数的含义如下表所示: 参数 描述
v=spf1 SPF 的版本。如果使用 Sender ID 的话,这个字段就应该是 v=spf2
pre 定义匹配时的返回值。
可能的返回值包括: 返回值 描述
+ 缺省值。在测试完成的时候表示通过。
- 表示测试失败。这个值通常是 -all,表示没有其他任何匹配发生。
~ 表示软失败,通常表示测试没有完成。
? 表示不置可否。这个值也通常在测试没有完成的时候使用。
可能的值包括: 候选值 描述
include 包含一个给定的域名的测试
以 include:domain 的形式书写。
all 终止测试序列。
ip4 使用 IPv4 进行验证。
这个可以以 ip4:ipv4 或 ip4:ipv4/cidr 的形式使用。建议使用这个参数,以减少
域名服务器的负荷。
ip6 使用 IPv6 进行验证。
a 使用一个域名进行验证。
可以按照 a:domain, a:domain/cidr 或 a/cidr 的形式来使用。
mx 使用 DNS MX RR 进行验证。
MX RR 定义了收信的 MTA,这可能和发信的 MTA 是不同的,这种情况基于 mx 的测试将会失败。
可以用 mx:domain, mx:domain/cidr 或 mx/cidr 这些形式进行 mx 验证。
ptr 使用
域名服务器的 PTR RR 进行验证。
这时,SPF 使用 PTR RR 和反向图进行查询。如果返回的
主机名位于同一个域名之内,就验证通过了。
这个参数的写法是 ptr:domain
有什么需要担心的?
SPF 是一个对于欺骗的完美保护。但它有一个局限:传统的邮件转发方式不再有效了。你不能仅仅从你的 MTA 接受邮件并简单地重新发送它了。你必须重写发送地址。常见的 MTA 的
补丁可以在 SPF 的网站找到。换句话说,如果你把 SPF 记录加入到了
域名服务器,你就必须更新你的 MTA 来进行发送地址改写,即使你还没有对 SPF 记录进行检查。
exist 验证域名的存在性。
可以写成 exist:domain 的形式。
ext 定义对 type 的可选扩展。如果没有这个字段,那么仅使用单个记录进行问询。
mod 这是最后的类型指示,作为记录的一个修正值。
修正值 描述
redirect 重定向查询,使用给出的域名的 SPF 记录。
以 redirect=domain 的方式使用。
exp 这条记录必须是最后一条,允许给出一条定制的失败消息。
嘿!我是 ISP
ISP 实施 SPF 可能对于他们处于漫游状态(roaming)的用户带来一些麻烦,当这些用户习惯使用 POP-before-Relay 这样的方式处理邮件,而不是 SASL SMTP 的时候问题就会出现。
嗯,如果你是一个被
垃圾邮件、地址欺骗所困扰的 ISP 的话,你就必须考虑你的邮件策略、开始使用 SPF 了。
这里是你可以考虑的几个步骤。
首先设置你的 MTA 使用 SASL,比如,你可以在端口 25 和 587 使用它。
告诉你的用户你已经使用了这个策略(spf.pobox.com 给出了一个通知的例子,参见参考文献)。
给你的用户一个宽限期,也就是说,把你的 SPF 记录加入到域名服务器之中,但使用“软失败”(~all)而不是“失败”(-all)。
这样,你就保护了你的服务器、你的客户和整个世界免受垃圾邮件之类的困扰了。
SPF 的官方站点上有很多信息,还等什么呢?
有什么需要担心的?
SPF 是一个对于欺骗的完美保护。但它有一个局限:传统的邮件转发方式不再有效了。你不能仅仅从你的 MTA 接受邮件并简单地重新发送它了。你必须重写发送地址。常见的 MTA 的
补丁可以在 SPF 的网站找到。换句话说,如果你把 SPF 记录加入到了
域名服务器,你就必须更新你的 MTA 来进行发送地址改写,即使你还没有对 SPF 记录进行检查。
结论
你可能觉得 SPF 的实施有点难以理解。不过这确实不算复杂,而且还有一个不错的向导来帮你完成这个转换(参见参考文献)。
如果你被
垃圾邮件所困扰的话,SPF 将可以帮助你,保护你的域名免受伪造邮件地址的影响,你所要做的仅仅是在
域名服务器上添加一行文本并配置你的
电子邮件服务器而已。
SPF 的优点有很多。不过,像我对一些人所说的,这不是一夜之间就可以达到的,SPF 的好处将通过日积月累来表现出来,当其他人都使用它的时候就能明显地看到了。
我也提到了 Sender ID,这和 SPF 有关,但我没有去解释它。可能你已经知道原因了,微软的策略一向如此---
软件专利。在参考文献中,你可以看到 openspf.org 对于 Sender ID 的立场声明。