1. 前言
在现代电子邮件系统中,确保邮件的安全性和可靠性至关重要。SPF、DKIM和DMARC是三种主要的电子邮件身份验证机制,它们共同工作以防止垃圾邮件、钓鱼攻击和其他形式的邮件欺诈。
SPF、DKIM和DMARC机制在配置DNS时,记录类型都是TXT类型,在配置记录值时请注意DNS平台是否需要双引号。
本文将学习这三种机制及其在邮箱配置中的作用。
参考文档:
- 详解 SPF、DKIM、DMARC 记录与工作原理
- 550-5.7.26 Gmail Error: Email Blocked Because Sender is Unauthenticated
- POWERDMARC - 什么是DNS TXT记录?
- CloudFlare - 什么是 DNS TXT 记录?
2. SPF
2.1. SPF简介
SPF全称为发件人策略框架,SPF是一种用于验证发送电子邮件的服务器是否被授权代表域名发送邮件的机制。
通过在DNS中添加SPF记录,域名所有者可以指定哪些IP地址可以发送该域名的邮件。
2.2. SPF工作原理
当接收邮件服务器收到一封来自某个域名的邮件时,它会查找该域名的SPF记录,验证发件服务器的IP地址是否在授权列表中。如果匹配,邮件将被接受;如果不匹配,邮件可能会被标记为垃圾邮件或拒绝。
2.3. SPF记录示例
1 | 主机记录:@ |
记录值字段说明:
v=spf1
:表示使用SPF版本1。ip4:192.0.2.0/24
:允许该IP地址范围发送邮件。include:_spf.example.com
:允许其他域名的SPF记录。-all
:表示不允许其他IP地址发送邮件。
腾讯企业邮推荐记录值:"v=spf1 include:spf.mail.qq.com ~all"
参考文档:
2.4. SPF语法解释
SPF记录定义了多种不同的 mechanism,这些 mechanism 规定了哪些 IP 是被允许的,哪些 IP 是被禁止的。
这一些mechanism包含以下几类:
1 | all | ip4 | ip6 | a | mx | ptr | exists | include |
all 表示命中所有的 IP,通常放在 SPF 记录的尾部作为 fallback,结合上面提到的前缀举几个例子:
1 | "v=spf1 -all" 拒绝所有 |
ip4/ip6 的格式相近,具体的配置举例如下:
1 | "v=spf1 ip4:192.168.0.1/16 -all" |
a/mx 这两个 mechanism 会命中相应域名的 a 记录和 mx 记录,a语法mx的语法一致,如果没有填写域名则默认值为当前域名:
1 | "v=spf1 mx -all" 允许当前域名的 mx 记录对应的 IP 地址。 |
include 用于引入某个域名下的SPF记录,例如:
1 | "v=spf1 include:example.com -all" 采用和 example.com 完全一样的 SPF 记录 |
3. DKIM
3.1. DKIM简介
DKIM全称为域名密钥识别邮件,DKIM是一种电子邮件身份验证方法,它通过数字签名确保邮件内容在传输过程中未被篡改。
发件人使用私钥对邮件进行签名,而接收方则使用公钥进行验证。
3.2. DKIM工作原理
当接收服务器收到一封带有DKIM签名的邮件时,它会提取签名并查找相应的公钥。如果公钥验证成功,表明邮件未被篡改且确实来自声称的发件人。
3.3. DKIM记录示例
1 | 主机记录:<selector>._domainkey |
记录值字段说明:
v=DKIM1
:表示使用DKIM版本1。k=rsa
:表示公钥是以RSA方式进行加密的。p=MIGfMA0GCS...
:公钥部分。
主机记录和记录值通常由电子邮件服务商提供,比如使用腾讯企业邮箱或网易企业邮箱,就登录管理员查看DKIM配置。
4. DMARC
4.1. DMARC简介
DMARC全称为基于域名的消息身份验证、报告和一致性,DMARC是建立在SPF和DKIM之上的一种机制,允许域名所有者指定如何处理未通过身份验证的邮件,并提供报告功能。
4.2. DMARC工作原理
接收服务器根据DMARC策略处理未通过SPF或DKIM验证的邮件。根据设置,它可以选择拒绝、隔离或无操作。同时,发送报告给域名所有者,以便他们监控和分析身份验证结果。
4.3. DMARC记录示例
1 | 主机记录:_dmarc |
记录字段说明:
v=DMARC1
:表示使用DMARC版本1。p=reject
:指示接收方拒绝未通过身份验证的邮件。rua=mailto:dmarc-reports@example.com
:指定接收报告的电子邮件地址。
腾讯企业邮推荐记录值:"v=DMARC1; p=none; rua=mailto:mailauth-reports@qq.com"
参考文档:企业邮箱如何设置DMARC(TXT记录)
5. 发送邮件给Gmail报错问题
5.1. 问题描述
发送邮件给Gmail邮箱时,报错:
1 | 550-5.7.26 Your email has been blocked because the sender is unauthenticated. |
5.2. 解决办法
报错很清晰,发送邮件的服务器被Gmail拒绝了,Gmail怀疑这是伪造的发件人,因为邮件没能通过SPF或DKIM验证。
解决办法:检查并配置SPF和DKIM。