有效 DKIM 签名随机验证失败

有效 DKIM 签名随机验证失败

场景:

我有几个在防火墙后面的 Debian 上运行的电子邮件服务器,一个公共 IP,并且我已经正确设置了我的 DNS 记录(MCX、DMARC、DKIM、SPF)。

这是我的 DNS 记录的示例(由 dig 命令输出):

DKIM
customselector._domainkey.domain.com. 3600 IN TXT  "v=DKIM1\; h=rsa-sha256\; k=rsa\; s=email\; " "p=MII...

SPF:
domain.com.           3599    IN      TXT     "v=spf1 mx -all"

MX:
domain.com.           3599    IN      MX      1 mailsystem.domain.com.

DMARC:
_dmarc.domain.com.    3599    IN      TXT     "v=DMARC1\;p=quarantine\;sp=reject\;rua=mailto:[email protected]\; ruf=mailto:[email protected]\; fo=1\; adkim=r\; aspf=r\; pct=100\; rf=afrf\; ri=86400"

尝试了几个公共测试系统后,我的整个设置都得到了 100% 的验证。但随后我开始收到这些奇怪的报告,显示大量恶意电子邮件来自我的公共 IP,而一些电子邮件则通过了同一域的完美验证。下一个片段来自 Google 报告:

<record>
    <row>
      <source_ip>0.0.0.0</source_ip>
      <count>6</count>
      <policy_evaluated>
        <disposition>none</disposition>
        <dkim>pass</dkim>
        <spf>pass</spf>
      </policy_evaluated>
    </row>
    <identifiers>
      <header_from>domain.com</header_from>
    </identifiers>
    <auth_results>
      <dkim>
        <domain>domain.com</domain>
        <result>pass</result>
        <selector>customselector</selector>
      </dkim>
      <spf>
        <domain>domain.com</domain>
        <result>pass</result>
      </spf>
    </auth_results>
  </record>
  <record>
    <row>
      <source_ip>0.0.0.0</source_ip>
      <count>16</count>
      <policy_evaluated>
        <disposition>none</disposition>
        <dkim>fail</dkim>
        <spf>pass</spf>
      </policy_evaluated>
    </row>
    <identifiers>
      <header_from>domain.com</header_from>
    </identifiers>
    <auth_results>
      <dkim>
        <domain>domain.com</domain>
        <result>fail</result>
        <selector>customselector</selector>
      </dkim>
      <spf>
        <domain>domain.com</domain>
        <result>pass</result>
      </spf>
    </auth_results>
  </record>
  <record>

我收到了 6 封好邮件和 16 封坏邮件,它们的内容几乎都一样。

测试:

配置:

我正在使用 opendkim,这是我认为相关的内容:

Canonicalization    relaxed/relaxed
Mode            sv
SubDomains      yes

答案1

虽然我的 DKIM 记录是“有效的”,但有些验证器不会接受h=rsa-sha256;DNS 记录中的参数,并将 DKIM 签名视为无效。我猜想 Google 在其邮件服务器中使用了几个不同的 Linux 发行版,并安装了不同的验证器。

要解决此问题,只需删除 DKIM 记录上的该参数,它应该如下所示:

v=DKIM1; k=rsa; s=email; p=MI...

此后,每封电子邮件都将得到正确的验证。

我穿越了http://dkimvalidator.com在进行一些研究时,它是唯一一个产生相当令人困惑的消息的工具:

result = invalid
Details: public key: does not support hash algorithm 'sha256'

令人惊讶的是,这个错误似乎不常见,但是当您使用 opendkim 生成密钥时,您可能会发现自己正在做这样的事情:

opendkim-genkey -b 2048 -h rsa-sha256 -r -s customselector -d domain.com -v

这会将错误的参数写入txt输出文件,导致无效的 DKIM 记录。

相关内容