我按照这些说明使用 Postfix 设置 OpenDKIM,它的工作原理与宣传的一样。我的外发邮件添加了 DKIM-Signature 标头,例如:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=example.com; s=mail;
t=1398638300; bh=mk/7yYUxFCWz+ZHB0opJIA/S3J5ELoPZPfAO0KQdVg4=;
h=Date:From:To:Subject:From;
b=fPPfUliJUgA0re38nkJ2R18TeFgbamOv1U8nDb9958eTeAT6Mp7oq4WGrHPiPmc+b
mrLu9RuW0/S4d0ipkilNZDxgecwl7qttrDbTEkWxdhwwTSe5FL3OBaUoUxJFrMGjmY
RdBjY5ZWtvk29+gXZ+af5Of9OrY7COLlqGkFXRXw=
我的问题是关于d=
上面的参数。如果一个邮件服务器处理多个虚拟域的外发邮件,d= 是否应该包含发送邮件的邮件服务器?还是应该是 From: 地址中出现的域?
我试图阅读关于这个主题的RFC 6376,但我发现的唯一相关位是:
d= The SDID claiming responsibility for an introduction of a message
into the mail stream [...] The conventions and semantics used by a Signer to
create and use a specific SDID are outside the scope of this specification
我希望这里有人知道在实践中如何使用 d= 参数。
您从错误的角度看待问题 - 发件人的角度。您应该从接收器的角度来看它。
因此,假设我们有一个 [email protected] 通过邮件服务器 random.com 向我们发送消息。我们对这两个领域一无所知。来自 [email protected] 的电子邮件中来自 foo.com 的签名是否告诉您任何信息?显然它确实如此,因为 foo.com 可以对它控制的电子邮件帐户发表一些看法。来自 [email protected] 的电子邮件中来自 random.com 的签名告诉您什么?很少。random.com 可以由垃圾邮件发送者控制,发送声称来自 [email protected] 的垃圾邮件以通过您的过滤器。因此,如果您对 random.com 一无所知,它的签名也毫无意义。
此外,请记住允许电子邮件包含多个 DKIM 签名。因此,如果您运行一个邮件列表,发送到该列表的消息可能在 From 标头中包含来自域的签名。邮件列表也可能由他们签名,使用信封中显示的列表域。两者都为接收者提供有用的信息,帮助他们决定是否信任该消息。
在 DKIM 中,不要求该
d=
值(或相关i=
值)与消息中的任何其他标头匹配。DKIM 本身仅对签名者进行身份验证,而不是对发送者进行身份验证,将其留给接收者来实施一些策略以使此信息有用。DMARC 允许发件人域为 DKIM 指定策略,使 DKIM 签名对收件人更有用。使用 DMARC和
d=
标From:
头必须匹配(完全匹配或允许子域,取决于指定的严格性)。对于 OpenDKIM,您需要查看
SigningTable
和KeyTable
配置指令以正确处理多个域。来自发件人域的
DKIM
签名是最可靠的,并且可能是发件人的电子邮件策略所要求的。随着引入,DMARC
域现在可以针对不符合该策略的电子邮件发布具有所需操作的策略。DKIM
旨在匹配标头中的发件人,该发件人可能不是信封发件人。SPF
验证信封发件人使用发送服务器为域发送邮件的权限。DMARC
将两者联系在一起,以提供更好的政策框架。所有这三种机制都要求在相关域的 DNS 树中发布数据。
DKIM
来自第三方的信息仅表明签名内容在该域签名后是否已被修改。这可能对否认有用,但对发件人的声誉没有用。DKIM 是基于域的。它仅说明电子邮件的签名域。如果您使用 d=esp.com 即 Email Service Provider 的域,那么接收邮件系统将使用 esp.com 的信誉来决定电子邮件。如果使用 d=customer.com(例如 From: 地址的域),则将使用 customer.com 的信誉分数。因此,如果 esp.com 具有很高的声誉,那么使用 d=esp.com 将是明智之举。否则坚持使用 d=customer.com
来自RFC 8376标准:
SDID : 签名域标识符 (=d)
更新:
更多关于基于作者的签名与来自dkim.org 规范的第三方签名:
查看来自 Gmail 的几封邮件,我发现
d
包含信封发件人域的参数。因此,MAIL From
SMTP 命令中使用的地址就是d
参数中使用的地址。我想不出比使用信封发件人更有意义的任何其他方式来决定域。