请输入关键字
利用SPF技术提供反垃圾解决方案
Alin|2021-2-3

1. SPF是什么?

SPF是 Sender Policy Framework 的缩写,一种以IP地址认证电子邮件发件人身份的技术。接收邮件方会首先检查域名的SPF记录,来确定发件人的IP地址是否被包含在SPF记录里面,如果在,就认为是一封正确的邮件,否则会认为是一封伪造的邮件进行退回。

SPF是跟DNS相关的一项技术,它的内容写在DNS的txt类型的记录里面。mx记录的作用是给寄信者指明某个域名的邮件服务器有哪些。SPF的作用跟mx相反,它向收信者表明,哪些邮件服务器是经过某个域名认可会发送邮件的。

2. SPF配置

2.1. SPF 语法

v=spf1 [pre][type]mod

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

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

2. pre 指mechanism的前缀,如"+"、"-"、"~"、"?"。

3.type 定义类型,即mechanism的类别,如all | ip4 | ip6 | a | mx | ptr | exists | include。

一条 SPF 记录定义了一个或者多个 mechanism,而 mechanism 则定义了哪些 IP 是允许的,哪些 IP 是拒绝的。

这些 mechanism 包括以下几类:

all | ip4 | ip6 | a | mx | ptr | exists | include

每个 mechanism 可以有四种前缀:

 

测试时,将从前往后依次测试每个 mechanism。如果一个 mechanism 包含了要查询的 IP 地址(称为命中),则测试结果由相应 mechanism 的前缀决定。默认的前缀为+。如果测试完所有的 mechanisms 也没有命中,则结果为 Neutral。

除了以上四种情况,还有 None(无结果)、PermError(永久错误)和 TempError(临时错误)三种其他情况。对于这些情况的解释和服务器通常的处理办法如下:

注意,上面所说的「服务器处理办法」仅仅是 SPF 标准做出的建议,并非所有的邮件服务器都严格遵循这套规定。

2.2. Mechanisms

下面介绍上面提到的 mechanism:

all

表示所有 IP,肯定会命中。因此通常把它放在 SPF 记录的结尾,表示处理剩下的所有情况。例如:

"v=spf1 -all" 拒绝所有(表示这个域名不会发出邮件)

"v=spf1 +all" 接受所有(域名所有者认为 SPF 是没有用的,或者根本不在乎它)

ip4

格式为ip4:<ip4-address>或者ip4:<ip4-network>/<prefix-length>,指定一个 IPv4 地址或者地址段。如果prefix-length没有给出,则默认为/32。例如:

"v=spf1 ip4:192.168.0.1/16 -all"

只允许在 192.168.0.1 ~ 192.168.255.255 范围内的 IP

ip6

格式和ip4的很类似,默认的prefix-length是/128。例如:

"v=spf1 ip6:1080::8:800:200C:417A/96 -all"

只允许在 1080::8:800:0000:0000 ~ 1080::8:800:FFFF:FFFF 范围内的 IP

a 和 mx

这俩的格式是相同的,以a为例,格式为以下四种之一:

a

a/<prefix-length>

a:<domain>

a:<domain>/<prefix-length>

会命中相应域名的 a 记录(或 mx 记录)中包含的 IP 地址(或地址段)。如果没有提供域名,则使用当前域名。例如:

"v=spf1 mx -all"

允许当前域名的 mx 记录对应的 IP 地址。

"v=spf1 mx mx:http://deferrals.example.com -all"

允许当前域名和 http://deferrals.example.com 的 mx 记录对应的 IP 地址。

"v=spf1 a/24 -all"

类似地,这个用法则允许一个地址段。

例如,这是一个比较常见的 SPF 记录,它表示支持当前域名的 a 记录和 mx 记录,同时支持一个给定的 IP 地址;其他地址则拒绝:

v=spf1 a mx ip4:173.194.72.103 -all

include

格式为include:<domain>,表示引入<domain>域名下的 SPF 记录。注意,如果该域名下不存在 SPF 记录,则会导致一个PermError结果。例如:

"v=spf1 include:http://example.com -all" 即采用和 http://example.com 完全一样的 SPF 记录

exists

格式为exists:<domain>。将对<domain>执行一个 A 查询,如果有返回结果(无论结果是什么),都会看作命中。

ptr

格式为ptr或者ptr:<domain>。ptr,要求发送邮件的服务器的地址上必须存在一个 PTR 记录。该 PTR 记录必须将地址映射到某个域名,且该域名必须以 TXT 记录中的所有者字段的域名结尾,或以冒号后所指定的参数结尾。如:+ptr:example.com 要求发送邮件的服务器的地址逆向解析到以 example.com 结尾的域名。

使用ptr机制会带来大量很大开销的 DNS 查询,所以连官方都不推荐使用它。

redirect

格式为redirect=<domain>,如:v=spf1 redirect=example.com

将用给定域名的 SPF 记录替换当前记录,支持多域名共享SPF记录:

http://a.example.com IN SPF "v=spf1 redirect=http://example.com"

http://b.example.com IN SPF "v=spf1 redirect=http://example.com"

这样 http://a.example.com 与 http://b.exmaple.com 就会使用 http://example.com 相同的 SPF记录,无需再复制一次。

注意,redirect 使用的是等号,include 使用的是冒号。

exp

格式为exp=<domain>,目的是如果邮件被拒绝,可以给出一个消息。而消息的具体内容会首先对<domain>执行 TXT 查询,然后执行宏扩展得到。

2.3. 如何使用SPF保护我的邮箱?

SPF记录是一种发送者身份验证系统。通过设置SPF记录,可以阻止其他用户伪造你的域名进行发送。

如果你拥有自己的域名,并且用它发送邮件,那么你应该为它添加 SPF。

严格来说,SPF 数据应该创建为 SPF 记录。但是鉴于很多 DNS 服务商不支持 SPF 记录,甚至有的邮件服务器也不支持 SPF 记录,因此也可以创建为一条 TXT 记录。SPF与TXT记录有相同的作用,都可以用来做反垃圾邮件设置,如下两条记录作用是一样的:

http://a.example.com IN SPF "v=spf1 ip4:192.168.0.1/16 -all "

http://a.example.com IN TXT "v=spf1 ip4:192.168.0.1/16 -all "

2.4. CloudDNS上SPF记录配置步骤

如何在CloudDNS上配置SPF?步骤如下:

1) 登录CloudDNS

2) 进入控制台,选择CloudDNS

3) 新增一个域名,如wyhxin.club

4) 点击域名,进入解析记录管理页面

5) 选择新增记录,选择SPF记录类型

6) 填写SPF参数,如主机头/文本内容

源于:https://zhuanlan.zhihu.com/p/54059585

赞一下15||已浏览1063

本站版本归木之林解释所有 copyright(C)2010-2025www.mzlin.net 备案/许可证编号为:粤ICP备15050036号