我在邮件服务器(postfix 和 ubuntu)上设置了 DKIM,以便它能够签名外发电子邮件。我使用了以下说明: https://help.ubuntu.com/community/Postfix/DKIM
但是,我需要它来签署来自任何域(在发件人地址中)的电子邮件,而不仅仅是我自己的。我正在构建电子邮件通讯服务,客户将通过服务器发送自己的电子邮件。
首先,我在 /etc/dkim-filter.conf 中设置了“Domain *”。这样,无论域名是什么,它都会在所有发出的电子邮件中包含 DKIM 标头。
但是,gmail 上的验证检查失败,因为它正在检查发件人地址中的域,而不是我的域(和 DNS 记录)。有人知道怎么做吗?
答案1
好吧,我设法自己解决了这个问题,但我想在这里发布这些步骤以供后人参考,因为关于这个问题的文档为零(我找不到),这实际上只是猜测和检查。
在我按照上面描述的方式设置“Domain *”之后,它会像这样签名:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=clientdomain.com;
s=main; t=1250005729;
bh=twleuNpYDuUTZQ/ur9Y2wxCprI0RpF4+LlFYMG81xwE=;
h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
b=kohI7XnLlw/uG4XMJoloc4m9zC13g48+Av5w5z7CVE0u3NxsfEqwfDriapn7s7Upi
31F3k8PDT+eF57gOu2riXaOi53bH3Fn/+j0xCgJf8QpRVfk397w4nUWP/y8tz4jfRx
GhH21iYo05umP0XflHNglpyEX02bssscu2VzXwMc=
请注意“d=clientdomain.com”。它根据电子邮件中的发件人地址生成此信息,其中发件人地址类似于“[电子邮件保护]“。显然,如果它检查的是客户端的域而不是我的域,那么就没有 DNS TXT 记录,验证就会失败。
所以无论如何,我在本文档中发现您可以设置一个 KeyList 参数。 http://manpages.ubuntu.com/manpages/hardy/man5/dkim-filter.conf.5.html
它并没有真正描述我想要做什么,但我想我会尝试一下。我注释掉了 KeyFile,并将 KeyList 设置为“/etc/mail/dkim_domains.key”,这是我随意编造的文件名。然后我创建了该文件,并在其中放入了“*:feedmailpro.com:/etc/mail/dkim.key”。这会告诉它任何客户端域,使用我的域 (feedmailpro.com) 对其进行签名,并使用 dkim.key 文件。
重新启动 DKIM 和 postfix
sudo /etc/init.d/dkim-filter restart
sudo /etc/init.d/postfix restart
这是我发送测试电子邮件时生成的密钥。
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=feedmailpro.com;
s=dkim.key; t=1250005729;
bh=twleuNpYDuUTZQ/ur9Y2wxCprI0RpF4+LlFYMG81xwE=;
h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
b=kohI7XnLlw/uG4XMJoloc4m9zC13g48+Av5w5z7CVE0u3NxsfEqwfDriapn7s7Upi
31F3k8PDT+eF57gOu2riXaOi53bH3Fn/+j0xCgJf8QpRVfk397w4nUWP/y8tz4jfRx
GhH21iYo05umP0XflHNglpyEX02bssscu2VzXwMc=
改进,您会看到 d= 现在设置为我的域名(即使电子邮件的发件人地址不是我的域名)。但是 s= 已更改为“dkim.key”,而不是我在 dkim-filter.conf 中选择的选择器。在原始版本中安装说明我已将选择器设置为“邮件”。这很奇怪,但我注意到它将其更改为我的密钥的文件名,dkim.key。
因此我将“/etc/mail/dkim.key”重命名为“/etc/mail/mail”。还更新了“/etc/mail/dkim_domains.key”中对它的引用。
按照上述方法重新启动 dkim-filter 和 postfix,现在它开始工作了。这是使用正确选择器正确签名的最终标头(显然基于密钥的文件名)。
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=feedmailpro.com;
s=mail; t=1250006218;
bh=tBguOuDhBDlhv0m4KF66LG10V/8ijLcAKZ4JbjpLXFM=;
h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
b=c9eqvd+CY86BJDUItWVVRvI3nibfEDORZbye+sD1PVltrcSBOiLZAxF3Y/4mP6vRX
MUUNCC004oIH1u7FYafgF32lpuioMP1cd7bi6x3AZ5zH4BYETNBnnz4AhAPBtqlIh/
FFMz8jkhhLhcM2hDpwJkuKjAe3LzfNVDP8kD11ZI=
现在 s=mail 是正确的,d=feedmailpro.com 也是正确的。成功了!
总的来说,这比我想象的要难得多,而且似乎没有关于如何做到这一点(签署所有传出域)的文档,但我想它是开源软件,所以我不能抱怨。
最后要注意的是,要检查 TXT DNS 记录是否设置正确,你可以对你的域名执行以下命令
dig mail._domainkey.feedmailpro.com TXT
可能需要安装 dig(sudo apt-get install dig)。如果您使用 Slicehost 管理器添加 DNS 条目,则可以像这样输入 TXT 记录。
Type: TXT
Name: mail._domainkey
Data: k=rsa; t=s; p=M5GfMA0...YOUR LONG KEY...fIDAQAB
TTL seconds: 86400
我不太明白为什么名称设置为“mail._domainkey”,末尾没有句号,也没有我的域名,比如“mail._domainkey.feedmailpro.com”。但无论如何,它似乎有效,所以我很高兴。
如果您想复制此操作,以下是我开始使用的说明: https://help.ubuntu.com/community/Postfix/DKIM
答案2
受到 Brian Armstrong 对 dkim-filter 的回答的启发,我是这样做的OpenDKIM。
/etc/opendkim.conf
Syslog yes
UMask 002
KeyTable /etc/mail/dkim_key_table
SigningTable refile:/etc/mail/dkim_signing_table
请注意 SigningTable 有重新归档:在其定义中,这指定文件包含正则表达式;在我们的例子中是 * 通配符。
/etc/mail/dkim_key_table
keyname example.com:selector:/etc/mail/selector.key
这里键名用于匹配此文件和 dkim_signing_table 文件之间的密钥。在我的实际文件中,我将其命名为与我的选择器相同的名称。
示例.com和选择器应该替换你希望在签名中使用的域和选择器d=和s=分别。
/etc/mail/dkim_signing_table
* keyname
此文件简单映射在以下位置找到的地址从:标头到 dkim_key_table 中的密钥。在这种情况下,我们希望通过此服务器发送的所有电子邮件都使用相同的密钥进行签名,因此使用了 * 通配符。
答案3
旧线程,但也许其他发现此问题的人会知道 2.x 版本的 opendkim 使用 KeyTable 而不是 KeyList。
您可以使用 opendkim-convert-keylist 工具转换 KeyList 文件 (http://manpages.ubuntu.com/manpages/lucid/man8/opendkim-convert-keylist.8.html)
您可以在 opendkim 手册页上阅读有关 KeyTable 实现的更多信息:(http://www.opendkim.org/opendkim.conf.5.html)
答案4
我不太明白为什么名称设置为“mail._domainkey”而没有句点
DKIM 过滤器的文档通常以 unix man 格式安装。只有 Google 知道 :-) 我也遇到过这个问题。
man dkim-filter.conf
man dkim-filter
man dkim-genkey
man dkim-stats
man dkim-testkey
man dkim-testssp
我在 Debian 上试过了。如果它实际上不在您的发行版中,您可以下载源 tarball 和易读文档。
man dkim-milter-2.8.3/dkim-filter/dkim-filter.conf.5
ETC。
--
我不太明白为什么名称设置为“mail._domainkey”而没有句点
这样您就可以在不同域的两个 DNS 记录中使用完全相同的记录。