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

我在我的邮件服务器(postfix和ubuntu)上安装了DKIM,以便签名外发电子邮件。 我使用了这些说明: https : //help.ubuntu.com/community/Pfixfix/DKIM

不过,我需要它从任何域(在发件人地址)签署电子邮件,而不仅仅是我自己的。 我正在build立一个电子邮件通讯服务,客户将通过服务器发送他们自己的电子邮件。

首先我在/etc/dkim-filter.conf中设置“Domain *”。 这使得它包括所有外发电子邮件中的DKIM头文件,不pipe域名是什么。

但是,validation检查在gmail上失败,因为它检查发件人地址中的域名,而不是我的域名(和dnslogging)。 有谁知道如何做到这一点?

    好吧,我设法自己解决这个问题,但我想在这里发布后代的步骤,因为这里没有任何文档(我可以find),这实际上是猜测和检查。

    在我如上所述设置“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”。 它是根据电子邮件的发件人地址生成的,发件人的地址与“[email protected]”类似。 显然,如果它检查客户的域名,而不是我的DNS TXTlogging在那里,validation将失败。

    所以无论如何,我在这个文档中发现你可以设置一个KeyList参数。 http://manpages.ubuntu.com/manpages/hardy/man5/dkim-filter.conf.5.html

    这并没有真正描述我想做什么,但我想我会玩。 我注释掉了KeyFile,并将KeyList设置为“/etc/mail/dkim_domains.key”,这是我编写的任意文件名。 然后,我创build了这个文件,并把它放在它“*:feedmailpro.com:/etc/mail/dkim.key”。 这告诉它任何客户域,用我的域(feedmailpro.com)签名,并使用dkim.key文件。

    重新启动DKIM和后缀

     sudo /etc/init.d/dkim-filter restart sudo /etc/init.d/postfix restart 

    现在这是我发送testing邮件时产生的关键。

     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中select的select器。 在原始设置说明中,我将select器设置为“邮件”。 这很奇怪,但我注意到它改变了我的密钥,dkim.key的文件名。

    所以我去了“/etc/mail/dkim.key”改名为“/ etc / mail / mail”。 还在“/etc/mail/dkim_domains.key”中更新了对它的引用。

    重新启动dkim-filter和postfix,和上面一样,现在开始工作。 这是使用正确的select器(显然基于密钥的文件名)正确标志的最终标题。

     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 DNSlogging是否正确设置,您可以执行类似于您的域名的命令

     dig mail._domainkey.feedmailpro.com TXT 

    可能需要安装挖(sudo apt-get install dig)。 如果您使用Slicehostpipe理器添加DNS条目,则可以像这样inputTXTlogging。

     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

    受到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具有重复性在它的定义中,它指定文件包含正则expression式; 在我们的例子中*通配符。

    在/ etc /邮件/ dkim_key_table

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

    这里的keyname用来匹配这个文件和dkim_signing_table文件之间的密钥。 在我的真实文件中,我将其命名为我的select器。

    example.comselector应该被replace,你希望在签名的d =s =中分别使用的域和select器。

    在/ etc /邮件/ dkim_signing_table

     * keyname 

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

    我不明白为什么这个名字没有一段时间就设置为“mail._domainkey”

    DKIMfilter的文档通常以三维文件格式安装。 只有Google知道:-)我也有一个问题。

     man dkim-filter.conf man dkim-filter man dkim-genkey man dkim-stats man dkim-testkey man dkim-testssp 

    我在Debian上试了一下。 如果实际上并不在你的分发中,你可以下载源代码压缩包和简单的阅读文档。

     man dkim-milter-2.8.3/dkim-filter/dkim-filter.conf.5 

    等等

    我不明白为什么这个名字没有一段时间就设置为“mail._domainkey”

    这样您就可以在不同域的DNSlogging中使用相同的内容。

    旧的线程,但也许别人谁发现这有一个用途知道opendkim的2.x版本与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