域名邮箱真实性设置指南:DKIM、DMARC和SPF

本文于695天之前发表,文中内容可能已经过时。

密码重置、两步验证、商业机密、私人对话……电子邮件是大多数生活和商业活动的中心,因此我们必须确保它是可信和真实的。

如果你在使用自己的域名邮箱,证明邮箱真实性的工作就会转移到你自己的头上。本指南旨在为你提供所需的相关信息和实践操作,以保证你域名邮箱的真实性,并减少你受上当受骗的风险。

该指南将介绍域名邮箱安全的三个主要组成部分:用于签名的DKIM、用于发件人验证的SPF和用于更严格执行其他两个部分的DMARC。请确保你对DNS有基本的了解,并有使用域名邮箱的经验。

1. SPF

SPF,全称“Sender Policy Framework”,即“发送方策略框架”,是最基本的电子邮件验证技术之一,是最简单、最常见的保护。通常,服务提供商会提供DNS记录内容,您只需在设置过程中简单地复制、粘贴即可。

在DNS解析中,SPF的记录类型为 TXT。基本格式如下:

"v=spf1 include:spf.httpsmail.com -all"

SPF的核心是一个IP地址列表,被授权从你的域名发送邮件。除此之外,还有其它几种不同的选项:

  • include: 执行递归查找包括来自不同主机名的所有IP;
  • ip4或ip6: 直接引用ip地址;
  • a, mx, ptr, exists等: 不经常使用,暂时忽略;
  • all: 用于捕获所有匹配的IP地址。默认情况下,这主要用于封锁所有内容,我们将在下面进行详细解释。

以上面的地址spf.httpsmail.com为例,该网址下的所有A类型的解析记录通过include:选项包含在SPF策略之中。

除了ip地址和包含的主机名之外,还有其它限定符来作为选项的前缀。

每个符号都会向邮件服务器推荐一个不同的策略,默认情况下,如果没有符号,它被视为等同于“+”,即“通过”。(其它限定符可见:https://datatracker.ietf.org/doc/html/rfc7208#section-4.6.2,主要包括4个:+、-、~和?等,好像“~”用得较多,为“soft-failure”,字面意思是“软失败”,接收但是会标记)

在上面的示例中,主要有两个机制选项:

  1. include:spf.httpsmail.com: 包含该网址下的所有ip,没有限定符,所以默认为“+”,即通过,接收邮件;
  2. -all: 带有限制符“-”,即拒绝。

SPF是一个非常简单的工具,提供了基本的电子邮件验证(“允许哪些IP可以发送我的电子邮件”)来进行基本的垃圾邮件过滤。即使只是单独设置SPF,也会对你的邮件成功投递有很大帮助。

2. DKIM

DKIM,全称“Domain Keys Identified Mail”,即“域名密钥识别邮件标准”,另一种安全机制,通过使用非对称密钥以加密的方式验证为你域名邮箱发送邮件的服务器是否有权这样做。配置DKIM后,接收你邮件的服务器可以在DNS中查找公钥,并验证邮件是否从你的域合法发送。

DKIM可防止IP易手或大型服务提供商在客户之间共享IP空间。如果你说“谷歌IP可以发送我的电子邮件”,是什么阻止其他人从你的域中欺骗电子邮件并从他们自己的谷歌帐户发送?由于这些IP是共享的,所以它仍将通过SPF检查,但不会通过DKIM。

DKIM有两个主要部分:一个是带有公钥的DNS记录,另一个是添加到每个已发送电子邮件中的header(头部信息),其中包含加密签名和有关如何查找上述DNS记录的详细信息。

DKIM的DNS解析记录就是一个普通的TXT记录类型,但目前主要以CNAME记录类型为主,通用格式为:

<selector>._domainkey.<domain>

“selector”通常由您的电子邮件服务提供商设置,并在您启用DKIM时提供给您。一些提供商,如Fastmail和Microsoft 365,甚至提供多个选择器供您设置。例如,对于谷歌来说,它只是一个“google”:

google._domainkey.example.com

DKIM头部信息被添加在你所发送的每一封邮件中,包含的内容很多,但最主要的是以下两个部分(其它可见https://datatracker.ietf.org/doc/html/rfc6376#section-3.5):

  1. d=<domain>: 列出邮件发送的域名以备验证;
  2. s=<selector>: 与DNS中的子域名匹配。

通过这两段元数据,收件人的服务器可以重建包含DKIM密钥的子域并解析它,并根据此密钥以验证DKIM签名和消息是否真实。

DKIM是一个比SPF强得多的检测垃圾邮件的方法,因为它涉及到实际的数学运算,而不仅仅是一个IP列表。即使你的域名邮箱只配置了SPF和DKIM也已经非常不错了,但还可以更进一步。

3. DMARC

DKIM仅在邮件中有头部信息时才适用。这意味着非法消息将不会有头部信息,因此不会发生DKIM验证。这导致DKIM验证是“中性”的,而不是“失败”,因为它被简单地忽略了。

添加DMARC策略使我们能够

  • 强迫对声称来自我们域名的所有电子邮件执行SPF和DKIM检查;

  • 向接收服务器提示如何处理失败的检查;

  • 提供报告地址,以便我们可以从电子邮件提供商处接收有关这些检查的报告。

DMARC记录与其他两个记录的格式相同,而且非常简单。下面是一个非常基本的示例:

v=DMARC1; p=quarantine; adkim=s; aspf=s; rua=mailto: test@dmarc.postmarkapp.com;

  • p=quarantine: 为处理未通过身份验证检查的电子邮件所设置的全局策略,可以是none,quarantine或reject,即不采取措施、将验证失败的邮件标记为垃圾邮件和拒收验证失败的邮件。
  • adkim=s: 强制执行DKIM检查的策略,可以是r或s,r为relaxed,宽松;s为strict,严格。
  • aspf=s: 强制执行SPF检查的策略,选项同adkim。
  • rua=mailto: 接收综合报告的邮箱地址,一般会以周为单位。

DMARC是现代电子邮件安全性中最强大的一部分,它的报告可以令人难以置信地洞察哪些垃圾邮件伪装成你。如果您从本指南中得到了什么,我希望您应该花时间和精力制定严格的DMARC政策。

4. 加餐

如果你的域名不想发送邮件,可以通过以下设置来防止垃圾邮件以你的名义发送出去。

  • SPF设置:v=spf1 -all

  • DMARC设置记录:v=DMARC1; p=reject; adkim=s; aspf=s;

本文翻译自:Email Authenticity 101: DKIM, DMARC, and SPF,部分内容有改动,已获得原作者授权。


支付宝打赏 微信打赏

感谢打赏,支持支付宝、微信!