DKIM可以从任何域(使用Postfix和Ubuntu)签署外发邮件


40

我在邮件服务器(后缀和ubuntu)上安装了DKIM,因此它可以签署外发电子邮件。我使用了以下说明:https : //help.ubuntu.com/community/Postfix/DKIM

但是,我需要它来签名来自任何域的电子邮件(在“发件人”地址中),而不仅仅是我自己的。我正在建立电子邮件通讯服务,客户将通过服务器发送自己的电子邮件。

首先,我在/etc/dkim-filter.conf中设置“ Domain *”。无论域是什么,它都将DKIM标头包含在所有外发电子邮件中。

但是,由于gmail检查的是发件人地址中的域,而不是我的域(和dns记录),因此gmail的验证检查失败。有谁知道如何做到这一点?

Answers:


41

好的,我设法自己解决了这个问题,但是我想在这里张贴步骤以供后代参考,因为对此(我可以找到)的文档数量为零,而且实际上是猜测和检查。

如上所述,设置“ 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”。它是根据电子邮件中的发件人地址生成的,发件人地址类似于“ contact@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和后缀

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
感谢您在这里提出来,它正在帮助其他人(例如我)出来:)
thomasrutter 2010年

欢迎您托马斯!
Brian Armstrong 2010年

哇,这很有帮助。我一直因为“ s = dkim.key”而垂头丧气,直到碰到你的帖子!
3molo 2011年

ubuntu.com指南未提及的一件事是,一旦您使它起作用,请在TXT记录中将t = y更改为t = n,以表明它不是测试。
3molo 2011年

这里有一些很好的资源可用于使用SigningTable等。例如,blog.tjitjing.com / index.php / 2012/03 /…(优秀),甚至是opendkim自述文件,opendkim.org
opendkim

15

受到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具有refile 在其定义中,它指定文件包括正则表达式;在我们的例子中是*通配符。

/ etc / mail / dkim_key_table

keyname  example.com:selector:/etc/mail/selector.key

这里键名来匹配该文件和文件dkim_signing_table之间的关键。在我的真实文件中,我将此命名为与选择器相同的名称。

example.com选择器应替换为您希望分别在签名的d =s =中使用的域和选择器。

/ etc / mail / dkim_signing_table

*   keyname

此文件简单地将From:头中找到的地址映射到dkim_key_table中的键。在这种情况下,我们希望通过此服务器发送的所有电子邮件都使用相同的密钥签名,因此使用*通配符。


对于那些“在OpenDKIM中没有签名表匹配”的人serverfault.com/q/569823/115907
kommradHomer 2015年

如果有人得到了这个答案(最好的答案,顺便说一句!教我了我的需要),并希望从具有不同密钥的两个不同域发送邮件,可以这样完成:KeyTable文件:“ tagone._domainkey.firstdomain.com firstdomain .com:tagone:/etc/opendkim/keys/firstdomain.com/tagone tagtwo._domainkey.seconddomain.com seconddomain.com:tagtwo:/etc/opendkim/keys/seconddomain.com/tagtwo“ SigningTable:” * @ firstdomain。 com tagone._domainkey.firstdomain.com *@seconddomain.com tagtwo._domainkey.seconddomain.com“每个文件都是2行(注释此处未保存换行符)
肖恩·科伦坡

或:SigningTable csl:* = keyname KeyTable csl:keyname = example.com:selector:/etc/mail/selector.key
danblack

3

旧线程,但也许其他人发现它有助于了解opendkim的2.x版本与KeyTable而不是KeyList一起使用。

您可以使用opendkim-convert-keylist工具(http://manpages.ubuntu.com/manpages/lucid/man8/opendkim-convert-keylist.8.html)转换您的KeyList文件。

您可以在opendkim手册页上了解有关KeyTable实现的更多信息:(http://www.opendkim.org/opendkim.conf.5.html


请总结您链接的文章,并引用任何相关的代码段或配置块。网站将来可能会更改或由于多种原因无法加载。
89c3b1b8-b1ae-11e6-b842-48d705 2013年

2

我真的不明白为什么名称不设置为“ 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

等等

-

我真的不明白为什么名称不设置为“ mail._domainkey”

这样您就可以在不同域的两个DNS记录中使用完全相同的内容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.