(为什么)电子邮件服务器会因为 DKIM 而停止发送 DMARC 报告吗?

(为什么)电子邮件服务器会因为 DKIM 而停止发送 DMARC 报告吗?

我有一个运行多年的个人电子邮件服务器;发送邮件时很少出现问题,所以我从来没有真正了解过 SPF、DMARC 和 DKIM 之类的东西。最近,在升级系统时,我决定这样做。

SPF 非常简单,因为我使用单一、固定的 IP 地址。

DMARC 几乎同样简单;我最初设置了“无”策略来接收报告,并将其保留一两周,然后将其切换为拒绝。

我现在已经为邮件服务器实现了 DKIM 签名过滤器(快递 MTA,没有现成的)。对于复杂的部分,我使用了迪金皮。它还有一个简单的验证工具,可以对整个消息进行验证,进行自己的查找等,这意味着它是假证明,因为只有一种方法可以使用它(而签名可以以各种方式配置,可能给我留下了搞砸的空间)。它会传递我认为应该通过的消息,并让那些我认为不应该通过的消息失败,所以我相当满意它的工作;我已经对从服务器收到的消息运行了它。目前,为了尽量减少问题,我只对正文和发件人标头进行签名。

但是,我的测试账户中没有一封邮件能发到我的邮箱——一封是 Gmail,另一封是来自我的 ISP。此外,尽管我现在在 DMARC 记录中同时拥有 rua 和 ruf 地址,但我没有收到任何报告. 此前,它们都像钟表一样准时。

如果我所做的只是关闭过滤器(所以没有 DKIM 签名),一切又恢复正常了。我检查过服务器在所有情况下都在尝试;失败的 DKIM 似乎超时并关闭连接,导致无限延迟——这本身就有点奇怪,因为这意味着“被拒绝”的邮件甚至没有被检查,但删除签名就足以让它再次被接受。我把这归咎于 Courier 日志中的歧义。

我知道这里没有人受任何法律的约束,但这是正常政策吗?假设 DKIM 签名错误,接收服务器不应该向我发送 DMARC 报告吗?

所以我现在陷入困境。虽然像 MXToolbox 这样的服务让我大获成功,但我还没有找到一个免费服务可以通过接收邮件来主动测试 DKIM 签名,除了一个,它似乎做了其他服务器所做的事情——从不接受它应该测试的邮件(不知道这是否是一个潜在的线索)。

以下是相关的 DNS 记录dig

  • 防晒指数(SPF):cognitivedissonance.ca. 3600 IN TXT "v=spf1 ip4:138.197.150.177 -all"

  • DKIM:

      aporia._domainkey.cognitivedissonance.ca. 3600 IN TXT "v=DKIM1; k=rsa; h=sha256; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAosptGk+J2mdjjc7RWmcnQ3yBqx1JT/lA0bw4GJCzZ+esa0f8rjHhPiW6NnUr64Kf5h0fPEthQhYGTjjw3jAd/3EE28hGA30+jODxEK7A0+5aeI82fWa/ZZk9FvyIhf+UkkX1B0klYhCRW5r91smJ+rwYrr2B6jOrw0DReHTAZ51NACSWI7ov2mA" "UIh2l8blA8hFFBOBwxlzC+smRsYlZCKZfsSMkyS/XIm2m58QNfw/aCHp5VufSrf/hh7f6AGKTgxHfgs+8RBbYdHEM2LAMT+WYsITC3R0OYfgplzWna6PRB9lx+FFzTtT/8XClYfUJ6rwWwM4koeX0yt9gDr/03QIDAQAB"
    

    请注意,邮件服务器的 FQDN 是aporia.cognitivedissonance.ca,因此我aporia出于缺乏想象力而将其用作 DKIM 选择器。电子邮件域只是cognitivedissonance.ca。我应该改用 FQDN(即aporia._domainkey.aporia.cognitivedissonance.ca)吗?

  • DMARC:

      _dmarc.cognitivedissonance.ca. 3600 IN  TXT     "v=DMARC1;p=reject;pct=100;rua=mailto:[email protected],mailto:[email protected];ruf=mailto:[email protected],mailto:[email protected]; "
    

    我注册了 dmarc 验证服务,其中有一些额外的 mailto。不幸的是,他们不直接测试 DKIM 签名。

最后,给出一个签名的例子:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
 d=cognitivedissonance.ca; [email protected]; q=dns/txt;
 s=aporia; t=1650468130; h=from;
 bh=3N81YR+AxHZqpkdMAh4Jti6JpRmUrlzO5bUjUoWdGeg=;
 b=kNzUid2LG8TfHoegur3JzlcktiJT+5A1E2en+IlV/GgDMZWL0Ft/4kE02LGFzb2kTMkav
 c9jLUqd2+NCrLDzVRBxgwif++vDwoljCI1X0wvbcCqhfA3uElcCuhCAtBkl/ZNqLR0H1Gjq
 XXA801KqyVrvottuv0+PmEOvqQ8skTpBvl4Da8JjQ73Zscm3/5Mfk0dGTLlggNgapszsP9z
 nt/1Oi6gzLasX933wIdLZWVex8QNfKr8+MTx6bmpVodaeklR+281u8k1zhCBu5pWrzlavUh
 CbWjUm4j3YbeztpG98r9MZOVKbJZyHaiHWcRa1vEq3Cz8AEnRyRkQhd5WtvA==

答案1

最终我找到了一个在线 DKIM 验证器:https://www.appmaildev.com/en/dkim他们会测试现有邮件的上传或向您提供一个测试地址以供发送。

我不能 100% 确定最初的问题是什么,因为当我发现这个问题时,我已经创建了另一个问题:使用 Digital Ocean 的“浮动 IP”功能来设置我的 DNS 记录。操作系统实际上看不到这个地址,其他邮件服务器报告邮件来自该“实际”IP(仍然有效)。 值得注意如果你是 droplet 用户。

需要说明的是,这不可能是最初的问题,因为我昨天才启用了浮动 IP,当时我绝望地决定移动节点,看看是否有东西从树上掉下来。然而……

我还没有找到一个免费的服务,可以通过接收邮件来主动测试 DKIM 签名,除了一个,它似乎做了其他服务器所做的事情——从不接受它应该测试的邮件(不知道这是否是一个潜在的线索)。

请注意,该服务不是此处第一段中链接的服务。无论如何,其他邮件服务器通常拒绝连接(而不是退回邮件)似乎确实表明存在“DNS 问题”。我仍然不知道为什么在新安装的服务器运行了一个月后,这个问题会变成问题,所以这实际上只是一个部分答案——尽管它确实解释了为什么电子邮件服务器会停止发送 DMARC 报告. 将所有 DNS 记录(域和 aporia 节点的 A 记录、与 SPF 匹配等)整理好后,一切终于正常了。

相关内容