帮助中心FAQ

什么是SPF?

就是Sender Policy FrameworkSPF可以防止别人伪造你来发邮件,是一个反伪造性邮件的解决方案。当你定义了你的domain nameSPF记录之后,接收邮件方会根据你的SPF记录来确定连接过来的IP地址是否被包含在SPF记录里面,如果在,则认为是一封正确的邮件,否则则认为是一封伪造的邮件。关于更详细的信息请参考RFC4408http://www.ietf.org/rfc/rfc4408.txt

 

如何增加SPF记录

非常简单,在DNS里面添加TXT记录即可。登陆http://www.openspf.org/在里面输入你的域名,点击Begin,然后会自动得到你域名的一些相关信息。

你域名的A记录,一般选择yes,因为他有可能发出邮件。

mx 一般也是yesMX服务器会有退信等。

ptr 选择no,官方建议的。

 

a 有没有其他的二级域名?比如:mail.abc.comwww不在一台server上,则填入mail.abc.com。否则清空。

mx: 一般不会再有其他的mx记录了。

ip4 你还有没有其他的ip发信?可能你的smtp服务器是独立出来的,那么就填入你的IP地址或者网段。

include: 如果有可能通过一个isp来发信,这个有自己的SPF记录,则填入这个isp的域名,比如:hichina.com

~all: 意思是除了上面的,其他的都不认可。当然是yes了。

 

好了,点击Continue..

自动生成了一条SPF记录,比如abc.com的是

v=spf1 a mx ~all

并且在下面告诉你如何在你的bind里面添加一条

abc.com. IN TXT “v=spf1 a mx ~all”

 

加入你的bind,然后ndc reload即可。

检查一下:

dig -t txt extmail.org

 

设置完毕后您即可以通过使用spf策略进行垃圾邮件验证了。

 

SPF  TXT 记录

SPF 记录包含在一个 TXT 记录之中,格式如下:

  v=spf1 [[pre] type [ext] ] ... [mod]

 

每个参数的含义如下表所示:

 

参数         描述

v=spf1      SPF 的版本。如果使用 Sender ID 的话,这个字段就应该是 v=spf2

pre   定义匹配时的返回值。

 

可能的返回值包括: 

 

返回值     描述

+       缺省值。在测试完成的时候表示通过。

-        表示测试失败。这个值通常是 -all,表示没有其他任何匹配发生。

~       表示软失败,通常表示测试没有完成。

?       表示不置可否。这个值也通常在测试没有完成的时候使用。

type 定义使用的确认测试的类型。 

 

可能的值包括: 

 

候选值     描述

include     包含一个给定的域名的测试

 include:domain 的形式书写。 

 

all     终止测试序列。

比如,如果选项是 -all,那么到达这条记录也就意味着测试失败了。但是如果无法确定,可以使用"?all"来表示,这样,测试将被接受。 

 

ip4    使用 IPv4 进行验证。

这个可以以 ip4:ipv4  ip4:ipv4/cidr 的形式使用。建议使用这个参数,以减少域名服务器的负荷。 

 

ip6    使用 IPv6 进行验证。

 

a       使用一个域名进行验证。

这将引起对域名服务器进行一次 A RR 查询。

可以按照 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 

 

exist          验证域名的存在性。

可以写成 exist:domain 的形式。

 

ext   定义对 type 的可选扩展。如果没有这个字段,那么仅使用单个记录进行问询。

mod 这是最后的类型指示,作为记录的一个修正值。

 

 

修正值     描述

redirect    重定向查询,使用给出的域名的 SPF 记录。

 redirect=domain 的方式使用。

 

exp   这条记录必须是最后一条,允许给出一条定制的失败消息。

IN TXT "v=spf1 mx -all exp=getlost.example.com"

 

getlost IN TXT "You are not authorized to send mail for the domain"

  

附例:

example.com   txt  v=spf1 include:spf.mail.qq.com ~all