我在 Debian Wheezy 上安装了带有 postfix 的 opendkim。外发邮件正在获取 DKIM 签名。smtpd 和非 smtpd 邮件过滤器规格相同。
收到的邮件似乎没有经过验证 - 邮件客户端中没有 Authentication-Results 标头。我已将“AlwaysAddARHeader yes”添加到 opendkim 配置中,但没有任何变化。
在邮件日志中,收到一条消息后,在所有各种条目中,opendkim 有两个条目。第一个标识服务器并添加“非内部”(当它是 Google 时,这似乎是合理的)。第二个只是说“未经身份验证”。但我看不出它未经身份验证的任何原因!我在哪里可以找到解决方案?
答案1
看起来,no_milters
内容过滤器目标中的选项可以防止在内容过滤器之前和之后运行两次 milter。
你也可以删除,no_milters
这个选项,结果如下:
- opendkim 现在可以验证电子邮件
- milter 对外发邮件运行两次,因此您的邮件中有 2 个 dkim 签名
如果您恢复,no_milters
选项,opendkim 仍然可以签署电子邮件,但会失去验证电子邮件的能力。对 amavis 进行一些修改后发现,amavis 使用与 opendkim 相同的 ID,这并不奇怪,因为它们都遵守标准。鉴于 amavis 将 opendkim 在验证后添加的标头(实际上它仍然会验证消息)替换为空标头,因此看起来 opendkim 不会验证消息。
因此,有两种方法可以防止此标题消失:
- 在内容过滤器之后运行 milter,我认为这在设计上是不可能的
- 防止 amavis 覆盖此标头
我找不到任何方法来阻止 milter 在 amavis 之前运行,以便允许它在 amavis 之后运行。但是,您可以通过在$myauthservid = "amavis.local";
50 个用户配置文件的末尾附近重新定义来阻止 amavis 重写该标头。至少这是我自己解决这个问题的方法。
答案2
“未认证”可能只是因为远程邮件服务器没有签署他们的邮件。并不是每个人都使用 DKIM 签署他们的电子邮件。事实上,这种机制并没有得到应有的广泛实施。话虽如此,使用 DKIM 会大大提高您的邮件传递率,但不要指望每个向您的组织发送邮件的人都使用它。在我看来,DKIM 的发展速度很慢。
你可能会觉得有趣DKIM部署趋势实验。
此外,如果你确定远程服务器正在签署他们的消息,而你的邮件服务器忽略了它,我建议你检查已知的错误在这里。