如何设置 SPF 的 DNS 记录

Introduction

SPF的完整意思为 “Sender Policy Framework”。翻译过来就是发送方策略框架,是一项跟 DNS 相关的技术,它的内容写在 DNS 的 txt 类型记录里面,关于更详细的信息请参考 RFC4408: http://www.ietf.org/rfc/rfc4408.txt
SPF 的原理是使用电子邮件的头部信息中的 ‘Return Path’ 或 ‘Mail From’ 这两个邮件头里的域名来结合真正提供这个邮件的服务商 DNS 里面的记录去验证发送邮件服务器是否是冒充行为。
SPF 的官方网站是: http://www.openspf.org/

How it works

当信件发送到一个 MTA 后,这个 MTA 会检查邮件的邮件头,然后进行 DNS 查询,如果认为这个域的 IP 地址不是所定义的那就证明他是一个假冒的,这时候就会把邮件退回去。

How to check SPF record

如何查询某个域名是否开启SPF,可以使用以下命令:

1
# dig -t txt 域名

只需要去查询 TXT 类型的 DNS 记录即可。

SPF variables

1
2
3
4
5
6
7
v=spf1 / 表示 spf1 的版本
- Fail, 表示没有其他任何匹配发生
~ 代表软失败,通常用于测试中
? 代表忽略
IP4 代表IPv4进行验证
IP6 代表IPv6进行验证
all 代表结束

大家可以通过这个向导来设置自己的SPF记录
http://old.openspf.org/wizard.html

举例说明:
163 的 SPF 记录:

1
163.com.    18000   IN      TXT     "v=spf1 ip4:220.181.12.0/22 ip4:202.108.5.64/26 ip4:202.108.5.128/25 -all"

如果不符合以上发信地址,但是发件人却是 'xxx@163.com‘,那么这样的邮件一定是假冒的。邮件应该一律退回。

sohu.com 的 SPF 记录:

1
sohu.com.   600     IN      TXT     "v=spf1 ip4:61.135.130.0/23 ip4:61.135.132.0/23 ip4:61.135.134.0/23 ip4:61.135.145.0/23 ip4:61.135.150.0/23 ip4:220.181.26.0/24 ip4:222.28.152.128/25 ip4:218.206.87.0/25 ip4:221.236.12.128 ip4:203.184.141.0/24 ip4:61.152.234.0/24 ~all"