我跟着这些说明使用 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= 参数在实践中是如何使用的。
答案1
发件人域的签名DKIM
最可靠,并且可能是发件人的电子邮件政策所要求的。随着 的推出,DMARC
域现在可以发布一项政策,其中包含对不符合政策的电子邮件的期望操作。
DKIM
旨在从标题匹配发件人,但可能不是信封发件人。 SPF
验证信封发件人使用发送服务器为域发送邮件的权限。 DMARC
将两者联系在一起,以提供更好的政策框架。
所有这三种机制都要求在所涉及域的 DNS 树中发布数据。
DKIM
来自第三方仅表示签名内容在该域签名后是否被修改。这可能对否认有用,但对发件人信誉无用。
答案2
你从错误的角度(发送者的角度)看待这个问题。你应该从接收者的角度看待这个问题。
假设我们有一个[电子邮件保护]通过邮件服务器 random.com 向我们发送消息。我们对这两个域名一无所知。来自 foo.com 的电子邮件上的签名是否[电子邮件保护]能告诉你什么吗?显然,foo.com 有权对其控制的电子邮件账户发表意见。来自 random.com 的电子邮件上的签名意味着什么[电子邮件保护]告诉你?非常少。random.com 可能由垃圾邮件发送者控制,发送声称来自[电子邮件保护]绕过你的过滤器。所以如果你对 random.com 一无所知,它的签名也毫无意义。
另外,请记住,一封电子邮件可以包含多个 DKIM 签名。因此,如果您运行邮件列表,则发送到该列表的邮件可能在发件人标头中包含来自域的签名。邮件列表也可能使用信封中显示的列表域对其进行签名。两者都为接收者提供了有用的信息,帮助他们决定是否信任该邮件。
答案3
在 DKIM 中,没有要求d=
值(或相关i=
值)匹配消息中的任何其他标头。DKIM 本身仅验证签名者,而不验证发送者,而由接收者实施某些策略以使此信息有用。
DMARC 允许发件人域指定 DKIM 策略,使 DKIM 签名对收件人更有用。使用 DMARC和d=
标题From:
必须匹配(完全或允许子域,取决于指定的严格程度)。
对于 OpenDKIM,您需要查看SigningTable
和KeyTable
配置指令正确处理多个域。
答案4
查看几封来自 Gmail 的邮件,我发现d
参数包含信封发件人的域。因此,MAIL From
SMTP 命令中使用的地址就是参数中使用的地址d
。
我想不出任何其他比使用信封发件人更有意义的决定域名的方法。