网站导航:首页-计算机网络知识-SPF详解

SPF详解

  当前的E-mail通信使用的是SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),这其实是一个非常简单的传输协议,本身并没有任何安全措施。根据SMTP协议,发现人的邮箱地址是由发件方自行声明的,也就是说,收件人完全无法判断邮件的真实发件人是否是邮件中显示的发件人,在垃圾邮件和诈骗邮件横行的今天,这显然是不安全的。而SPF(Sender Policy Framework,发件人框架策略)的目的就是为了防止随意伪造发件人。下面将通过SPF的原理、语法以及其他方面来详述一下这个策略。

SPF的原理

  SPF是域名的一个DNS记录,当收件方邮件服务器收到一封来自IP地址为1.1.1.1的邮件,且这封邮件声明的发件人为test@example.com时,会首先去查询example.com的SPF记录中列出的所有被example.com允许发送邮件的服务器IP地址,如果1.1.1.1在列表中,则会认为这个发件人声明是合法的,否则这封邮件会被退信或标记为垃圾邮件。

  由于邮件发送者虽然可以“声明”他的邮件来自于example.com,但他既无权修改example.com的DNS记录,也无法伪造自己的IP地址,所以通常SPF的验证都是很有效的。目前几乎所有的邮件服务商都会去验证SPF。

SPF的语法

  SPF记录的v=spf1。这个是必须的,表示采用的是SPF1版本,目前他的最新版就是第1版。

  Mechanisms的前缀包含3种:“+”表示通过,“-”表示拒绝,“~”表示软拒绝。通常收件服务器对于通过的会直接接受来信,对于拒绝的会退信处理,对于软拒绝的接受来信但做出标记。

  SPF记录的Mechanisms,如下表所示。

Mechanisms及其格式 含义 举例
all 表示所有IP,肯定会命中,通常放在结尾,表示处理剩余的所有情况

v=spf1 -all

拒绝所有,表示这个服务器不会发出邮件

ip4:<ip4-address>或

ip4:<ip4-network>/<prefix-length>

指定一个IPv4地址或一个地址段。如果<prefix-length>没有给出,则按/32处理

v=spf1 ip4:10.0.0.0/24 -all

表示只有10.0.0.0/24可以发出邮件

ip6:<ip4-address>或

ip6:<ip4-network>/<prefix-length>

指定一个IPv6地址或一个地址段。如果<prefix-length>没有给出,则按/128处理

v=spf1 ip6:1001:88::417A

表示只有1001:88::417A可以发出邮件

a或a/<domain> 只有域名的A记录中包含的IP地址可以发出邮件,如未提供域名,则使用当前域名

v=spf1 a -all

表示只有当前域名的A记录中包含的IP地址可以发出邮件

mx或mx/<domain> 只有域名的MX记录中包含的IP地址可以发出邮件,如未提供域名,则使用当前域名

v=spf1 mx mx:test.example.com -all

表示只有当前域名的MX记录以及test.example.com的MX记录中包含的IP地址可以发出邮件

include:<domain> 引入domian域名下的SPF记录到本域名下

v=spf1 include:123.com -all

表示采用与123.com相同的SPF记录

exists:<domain> 对domain执行A记录查询,如果有结果返回(无论是什么)则看做命中 (无)
ptr:<domain> 由于使用ptr会带来很大开销的DNS查询,所以连官方都不推荐使用它 (无)

  常见的SPF记录通常不只包含一种Mechanisms,例如:v=spf1 a mx ip4:173.194.251.88 -all表示只允许当前记录的A记录中包含的IP地址、MX记录中包含的IP地址和173.194.251.88发出邮件。

如何添加SPF记录

  如果拥有自己的域名则可以给域名添加一条SPF记录,严格的说,SPF应该创建为SPF记录,但由于很多解析商不提供种种记录,甚至有的邮件服务器也不支持SPF记录,因此现在一般都添加一条TXT记录。

  本质上SPF的作用是为域名指定一个合法的发件IP列表,所以你需要指定你是用的服务器的发件IP是哪些。如果你是用的是第三方的邮件服务器,那么他们一般会有相应的文档告诉你该如何填写。

记录的生效时间

  由于SPF本质上是一条DNS记录,所以他的生效时间遵循DNS的协议。一般来说,如果是新增的记录会立即生效的,如果是修改记录,需要等待一段时间才能够全球同步,这段时间取决于你这条记录原来的TTL值。

  本文只是将SPF记录中常用的重点部分拿出来说一下,想知道更加详细的资料,可以参考SPFv1规范(RFC 4408)的全文。再推荐一个小工具,可以帮助验证域名是否存在SPF记录、记录的语法是否正确,以及输入IP和host来测试是不是真正管用。

已经到本页底线啦,您可以:返回目录页|返回首页