原文链接:https://loliloli.moe/2021/02/09/exchange_dkim_dmarc/

简述如何开启和使用 Exchange DKIM 以及 DMARC 功能

该怎么说呢,事情还是从一些朋友们反馈这边站点发送的邮件被丢入垃圾箱开始的吧。一开始只是评论回复邮件,后来连其他邮件也被丢入垃圾箱了。很显然这不是什么好事情,大致上就是这种情况所以才想到了 DKIM 和 DMARC 来着,那么既然可以做那就做了吧。

当然和平时一样,Microsoft 的文档虽然涵盖了我们需要的全部内容,但是很多东西混杂在一起难以简单理解和一步到位,所以就还是顺手写了这篇文吧?

DKIM 简介(引用自 维基百科)

域名密钥识别邮件DomainKeys Identified Mail,DKIM)是一套电子邮件认证机制,使用公开密钥加密的基础提供了数字签名身份验证的功能,以检测寄件者、主旨、内文、附件等部分有否被伪冒或窜改。

一般来说,发送方会在电子邮件的标头插入 DKIM-Signature 及电子签名信息。而接收方则透过 DNS 查询得到公开密钥后进行验证。

原文链接:维基百科

DMARC 简介(引用自 Microsoft 文档)

DMARC 的记录是一个 DNS 文本 (TXT) 记录,有助于防止欺骗和钓鱼。在 DNS 中发布 DMARC TXT 记录。DMARC TXT 记录根据发送域的可疑所有者来验证电子邮件作者的 IP 地址,从而验证电子邮件的来源。 DMARC TXT 记录可以标识得到授权的出站电子邮件服务器。然后,目标电子邮件系统可以验证接收的邮件是否来自得到授权的出站电子邮件服务器。

原文链接:Microsoft 文档

DKIM 详细开启和使用方法

检查并生成 DKIM 密钥

打开 Exchange 管理中心(旧版) 如下图选择“保护”,“dkim”可以查看到对应的域名并没有保存 DKIM 密钥,此时则需要生成 DKIM 密钥

首先打开 PowerShell 输入如下指令加载 Exchange 模块,或直接使用 Exchange Online PowerShell(使用参见 浅谈 Microsoft Exchange 设置 SMTP )

Import-Module ExchangeOnlineManagement
Connect-ExchangeOnline -ShowProgress $true

这里会弹出登录框,输入自己租户的全局管理员或 Exchange 管理员账号登录即可

随后我们输入如下指令生成 2048 位密钥

New-DkimSigningConfig -DomainName {youdomain.com} -KeySize 2048 -Enabled $True

完成后将看到如下输出

现在我们需要添加两条 CNAME 解析才能展开后续工作

添加 CNAME 解析

如上例,此时需要添加的 CNAME 记录已经给出

selector1-loliloli-moe._domainkey.lolilolimoes.onmicrosoft.com
selector2-loliloli-moe._domainkey.lolilolimoes.onmicrosoft.com

因此此时添加的格式为

selector1._domainkey.loliloli.moe CNAME 3600 selector1-loliloli-moe._domainkey.lolilolimoes.onmicrosoft.com
selector2._domainkey.loliloli.moe CNAME 3600 selector2-loliloli-moe._domainkey.lolilolimoes.onmicrosoft.com

那么你需要添加的格式则为如下

selector1._domainkey.youdomain.com CNAME 3600 selector1-youdomain-com._domainkey.initialdomain.onmicrosoft.com
selector2._domainkey.youdomain.com CNAME 3600 selector2-youdomain-com._domainkey.initialdomain.onmicrosoft.com
  • 注意:此处 youdomain.com 指代你的域,initialdomain 指代你的租户初始域名称,即在 SPO 中显示的 xxxx-my.sharepoint.com 的 xxxx 部分

下面将以华为云以及 Cloudflare 举例添加 CNAME 解析记录

Cloudflare

如上图设置类型为 CNAME 名称对应 selector1._domainkey (设置第二条请对应到 selector2._domainkey )目标为对应的 selector1-youdomain-com._domainkey.initialdomain.onmicrosoft.com 设置第二条同理

请务必注意将 TTL 设置到 1 小时(即 3600)且不进行代理(灰云状态)

华为云

首先到达解析页面,选择“添加记录集”按照如下图填写记录

在主机记录中写入 selector1._domainkey (设置第二条时请对应到 selector2._domainkey )类型设置为 CNAME ,TTL 设置为 3600 值写入 selector1-youdomain-com._domainkey.initialdomain.onmicrosoft.com 即可

路线建议填写全网默认(默认值)

开启 DKIM

这里可以直接在 Exchange 管理中心(旧版) 启用或者在 Office 365 安全与合规性 开启,方法如下图(操作简单故不再赘述)

Exchange 管理中心(旧版) :

Office 365 安全与合规性 :

注意:若出现报错,请检查 CNAME 解析是否正确或是否生效

此时我们在 PowerShell 输入如下指令,返回值为 True 则开启状态正常

Get-DKIMSigningConfig -Identity youdomain.com

设置 DMARC 解析

设置如下 TXT 记录值

_dmarc.youdomain.com TXT 3600 v=DMARC1; p=none
  • 注意按照需求进行设置
  • v:标示 DMARC 的版本,值应当始终为 DMARC1
  • p:用于告知收件方,处理方案,处理方式包括如下:
    • none:不作任何处理
    • quarantine:将邮件标记为垃圾邮件
    • reject:拒绝该邮件
  • pct:设置为 100 即可(表示应用的 DMARC 策略消息百分比)

添加 TXT 解析记录

方法和上面添加 CNAME 记录如出一辙,只需修改选项为 TXT 记录即可,故不再赘述,如有需求可以在评论区提问

测试 DKIM 以及 DMARC 是否生效

这里使用到的测试网站为:https://www.mail-tester.com/

只需向测试邮箱发送一封邮件即可完成测试,当分析结果如下时则 DKIM 、DMARC 状态正常