如何让 opendkim 签署电子邮件?

如何让 opendkim 签署电子邮件?

我在 ubuntu 14.04 VPS 上运行,在使用 opendkim 签署发送的电子邮件时遇到了问题。

另外,我不理解 dig -x 的结果,我不确定我的 VPS 提供商是否正确输入了 rDNS PTR 记录。以下是返回的结果:

$  dig -x 84.200.17.129

; <<>> DiG 9.9.5-9+deb8u5-Debian <<>> -x 84.200.17.129
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38970
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;129.17.200.84.in-addr.arpa.    IN  PTR

;; ANSWER SECTION:
129.17.200.84.in-addr.arpa. 10799 IN    CNAME   129.0-255.17.200.84.in-addr.arpa.
129.0-255.17.200.84.in-addr.arpa. 10799 IN PTR  ozarksneighborlyexchange.com.

;; Query time: 273 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Mar 25 07:13:48 CDT 2016
;; MSG SIZE  rcvd: 121

例如,我知道 CNAME 是一个别名。我期望我的域名和 IP 有一个 PTR,但他们似乎只添加了一个 CNAME 记录。PTR 记录与提供商的整个 IP 范围有关。据我所知,CNAME 记录对于验证目的没有太大作用。不过,在添加 CNAME 后,mail-tester.com 上的分数确实从 3/10 提高到了 4.5/10。

至于 opendkim 签名问题,我遵循了以下指南:https://easyengine.io/tutorials/mail/dkim-postfix-ubuntu/并启用扩展日志记录:

# Log to syslog
Syslog                  yes
LogWhy                  yes
SyslogSuccess           yes
MilterDebug             3

我在发送至 mail-tester.com 的简单电子邮件日志中看到以下内容:

Mar 25 11:49:35 seed05 opendkim[10983]: D05F140793: no signing domain match for 'seed05.ozarksneighborlyexchange.com'
Mar 25 11:49:35 seed05 opendkim[10983]: D05F140793: no signing subdomain match for 'seed05.ozarksneighborlyexchange.com'
Mar 25 11:49:35 seed05 opendkim[10983]: D05F140793: no signature data

我对子域名在其中的作用也有点困惑。我将我的 VPS 主机名设置为 seed05,并将此行添加到我的 /etc/hosts 文件中:84.200.17.129 seed05.ozarksneighborlyexchange.com seed05

我不确定是否需要将任何与子域相关的内容添加到我的 DNS 中。我目前定义了 2 个“A”记录和 2 个“TXT”记录:A @ A www TXT @ v=spf1 a include:_spf.ozarksneig.....(对于 SPF,这似乎没问题)TXT mail._domainkey v=DKIM1; p=MIGfMA0GCS......(工具似乎说这没问题)

我已将 postfix 添加到 opendkim 组。我看到很多对 inet 的引用,但 inetd 已被弃用,我找不到有关如何配置其替代品的信息(例如,为 smtp / postfix 定义端口 8891 的位置)。

因此,正如您所看到的,尽管我花了一整天时间尝试让电子邮件发送得更可靠,但我还是有几个困惑。非常感谢任何对此的意见/答案。谢谢!

答案1

对于反向映射空间中的 PTR 记录,它们在那里的内容很好。它遵循RFC2317这是目前委派控制小于 /24 网络的 DNS 记录的最佳实践。只是他们所拥有的似乎有点不必要,因为“范围”符号是 0-255,这意味着 /24 网络大小(但有一个委派给另一台服务器—— dig ns 0-255.17.200.84.in-addr.arpa

所以这部分没问题,只要您的邮件服务器在 EHLO 交换中声称是 ozarksneighborlyexchange.com。但根据您帖子的其余部分,它实际上必须是 seed05.ozarksneighborlyexchange.com,即,它必须是您的邮件服务器自己知道的(myhostnamePostfix main.cf 文件中的声明)

让 OpenDKIM 工作起来很简单,只需设置签名密钥,然后告诉 Postfix 将其用作出站邮件的“过滤器”。inet 部分让您感到困惑,它指的是传输机制,而不是旧的 inted 守护进程。

这是我的 OpenDKIM conf 文件,已为您修改:/etc/opendkim.conf

(我猜错的部分是域名行……您想使用电子邮件地址的域名部分,[电子邮件保护],因此如果域部分ozarksneighborlyexchange.com适合您,那么这就是 DKIM 配置中的内容,并决定了进入 DNS 的内容……)

# This is a basic configuration that can easily be adapted to suit a standard
# installation. For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.

# Log to syslog
Syslog                  yes
# Required to use local socket with MTAs that access the socket as a non-
# privileged user (e.g. Postfix)
UMask                   002

# Sign for example.com with key in /etc/mail/dkim.key using
# selector '2007' (e.g. 2007._domainkey.example.com)
Domain                 ozarksneighborlyexchange.com
KeyFile                 /etc/postfix/dkim.key
Selector                general

# Commonly-used options; the commented-out versions show the defaults.
#Canonicalization       simple
#Mode                   sv
#SubDomains             no
#ADSPDiscard            no

假设您生成了名为“dkim”的 DKIM 密钥,因此您的 /etc/postfix 目录中有一个 dkim.key 和一个 dkim.pub 文件。请根据需要进行调整。

下一部分是告诉 OpenDKIM 在哪里监听。我在与 Postfix 相同的机器上使用 Internet 类型套接字 (inet),因此我在 /etc/default/opendkim 中有以下内容:

# Command-line options specified here will override the contents of
# /etc/opendkim.conf. See opendkim(8) for a complete list of options.
#DAEMON_OPTS=""
#
# Uncomment to specify an alternate socket
# Note that setting this will override any Socket value in opendkim.conf
#SOCKET="local:/var/run/opendkim/opendkim.sock" # default
SOCKET="inet:60001@localhost"

然后在 Postfix 配置中,告诉它在哪里找到它并将其用作“milter”。

在 /etc/postfix/main.cf 中:

smtpd_milters = inet:localhost:60001
milter_default_action = accept

最后一步是将您的公钥放入 DNS,以便其他人可以验证您的签名。就我而言,我的电子邮件地址是[电子邮件保护],因此我acmeps.com在 opendkim.conf 文件中将其作为域,然后在 DNS 中,我有:

general._domainkey      TXT     "v=DKIM1\; k=rsa\; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsnvxDB629MQXlcEMxgJIj18oH0BP5i02+v" "e3acN7yJ+n+smkMHUtaXSnSU2KN0ObySjkafUD93L1dL4KtafAKwE5gWSRbxrMBwWjwcmNgiCmtELbzt" "azlK8N6bbm2R1e7csUfHaFScSC5Lu+UD8JrFeovWfNCSpmV/kyrIlTTArNLK3R7mad4MmOZo/Agj9JRg" "0fa+cKCEl8Uo8RqY4xHX9fAlJTGT4MSvH3KEo9aL/tr7qZvcROA8dBaCLfdDnOqrBpfjFfZZSoCcYi6V" "bTKswYiAHABljoq5qhR7k+EdKv2Z+DRD2e2knld5kYXeMJXUENrZ2hYn4q25JEdET1TwIDAQAB"

您可以通过 来查看dig txt general._domainkey.acmeps.com

您注意到这里general出现了。这是 DKIM selector,需要在 opendkim.conf 文件中与您在 DNS 中输入的内容相匹配。您没有列出选择器设置为什么,但这是另一件会困扰您的事情。

这应该能帮助你渡过难关!

相关内容