SPF、DKIM和DMARC认证如何提升邮件送达率(测试)
TL;DR 快速解决方案
几乎所有营销平台都提供了关于使用SPF和DKIM授权外发邮件的详细教程:
- Salesforce: https://help.salesforce.com/articleView?id=000315520&language=en_US
- SendGrid: https://sendgrid.com/docs/glossary/spf/
- MailChimp: https://mailchimp.com/help/set-up-custom-domain-authentication-dkim-and-spf/
- MailGun: https://mxtoolbox.com/c/outboundemailsources?public=Mailgun
- Amazon SES: https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email-authentication-spf.html
- Constant Contact: https://knowledgebase.constantcontact.com/articles/KnowledgeBase/34717-SPF-Self-Publishing-for-Email-Authentication?lang=en_US
如果你是组织的营销部门或大规模营销公司,并且已经熟悉SPF、DKIM和DMARC,那么可以跳过本文。
核心要点:
邮件送达收件箱的概率取决于你能向收件邮件服务器证明邮件是有效、授权且有意发送的程度。本文使用“认证”、“授权”和“审核”等术语来代表SPF、DKIM和DMARC验证的过程和结果,但这些定义与信息安全领域的典型定义不完全一致。假设未认证、未授权、未审核、不可信的邮件是不受欢迎的。
邮件授权背景
早期,电子邮件被所有人信任。如今,电子邮件面临垃圾邮件、网络钓鱼、恶意行为等问题。因此,邮件服务默认期望在投递前对邮件进行审核。虽然这是好趋势,但意味着邮件需要提供更多发送信息以证明其意图和授权。
新常态:
- 不可信邮件不值得信任。
- 未授权邮件不被授权。
- 需要凭据。
未认证、未审核的邮件不会消失,但邮件提供的授权和来源证明会增加其成功投递的可能性。邮件提供商需要保护终端用户免受各种恶意威胁。协议允许邮件服务器在投递过程中验证邮件的真实性和授权。邮件平台依赖这些协议进行垃圾邮件识别。
SPF、DKIM和DMARC的作用
SPF和DKIM平台为域名注册人(域管理员)提供机制,授权哪些邮件服务器允许在邮件头(如发件人地址)中使用其域名。DMARC提供强制执行SPF和DKIM的方法,以及报告合规指标和记录授权邮件活动的机制。
发件人策略框架(SPF)
SPF包括管理员可以添加到域名区域文件中的DNS记录,以及指示收件邮件服务器验证发件邮件服务器是否有权使用指定域名的协议。
相关资源:
深度阅读:
- RFC 4408(已过时)
- RFC 6652
- RFC 7208
域名密钥识别邮件(DKIM)
DKIM是一种公钥基础设施,包含两个密钥。第一个密钥存储在域名区域文件中供公开访问,在外发邮件中通过邮件服务器按名称引用。第二个密钥(私钥)存储在邮件服务器上,用于对邮件各组件的哈希计算进行加密签名。
兼容DKIM的邮件包括一个邮件头(元数据),提供DKIM私钥匹配的公钥名称、邮件的计算哈希、加密签名的哈希以及处理验证签名哈希的指令。邮件哈希的比较和加密签名哈希的验证决定了邮件的DKIM验证。
深度阅读:
- RFC 6376 – DKIM: https://www.ietf.org/rfc/rfc6376.txt
基于域的消息认证、报告和一致性(DMARC)
DMARC是一种协议,指示收件邮件服务器在SPF和DKIM缺失或无效时该如何处理。DMARC还提供方法,让收件邮件服务器向指定域所有者报告当前邮件趋势,包括潜在的恶意活动。这可以有效关闭对手在域所有者不知情的情况下发送未授权邮件的漏洞。
深度阅读:
- Dmarc技术规范: https://dmarc.org/resources/specification/
- RFC 7489 DMARC
- RFC 8553 支持DNS更改
- RFC 7960 DMARC的互操作性
- RFC 6591 失败报告格式
- RFC 8601 认证的邮件头字段
实际影响
如果你使用大规模邮件平台,但没有通过SPF和DKIM授权该平台,并在DMARC中创建规则集,那么邮件送达收件箱的概率将取决于收件邮件服务器处理“未授权”邮件的配置,而不是你的营销努力。未审核的邮件实际上就是未审核的。如果你花了钱制作有效的邮件活动,请确保花时间确保它能到达收件箱。
营销热提示:
设置SPF、DKIM和DMARC。这将花费不到半小时的时间,并且你的收件箱送达率会提高。
演示:邮件授权验证的病理学
我從BlackHillsInfoSec.com邮箱发送了一封邮件到我的DefensiveOrigins.com邮箱账户。在Defensive Origins账户中,我打开了邮件的完整源代码,包括由各种发件、传输和收件邮件服务器附加的特定邮件头。
SPF验屍
SPF在DKIM之前出现。收件邮件服务器首先检查SPF记录并不是绝对的,但可以假设大多数收件邮件服务器会根据SPF标准验证邮件服务器的授权。
邮件来自blackhillsinfosec.com。我们可以使用MXToolbox或自己查询DNS来检查BlackHillsInfoSec.com的SPF记录。MXToolbox是一个快速读取SPF记录的好工具。
重要的是Black Hills的SPF记录中的SPF include:_spf.google.com方法。include方法指示收件邮件服务器查询_spf.google.com的SPF记录,并将其包含在blackhillsinfosec.com的SPF记录中。_spf.google.com记录还包含更多SPF记录。在SPF记录中添加include方法时要非常小心,你可能会授权比你想象的更多的东西。
BlackHillsInfoSec.com的域管理员期望(通过DNS记录SPF授权)指示blackhillsinfosec.com的邮件来自关联的Google邮件服务器。BlackHillsInfosec.com使用GSuite(Google Suite)。
在DefensiveOrigins账户收到的邮件中,收件邮件服务器包含了有关发件邮件服务器的信息。邮件头指示邮件由名为mail-ed1-f53.google.com的邮件服务器发出。
通过一些DNS查询,我们可以追踪这是否根据BlackHillsInfoSec.com的SPF记录进行了SPF验证。
使用include SPF方法来验证发件Google邮件服务器。我们使用“nslookup”手动验证了邮件是通过SPF授权的服务器发送的。Defensive Origins邮件服务器得出了相同的结论,并在收到的邮件中名为Received-SPF的附加邮件头中记录了授权结果。该头在RFC 7208中定义。
收件邮件服务器还在名为“Authentication-Results”的邮件头中包含了各种验证检查的摘要。这是认证过程的总结。该头在RFC 7601中定义(已被RFC 8601取代)。
恭喜:获得SPF验证成就徽章。
DKIM签名验证
Black Hills还有DKIM验证,通过使用邮件内容(部分)的加密签名来授权邮件服务器。这允许收件邮件服务器验证特定邮件头和邮件正文内容未被篡改,并验证邮件由BlackHillsInfosec.com的域管理员授权。
DKIM使用公钥基础设施(PKI)。邮件管理员创建符合DKIM的密钥对。一个密钥(私钥)存储在邮件服务器上,用于对特定邮件组件的计算哈希进行加密签名。公钥发布在指定域名的特殊子域的公共DNS中。不建议为多个服务器重复使用密钥对。DKIM允许多个密钥对的使用。
当发送带有DKIM签名的邮件时,发件邮件服务器将包含一个邮件头,指示使用哪个DNS DKIM公钥来验证邮件的加密签名哈希。DKIM公钥的选择称为“选择器”。选择器指示收件邮件服务器查询哪个DNS记录以获取DKIM公钥。DKIM公钥通过DNS TXT查询[selector]._domainkey.domain.tld获取。在DNS TXT记录上找到的公钥用于验证DKIM授权邮件头中包含的加密签名。计算邮件哈希的比较和加密签名的验证决定了邮件是否被DKIM授权。
在我从BlackHillsInfosec.com发送的邮件中,发件邮件服务器包含了DKIM-Signature邮件头。该头在RFC 6376中定义,包括加密签名的哈希以及收件邮件服务器创建哈希和验证签名的指令。
邮件头指示我们使用:
- v=1 DKIM协议版本一
- a= 哈希算法
- c= 哈希输入方法(考虑传输中的头修改)
- s= 公钥选择器
- h= 已在b=中签名的头
- bh = 正文部分的哈希(根据“c=”)[base64]
- b= 正文/头的加密签名哈希
发件邮件服务器使用其DKIM私钥对正文(bh=[哈希])的哈希值进行加密签名,并存储签名哈希(b=哈希/签名)。此过程在RFC-6376第3.7节中详细说明,但最终输出是一个可以用DKIM公钥验证的签名。
收件邮件服务器分析DKIM邮件头后开始了其DKIM验证过程。它使用参数“a=”、“c”和“h=”的信息来计算邮件组件的哈希。然后将哈希与参数“bh”中提供的值进行比较。如果哈希匹配,验证过程继续。如果哈希不匹配,DKIM验证失败。
收件邮件服务器然后查询DNS,使用DKIM头中指定的域和选择器检索DKIM公钥。
d=blackhillsinfosec.com s=google
|
|
服务器然后使用DKIM公钥验证签名哈希(=b)。使用公钥验证加密签名,邮件被视为DKIM授权。如果签名哈希无法验证或公钥无法检索,邮件将DKIM授权失败。
DKIM验证过程后,收件邮件服务器在Authentication-Results头中包含了DKIM验证结果。
恭喜:获得DKIM验证成就。
在验证的这一点上,我们已经确认邮件是通过SPF授权的邮件系统发送的,并且邮件使用DKIM签名来验证投递和特定未修改内容在发件邮件服务器、传输服务器和投递服务器之间。但是,如果不是这种情况呢?这就是DMARC的用武之地!
问题时间!
- 如果邮件包含DKIM签名但DKIM验证失败会发生什么?
- 如果SPF验证了邮件服务器,但DKIM签名缺失会发生什么?
- 如果DKIM签名被验证,但SPF指示邮件服务器未授权会发生什么?
- 如果有人发送授权邮件,管理员可以被通知吗?
- 如果有人发送未授权邮件,管理员可以被通知吗?
所有这些问题和相关问题都通过使用DMARC解决。与SPF和DKIM类似,DMARC是指定邮件域的域区域文件中的DNS TXT记录。DMARC记录指示收件邮件服务器如何根据SPF和DKIM协议的结果处理收到的邮件,并提供创建反馈循环的额外指令,通知管理员指定域的邮件使用情况。
我们的示例邮件从BlackHillsInfosec.com发送。收件邮件服务器查询BlackHillsInfoSec.com域的DMARC DNS记录。DNS记录指示收件邮件服务器如何根据其SPF和DKIM结果处理邮件。
DMARC DNS记录分配给名为_dmarc的特殊子域。在我们的案例中,收件邮件服务器查询了_dmarc.blackhillsinfosec.com的TXT记录。
|
|
上面的BHIS Dmarc记录指示邮件服务器该txt记录是有效的DMARC txt记录。BHIS记录指示收件邮件服务器根据此DMARC配置处理邮件:
- v=DMARC1 DMARC v1 有效TXT记录
- p= none 如果邮件验证失败,不执行额外操作
- Rua = 发送聚合邮件数据到dmarc_reports@blackhillsinfosec.com
- Ruf = 发送失败取证报告到dmarc_forensic@blackhillsinfosec.com
- fo=1 在SPF或DKIM未通过时发送取证
邮件成功通过SPF和DKIM验证后,根据DMARC规则集处理,并投递给目标收件人。但是,它成为根据DMARC记录发送的聚合报告的一部分。
恭喜:获得DMARC验证徽章!
关于DMARC报告
你可能会问一个问题:有多少邮件会发送到我们在DMARC记录中指定的通知地址?关于DMARC兼容的邮件服务器,我们得到:
- 每个收件邮件服务器每个指定域每天1封聚合邮件
- 每封未授权邮件投递1封取证报告
这里的数学实际上是BHIS每天发送邮件的域数量 + BHIS未发送邮件但收到指示BHIS为源域的邮件的域 + 授权邮件的取证报告。值得注意的是,并非所有收件邮件服务器都发送未授权邮件的取证报告,但通常会在其聚合报告邮件中包含失败结果。
你可能会想…这不是很多关于邮件的邮件吗?你们真的读这些吗?是的,有点。这是我们从未阅读的大量邮件。一切都是自动化的。下次当我们问“嘿,那波无效邮件的峰值是什么?”时,会有更多内容。
总之,这是一个关于一行邮件的长故事。现在,让那些邮件进入我的收件箱(不被标记)并开始赚钱吧。
博客后闲聊:为什么存在这篇博客
每天我都会收到来自各行各业公司的各种产品推销邮件。在BHIS,我们已经习惯了非传统营销,专注于客户和社区关系,而不是大规模邮件。但我们不贬低——我们不像其他人那样经营业务——我们的非典型策略并不适合所有人,并且它们也有自己的痛苦故事和问题。
传统营销仍然重要,当我们看到竞争对手(实际上是朋友)可能犯下代价高昂的错误时,我们想提供帮助。在BHIS,我们有一个座右铭:“为资本主义感到自豪地糟糕”。有时做正确的事情根本无利可图。这篇博客可能就是这种情况之一。写这篇博客肯定不止五分钟,编辑被分配,同行评审推荐修改,有人修正了我的打字错误,有人上传并发布了它,可能还有人通知了你。帮助竞争对手(朋友)的营销努力可能不符合BHIS的最佳利益,但它符合我们的其他利益:我们真的想让世界变得更好,如果帮助你把有效的想法传播出去有帮助…那么…很好。
坦率地说,我对X产品或Y服务的邮件数量感到疲劳感到难过,我们将其标记为“可疑”不是因为产品或服务的优点,而仅仅是因为营销活动发送的邮件被认为是未授权的。结果可能代价高昂。我们对缺乏授权的可见性并不是我们构建邮件标记系统的原因,它只是一个副产品。事实上,如果我们没有那个标记系统,我甚至不会知道我收到了邮件,因为它会进入垃圾邮件的黑洞,除非在寻找无关的丢失邮件时才会被看到。
让你的想法被听到。让世界变得更美好。前进并做好事。