AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 52830
Accepted
Brian Armstrong
Brian Armstrong
Asked: 2009-08-12 08:41:12 +0800 CST2009-08-12 08:41:12 +0800 CST 2009-08-12 08:41:12 +0800 CST

DKIM 签署来自任何域的传出邮件(使用 Postfix 和 Ubuntu)

  • 772

我在我的邮件服务器(postfix 和 ubuntu)上设置了 DKIM,因此它对传出的电子邮件进行了签名。我使用了这些说明: https ://help.ubuntu.com/community/Postfix/DKIM

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

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

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

postfix dkim
  • 4 4 个回答
  • 33330 Views

4 个回答

  • Voted
  1. Best Answer
    Brian Armstrong
    2009-08-12T09:04:02+08:002009-08-12T09:04:02+08:00

    好的,我设法自己解决了这个问题,但我想在这里发布这些步骤以供后代使用,因为这方面的文档为零(我可以找到),而且实际上是猜测和检查。

    如上所述设置“域 *”后,它会像这样签名:

    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 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

    • 43
  2. Adam J. Forster
    2010-12-11T03:37:19+08:002010-12-11T03:37:19+08:00

    受 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
    

    这里keyname用于匹配此文件和 dkim_signing_table 文件之间的密钥。在我的真实文件中,我将其命名为与我的选择器相同。

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

    /etc/mail/dkim_signing_table

    *   keyname
    

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

    • 16
  3. user203421
    2013-12-24T06:52:52+08:002013-12-24T06:52:52+08:00

    旧线程,但也许其他发现此问题的人知道 2.x 版本的 opendkim 使用 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 )

    • 3
  4. hynekcer
    2010-10-17T15:09:02+08:002010-10-17T15:09:02+08:00

    我真的不明白为什么将名称设置为“mail._domainkey”而没有句点

    DKIM 过滤器的文档通常以 unix man 格式安装。只有谷歌知道 :-) 我也遇到了问题。

    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 记录中使用完全相同的内容。

    • 2

相关问题

  • Postfix 在特定端口上接受邮件

  • 让 Postfix 以两种方式处理垃圾邮件

  • Postfix 或 exim:自动/程序化和转发电子邮件设置

  • 后缀电子邮件地址

  • 什么是最好的开源电子邮件解决方案包

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve