我有一台运行多年的个人电子邮件服务器;发送邮件很少出现问题,所以我从来没有真正了解过像 SPF、DMARC 和 DKIM 这样的东西。最近,在升级系统时,我决定这样做。
SPF 非常简单,因为我使用一个固定的 IP 地址。
DMARC 几乎一样简单;我最初使用“无”的策略来接收报告并将其放置一两个星期,然后将其切换为拒绝。
我现在已经为邮件服务器实现了一个 DKIM 签名过滤器(Courier MTA,没有为此做好准备)。对于我使用的复杂位dkimpy。这也有一个简单的验证工具,它适用于整个消息,它是否有自己的查找等,这意味着它是虚拟证明,因为只有一种使用它的方法(而签名可以通过各种方式配置并且可能离开留给我把它搞砸的空间)。这传递了我认为应该传递的消息,而传递了我认为不应该传递的消息,所以我对它的工作原理感到相当满意;我已经在从服务器收到的消息上运行它。目前,为了尽量减少问题,我只签署了正文和 From 标头。
但是,我的邮件都没有通过我的测试帐户——一个是 gmail,另一个来自我的 ISP。更重要的是,虽然我现在在 DMARC 记录中同时拥有 rua 和 ruf 地址,但我没有收到任何关于它们的报告。以前,他们都像发条一样。
如果我所做的只是关闭过滤器(所以没有 DKIM sig),一切都会再次运行。我已经检查过服务器实际上在所有情况下都在尝试;失败的 DKIM 似乎会超时并关闭连接,从而导致无休止的延迟——这似乎有点奇怪,因为这意味着“被拒绝”的邮件甚至没有被检查,但删除签名就可以了让它再次被接受。我将把它归结为 Courier 日志记录中的模棱两可。
我知道这里没有人受任何法律的约束,但这是正常的政策吗?假设 DKIM 签名错误,接收服务器不应该向我发送 DMARC 报告吗?
所以我现在在一条小溪上。尽管像 MXToolbox 这样的东西给了我很好的色彩,但我还没有找到一个免费的服务来通过接收邮件来主动测试 DKIM 签名,除了一个似乎已经完成了其他服务器所做的事情——从不接受它应该测试的邮件(不知道这是否是一个潜在的线索)。
以下是来自的相关 DNS 记录dig
:
防晒指数:
cognitivedissonance.ca. 3600 IN TXT "v=spf1 ip4:138.197.150.177 -all"
大金:
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==
最后我确实找到了一个在线 DKIM 验证器:https ://www.appmaildev.com/en/dkim他们会测试现有邮件的上传或给你一个测试地址来发送。
我不能 100% 确定最初的问题是什么,因为当我发现这个问题时,我已经创建了另一个问题:使用 Digital Ocean 的“浮动 IP”功能来设置我的 DNS 记录。操作系统实际上并没有看到这个地址,并且其他邮件服务器正在报告来自那个“实际”IP 的邮件(这仍然有效)。 值得注意的是,如果您是 droplet 用户。
需要明确的是,这不可能是最初的问题,因为我昨天才启用浮动 IP,当时我绝望地决定移动节点,看看是否有任何东西从树上掉下来。然而...
请注意,服务不是此处第一段中链接的服务。无论如何,其他邮件服务器通常拒绝连接(而不是退回邮件)似乎确实在尖叫“DNS问题”。为什么当服务器的新安装运行了一个月时这会成为一个问题我仍然不知道,所以这实际上只是一个部分答案——尽管它确实解释了为什么电子邮件服务器会停止发送 DMARC 报告。使用 DNS 记录(域和 aporia 节点的 A 记录,匹配 SPF 等)将我所有的鸭子排成一排,最后一切正常。