SPF 记录:原理、语法及配置方法简介

SPF,全称为 Sender Policy Framework,即发件人策略框架。

当前 Email 通信,还是在使用 SMTP 这个协议。SMTP 的全称为 Simple Mail Transfer Protocol,即「简单邮件传输协议」。正如它的名字锁暗示的,SMTP 实际上是一个非常简单(甚至简陋)的传输协议,本身并没有很好的安全措施。根据 SMTP 的规则,发件人的邮箱地址是可以由发信方任意声明的。在 SMTP 协议制定的时候也许还好,但在垃圾和诈骗邮件横行的今天,这显然是极不安全的。

SPF 出现的目的,就是为了防止随意伪造发件人。

一、SPF 记录的原理

SPF 记录实际上是服务器的一个 DNS 记录,原理其实很简单:

假设邮件服务器收到了一封邮件,来自主机的 IP 是173.194.72.103,并且声称发件人为email@example.com。为了确认发件人不是伪造的,邮件服务器会去查询example.com的 SPF 记录。如果该域的 SPF 记录设置允许 IP 为173.194.72.103的主机发送邮件,则服务器就认为这封邮件是合法的;如果不允许,则通常会退信,或将其标记为垃圾/仿冒邮件。

因为不怀好心的人虽然可以「声称」他的邮件来自example.com,但是他却无权操作example.com的 DNS 记录;同时他也无法伪造自己的 IP 地址。因此 SPF 是很有效的,当前基本上所有的邮件服务提供商(例如 Gmail、QQ 邮箱等)都会验证它。

二、SPF 记录的语法

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

这些 mechanism 包括以下几类:

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

每个 mechanism 可以有四种前缀:

"+"  Pass     (通过,默认)
"-"  Fail     (拒绝)
"~"  Soft Fail(软拒绝)
"?"  Neutral  (中立)

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

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

结果含义服务器处理办法
Pass发件 IP 是合法的接受来信
Fail发件 IP 是非法的退信
Soft Fail发件 IP 非法,但是不采取强硬措施接受来信,但是做标记
NeutralSPF 记录中没有关于发件 IP 是否合法的信息接受来信
None服务器没有设定 SPF 记录接受来信
PermError发生了严重错误(例如 SPF 记录语法错误)没有规定
TempError发生了临时错误(例如 DNS 查询失败)接受或拒绝

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

1.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:deferrals.example.com -all"
允许当前域名和 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:example.com -all" 即采用和 example.com 完全一样的 SPF 记录

exists

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

ptr

格式为ptr或者ptr:<domain>。使用ptr机制会带来大量很大开销的 DNS 查询,所以连官方都不推荐使用它。

2.关于v=spf1

这是必须的,这个表示采用 SPF 1 版本,现在它的最新版本就是第 1 版

3.Modifiers

SPF 记录中还可以包括两种可选的 modifier;一个 modifier 只能出现一次。

redirect

格式为redirect=<domain>

将用给定域名的 SPF 记录替换当前记录。

exp

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

 

三、如何用 SPF 保护我的域名

如果你拥有自己的域名,并且用它发送邮件,那么你应该为它添加 SPF。通过域名服务商提供的「域名解析」、「DNS Editor」或者「DNS Zone Editor」等功能添加,并填写正确的 SPF 数据就可以了。

严格来说,SPF 数据应该创建为 SPF 记录。但是鉴于很多 DNS 服务商不支持 SPF 记录,甚至有的邮件服务器也不支持 SPF 记录,因此也可以创建为一条 TXT 记录。目前,你应该至少创建一条 TXT 记录。

因为本质上 SPF 的作用是为一个域名指定合法的发件 IP,所以你需要知道自己使用的邮件服务器的发件 IP 是什么。如果你使用第三方的域名邮箱服务(比如腾讯的域名邮箱),那么他们应该有相应的文档告诉你该怎么填写。如果你用虚拟主机,则主机提供商也应该会告诉你。

 

四、生效时间

SPF 记录本质上是一个 DNS 记录,所以并不是修改之后立即生效的——通常需要几个小时的时间。

 

五、一些工具

虽然我不能帮你决定 SPF 该填什么,但是这里有一些非常好用的工具可以帮助你,点击它们在新窗口打开:

  • Open SPF:官方网站,有很多资料,值得一看。
  • RFC 4408:SPFv1 的规范全文。
  • SPF Recored Testing Tools:帮助你验证域名是否存在 SPF 记录、记录的语法是否正确,以及输入 IP 和 host 来测试是不是真正管用。
  • SPF: Why?:为什么我发的邮件被拒绝了?
  • Beveridge Hosting DNS Lookup:图形界面的dig,也可以显示查询到的 SPF 信息。
  • Beveridge SPF Test:另一个根据 IP 和 host 验证 SPF 是否通过的工具。
  • Gmail:如果你有 Gmail 的话,可以给自己的 Gmail 邮箱发一封邮件,然后用 Gmail 独有的 Show Original 功能查看 Gmail 服务器的 SPF 判断结果。
<think>好的,用户想了解如何正确配置SPF、DMARC和DKIM这三种邮件认证机制。首先,我需要回忆这三个协议的基本原理和它们各自的作用,确保自己理解正确。然后结合用户提供的引用内容,看看是否有需要特别注意的地方。 首先,SPF是Sender Policy Framework,用于指定哪些邮件服务器有权发送该域名的邮件。用户提到引用[3]和[4]都说明了SPF记录是TXT类型的,通过DNS发布授权服务器的IP列表。配置SPF时需要创建TXT记录,列出允许的IP或包含其他SPF机制,比如include机制。需要注意语法是否正确,比如使用v=spf1开头,然后添加ip4或include等指令,最后用-all或~all等机制处理未授权的服务器。 接下来是DKIM,引用[2]和[5]指出DKIM使用数字签名来验证邮件的完整性和来源。配置DKIM需要生成公私钥对,公钥发布到DNS的TXT记录,私钥由邮件服务器用来签名发出的邮件。这里可能需要指导用户如何生成密钥,选择适当的密钥长度,以及如何在邮件服务器上配置签名,比如在Postfix或Exim中设置。 然后是DMARC,引用[1]提到DMARC让接收方执行策略,而SPF不强制执行。DMARC依赖于SPF和DKIM的结果,配置时需要指定如何处理未通过验证的邮件,比如隔离或拒绝,并设置报告机制。用户需要创建DMARC的TXT记录,指定策略和报告邮箱,可能还需要指导如何分析DMARC报告来调整配置。 接下来要考虑的是配置步骤的具体细节。例如,SPF记录的正确格式,避免常见错误如多个SPF记录,或者机制顺序不当。DKIM的密钥管理,定期轮换密钥的重要性。DMARC的策略从宽松到严格的逐步实施,避免一开始就拒绝所有邮件导致正常邮件被拦截。 还要注意引用中的信息,比如引用[4]提到SPF是TXT记录,而引用[3]强调正确配置SPF可以提升外域邮件成功率,并防假冒。这可能意味着需要提醒用户正确包含所有发送邮件的服务器,包括第三方服务,如邮件营销平台或云服务提供商,否则可能导致合法邮件被拒绝。 另外,用户可能遇到的问题包括DNS记录的传播延迟,配置语法错误,或者与其他DNS记录冲突。需要建议用户使用在线验证工具检查SPF、DKIM和DMARC记录是否正确生效,比如MXToolbox或者Google的检查工具。 最后,综合这三个协议的配置步骤,可能需要分步说明,每个部分单独配置,测试后再进行下一个,避免同时配置导致问题难以排查。同时,强调三者协同工作的重要性,只有同时配置SPF、DKIM和DMARC才能最大程度提升邮件可信度和防止钓鱼攻击。</think>### SPF、DKIM、DMARC 工作原理配置方法 #### 一、SPF(Sender Policy Framework) **原理** SPF 通过 DNS 记录声明授权发送邮件的服务器 IP 地址列表。接收方通过查询 SPF 记录验证邮件来源是否合法[^3][^4]。 **配置步骤** 1. **创建 SPF 记录** 在域名 DNS 中添加一条 TXT 记录,例如: ```text v=spf1 ip4:192.0.2.0/24 include:_spf.example.com ~all ``` - `ip4`:授权 IPv4 地址 - `include`:引用其他域名的 SPF 记录 - `~all`:软拒绝未匹配的邮件(`-all` 表示硬拒绝) 2. **验证配置** 使用工具(如 MXToolbox)检查 SPF 记录是否生效[^4]。 --- #### 二、DKIM(DomainKeys Identified Mail) **原理** DKIM 通过为邮件添加加密签名,验证邮件完整性和发件域名真实性。签名由发送方生成,接收方通过 DNS 查询公钥验证签名[^2][^5]。 **配置步骤** 1. **生成密钥对** 在邮件服务器生成公私钥对(如使用 OpenSSL): ```bash openssl genrsa -out private.key 2048 openssl rsa -in private.key -pubout -out public.key ``` 2. **发布公钥到 DNS** 创建一条 DKIM 的 TXT 记录,例如: ```text v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBA... ``` - `selector`:自定义标识符(如 `default`) - `p`:公钥内容 3. **配置邮件服务器** 在邮件服务(如 Postfix)中指定私钥路径并启用 DKIM 签名。 --- #### 三、DMARC(Domain-based Message Authentication, Reporting & Conformance) **原理** DMARC 基于 SPF 和 DKIM 结果定义邮件处理策略,并接收收件方的反馈报告[^1]。 **配置步骤** 1. **创建 DMARC 记录** 添加 DNS TXT 记录(名称 `_dmarc`),例如: ```text v=DMARC1; p=quarantine; rua=mailto:reports@example.com; pct=100 ``` - `p`:策略(`none`/`quarantine`/`reject`) - `rua`:聚合报告接收邮箱 - `pct`:应用策略的邮件比例 2. **分析报告并优化** 根据接收的报告调整 SPF/DKIM 配置,逐步收紧策略[^1]。 --- #### 四、协同工作流程 1. 发送方通过 SPF 声明合法服务器,DKIM 签名邮件。 2. 接收方验证 SPF/DKIM,根据 DMARC 策略处理邮件。 3. DMARC 报告帮助发送方优化配置[^1][^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值