当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] Exchange 2016 中的 SenderID、SPF、DKIM 和 DMARC – 第 II 部分

作者:精品下载站 日期:2024-12-14 06:58:50 浏览:16 分类:玩电脑

Exchange 2016 中的 SenderID、SPF、DKIM 和 DMARC – 第 II 部分


在上一篇博文中,我一直在讨论 SPF 的工作原理以及它如何使用公共 DNS 来验证发送 SMTP 服务器的真实性。当 SPF 正确实施时,接收邮件服务器可以验证是否允许发送邮件服务器代表发件人或其组织发送电子邮件。

在这篇博文中,我将讨论 DKIM 签名作为电子邮件验证中的附加(且更复杂、更难以欺骗)步骤。

快速提醒一下,我的实验室环境如下:

[玩转系统] Exchange 2016 中的 SenderID、SPF、DKIM 和 DMARC – 第 II 部分

有一个托管多个邮箱的 Exchange 2016 CU2 邮箱服务器,还有一个 Exchange 2016 CU2 边缘传输服务器。边缘同步将确保所有入站和出站 SMTP 流量均由边缘传输服务器处理。

在我之前的博文中,使用以下值创建并实施了 SPF 记录:

v=spf1 a:smtphost.exchangelabs.nl ~all

因此接收邮件服务器可以验证我的边缘传输服务器是否可以代表我发送电子邮件,并且当邮件来自另一台邮件服务器时,它很可能是欺骗性消息。

但现在我们继续使用 DKIM。

域密钥识别邮件

DKIM(代表域密钥识别邮件)是另一种解决方案。它不是真正的反垃圾邮件解决方案,而更像是合法的验证解决方案。当电子邮件经过验证后,它很可能不是垃圾邮件(也就是说,只要发件人的环境没有受到损害或当然)。

DKIM 是关于电子邮件消息的签名和验证。因此,您可以将其与 S/MIME 的签名功能进行比较,其中 S/MIME 基于客户端,而 DKIM 基于服务器。

DKIM 包含两个操作:

  • 消息的签名。这可以由发送主机本身来实现,也可以由第三方应用程序或服务来完成。对消息进行签名时,签名模块会在消息中插入包含适当信息的 DKIM-Signature 标头。此签名模块使用私钥来创建签名,从而确保只有该服务器(或组织)可以对消息进行签名。
  • 验证消息。就像签名一样,这可以由接收主机或第三方应用程序或服务来执行。验证模块读取DKM-Signature字段中的信息,并使用发送组织的公钥验证签名。

私钥和公钥形成密钥对。私钥仅在发送邮件服务器上已知,公钥在发件人的公共 DNS 服务器中发布,因此可供需要验证签名消息的每个人使用。

[玩转系统] Exchange 2016 中的 SenderID、SPF、DKIM 和 DMARC – 第 II 部分

因此,DKIM-Signature 标头在 DKIM 中起着重要作用,典型的 DKM-Signature 标头可能如下所示:

DKIM 签名:v=1; a=rsa-sha256; d=example.net; s=布里斯班;
c=轻松/简单; q=dns/txt; l=1234; t=1117574938; x=1118006938;
h=从:到:主题:日期:关键字:关键字;
bh=MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=;
b=dzdVyOfAKCdLXdJOc9G2q8LoXSlEniSbav+yuU4zGeeruD00lszZ
VoG4ZHRNiYzR

可以在 DKIM 签名标头中识别以下标签:

  • v=版本
  • a=签名算法
  • d=域
  • s=选择器
  • c=正文和标头的规范化算法
  • q=查询方法
  • l=主体规范化部分的长度
  • t=时间戳签名
  • x=过期时间
  • h=已签名标头字段列表
  • b=所选消息标头的哈希值
  • bh=消息正文的哈希值

为了对消息进行签名,签名模块首先创建消息正文的哈希值,并使用 bh 标签 进行存储。接下来是对消息中选定的标头进行哈希处理,这些标头存储在 b 标记 中。因此,正在创建两个哈希值。两个哈希值都存储在邮件的 DKIM 标头中。两者在上面的 DKIM-Signature 标头示例中都清晰可见。

要签署消息,您需要密钥对。邮件服务器使用私钥对消息进行签名,公钥存储在 DNS 中,并且可以由接收服务器检索以解密签名。如何获得密钥对?

您可以使用 http://dkimcore.org 站点生成密钥对。这应该仅用于测试目的,因为密钥对是在此网站上生成并存储(好吧,也许是暂时的)。

生成的私钥应输入到发送邮件服务器上的签名模块中,如下所示:

—-开始 RSA 私钥—-
MIICXAIBAAKBgQCy9cx399ZJ3xhCDcVmHOFkFWw5XAuWls0npBNO1hiMeUr0qI/c
+Abmjma2O/VB5oCPGHzRT3f78BlGryJKjEAyZKBE7U+GkaCGEVEjQqGEWnsF7tql
OkWW99Lx1VOEJItO9yMrRpmA6Ml01jH6rkBeADhUpgKAUD0fN+ZCnlVv1QIDAQAB
AoGAa4BLuyUdjHJ/V+59zcE7g6t6v1oTe/pKcq2VC56AUKHr7Nv0z4AOZSDVglKy
GUwlnc/P6swZ/zVTeapqpu1pAdtPiglf70GMDPA1YUqxaKXnH/jZz8g7o5L2F1pw
6CZoPDzXnCx0BAFuAyByonOIolFf9iPnMkm809d9La/Y0wECQQDZxkgPeRbHmySW
USfq19vqH5Kz3YYjW+E/rMXMBE9qtfYaiQJBAJ+sVmGh8yXfhu/iAcYZi/R9Y/ug
Tu6mky+8HzIhc8kG1G8c4Xo4Y3Oj/RyG/00iB5JgIkZgaMjaPN9pCwBkdfECQBjd
UWgNymikJWe9PmZviQ6VtH3Eyw3dk2+fo5odTZ/wA0tdetXBf2poL2eoBHoK2tt5
+T/o1Z/UGRMBV/l9xxECQEyUnkqkX+2YEkxotCyVKt+whxdshZFAoPqGzIyN4Spq
w4j2w3xiPYSzpyXDx+6Dgpyb/Ru8MhNhakNRYIMjK64=
—-结束 RSA 私钥—-

生成的公钥(采用 BIND 9 DNS 格式)如下所示:

1471253148.exchangelabs._domainkey.exchangelabs.nl。在 TXT 中 (

“v=DKIM1;t=s;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmutszXoY6C8/xlzy/Hrz954Gy”
“5zf0O8q/+brIO9o
+WyYeoMkNjs2NEy9z20Ur7t1lP64KH7dx/BKK6hlwRKxTw70D”
“MU5HC5ZJtvLYuiiUz3KGuEMDSwsBpY4aAtDhVG7CjYheSoIQ5kD2EcvnZJaQTPTa”
“tKLxEwImU2tYwPmqyQIDAQAB”)

本例中的选择器是“1471253148.exchangelabs”,选择器是存储公钥的 DNS 记录。

笔记。在此示例中,实际的公钥(Base64 编码)是
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmutszXoY6C8/xlzy/Hrz954Gy5zf0O8q/+brIO9o+WyYeoMkNjs2NEy9z20Ur7t1lP 64KH7dx/BKK6hlwRKxTw7 0D MU5HC5ZJtvLYuiiUz3KGuEMDSwsBpY4aAtDhVG7CjYheSoIQ5kD2EcvnZJaQTPTatKLxEwImU2tYwPmqyQIDAQAB

添加到 DNS 后,您可以使用 http://dkimcore.org/tools 站点来测试公共 DKIM Core 密钥。您可以输入选择器和域名,也可以输入在上一步中找到的记录。我认为输入选择器和域名最有意义:

[玩转系统] Exchange 2016 中的 SenderID、SPF、DKIM 和 DMARC – 第 II 部分

单击检查检查 DNS 中的 DKIM 记录,您将看到如下内容:

[玩转系统] Exchange 2016 中的 SenderID、SPF、DKIM 和 DMARC – 第 II 部分

您还可以使用 http://mxtoolbox.com/dkim.aspx 站点来测试您的 DKIM 记录,只需输入域名和选择器:

[玩转系统] Exchange 2016 中的 SenderID、SPF、DKIM 和 DMARC – 第 II 部分

笔记。您可以使用 DKIMCORE.ORG 创建的密钥对进行测试,如果您从此站点删除该密钥对,您也应该能够在生产中使用它。然而,这可能会带来安全风险。由于密钥对是在互联网上创建的,因此您永远不会知道密钥对会发生什么。更好的解决方案是使用 OPENSSL 或 PUTTYGEN 等工具生成密钥对。

所以,此时一切都已就位。有一个用于签名消息的私钥,有一个存储在 DNS 中的公钥,您就可以开始使用了。消息发送到您的(发送)服务器,接收服务器将读取消息的标头,并且基于选择器密钥,服务器可以检索公钥以验证签名。

Exchange 服务器和 DKIM

不过还有一件事更重要……您可能已经注意到,我在上一节中没有使用“Exchange 服务器”这个名称,这是因为 Exchange 不支持开箱即用的 DKIM 签名和验证。为此,您需要使用第三个软件,但在 GitHub 上您也可以下载一些 DKIM 签名软件。

下载、解压并安装(在 Exchange 2016 边缘传输服务器上)后,您可以配置 DKIM 签名模块(这基本上是一个传输规则)。最重要的选项卡是“域设置”,您可以在其中配置域特定设置:

[玩转系统] Exchange 2016 中的 SenderID、SPF、DKIM 和 DMARC – 第 II 部分

发送消息后,DKIM 签名者将处理该消息、签署该消息并添加 DKIM 信息标头。将电子邮件发送到另一个外部邮箱(我使用 Office 365 中的邮箱,因为 Office 365 可以验证签名的 DKIM 邮件),您将在邮件标头中看到以下类似信息:

DKIM 签名:v=1; a=rsa-sha256; d=Exchangelabs.nl;
s=1471253148.exchangelabs; c=简单/简单; t=1471374160;
h=发件人:主题:收件人:日期:消息 ID;
bh=b7KyI3BYV0CyZpQwBxNaF6lgrZQOwdY+ZRYmUTfcxNE=;
b=hWLVh5I4SMMqmFkXlem1wjj+WT2hrNkduciEAJmbQ9nrkugPFv9LFYl9ray1bKhIN0wIdMA0jnr
9FRtaSeMaAht0yM83hPTSy6OcZ89Bapdl6NGycyTaGCwea5iwJKH9/ZTt2cUtCh9hrZyINBT5uvKA
bp9YhzXU6Ks9uWExQ7g=

DKIM 签名看起来合法,并且消息标头中有更多信息,即有关身份验证本身的信息:

身份验证结果:spf=pass(发件人 IP 为 176.62.196.244)
smtp.mailfrom=Exchangelabs.nl;韦斯留斯.info; dkim=pass(签名为
已验证) header.d=Exchangelabs.nl;wesselius.info; dmarc=bestguesspass
action=none header.from=Exchangelabs.nl;wesselius.info; dkim=pass(签名
已验证) header.d=Exchangelabs.nl;
已接收-SPF:通过(protection.outlook.com:Exchangelabs.nl 的域
指定 176.62.196.244 为允许的发件人)
接收者=protection.outlook.com; client-ip=176.62.196.244;
helo=smtphost.exchangelabs.nl;

此时,SPF 和 DKIM 在我的 Exchange 2016 环境中正常工作,并且边缘传输服务器正在使用 DKIM 正确签署电子邮件。

不幸的是,目前我的 Exchange 服务器上只有一个 DKIM 签名模块,并且无法找到 DKIM 验证模块。

概括

DKIM 的作用是对 SMTP 消息中的标头信息进行签名和验证。由于签名是使用仅对您的邮件服务器可用的私钥进行的,因此接收邮件服务器可以确保邮件确实源自您的组织,并且不是欺骗邮件。

DKIM 使用密钥对,其中私钥由发送邮件服务器使用,公钥存储在公共 DNS 的 DNS 记录中。它看起来有点复杂,大多数 Exchange 管理员都认为它很复杂,但是当您在实验室环境中使用 DKIM 时,您很快就会发现它并没有那么糟糕。

这篇博文是关于在 Exchange 2016 服务器上安装和配置 DKIM 的,我从 GitHub 下载的软件也适用于 Exchange 2013 和 Exchange 2010。如果您不想安装和配置麻烦,您也可以选择使用第三方设备或服务,例如 IronPort、Exchange Online Protection (EOP) 或 MessageLabs(也提供 DKIM 服务)。

在我的下一篇博客中,我将讨论 DMARC,因为 DMARC 是构建在 SPF 和 DKIM 之上的。

更多信息

  • 域名密钥识别邮件 - https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail
  • 域名密钥识别邮件 (DKIM) 开发、部署和运营 - http://dkim.org/specs/draft-ietf-dkim-deployment-11.html
  • Exchange Online 正在向所有人推出默认 DKIM 签名 - https://blogs.msdn.microsoft.com/tzink/2015/12/16/exchange-online-is-rolling-out-default-dkim-signing-to-每个人/
  • 在 Office 365 中启用显式 DKIM 签名 - https://supertekboy.com/2016/06/27/enable-dkim-signing-office-365/
  • EmailArchitect 支持论坛 - https://www.emailarchitect.net/forum/yaf_postst357_Set-up-DKIM-in-Exchange-2007-2010-2013.aspx
  • Microsoft Exchange Server 的 DKIM 签名代理 - https://github.com/Pro/dkim-exchange
  • 在 Office 365 中使用 DKIM 和 DMARC 增强电子邮件保护 - https://blogs.office.com/2015/01/20/enhanced-email-protection-dkim-dmarc-office-365/
  • 在 Office 365 中手动连接 DKIM 签名 - https://blogs.msdn.microsoft.com/tzink/2015/10/08/manually-hooking-up-dkim-signing-in-office-365/
  • 域名密钥识别邮件 (DKIM.ORG) - http://dkim.org/`

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯