在我的服务器中为多个域(网站)使用 DKIM

Die*_*ego 24 postfix dkim

我已经阅读了 MountainX 发布的教程(Setup DKIM (DomainKeys) for Ubuntu, Postfix and Mailman),但如果我想为多个域托管和发送电子邮件,我无法弄清楚如何应用这些步骤。有人有线索吗?

Die*_*ego 34

好的!我从问题中提到的帖子中发现了这一点。我在答案本身和其中提供的链接之间进行了某种混合。特别是第四个链接是我使用的那个。

所以事情是这样的。假设您有一台服务器或 VPS,并将您的域之一设为主域并用作服务器名称(在我的示例中:mydomain.com)。

因此,首先,我们将更改为 root 以简化操作,但您可以跳过此步骤并sudo在每个命令之前使用。

sudo su
Run Code Online (Sandbox Code Playgroud)

现在,我们安装 OpenDKIM:

apt-get install opendkim opendkim-tools
Run Code Online (Sandbox Code Playgroud)

让我们修复配置文件。我们正在开放/etc/opendkim.conf编辑。我用的是nano,但其他编辑器也一样。

nano /etc/opendkim.conf
Run Code Online (Sandbox Code Playgroud)

打开后,让它看起来像这样。如果您觉得舒服,您可以更改一些选项,但Domain,KeyFileSelector必须保持注释。

# 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.
#
#Domain                  example.com
#KeyFile                 /etc/opendkim/201205.private
#Selector                201205
#
# Commonly-used options
Canonicalization        relaxed/simple
Mode                    sv
SubDomains              yes
# Log to syslog
Syslog                  yes
LogWhy                  yes
# Required to use local socket with MTAs that access the socket as a non-
# privileged user (e.g. Postfix)
UMask                   022
UserID                  opendkim:opendkim
#
KeyTable                /etc/opendkim/KeyTable
SigningTable            /etc/opendkim/SigningTable
ExternalIgnoreList      /etc/opendkim/TrustedHosts
InternalHosts           /etc/opendkim/TrustedHosts
#
Socket                  inet:8891@localhost
#EOF
Run Code Online (Sandbox Code Playgroud)

接下来,我们创建一些文件夹和文件,这些文件夹和文件将保存有关 OpenDKIM 应该使用和处理什么的信息。目前,该TrustedHosts文件。我们创建和编辑它:

mkdir /etc/opendkim
nano /etc/opendkim/TrustedHosts
Run Code Online (Sandbox Code Playgroud)

我们必须在此文件中放入受信任地址列表:localhost 和 127.0.0.1,以及您的服务器名称和 IP:

127.0.0.1
localhost
192.99.34.121
mydomain.com
Run Code Online (Sandbox Code Playgroud)

现在我们编辑 OpenDKIM 配置文件。

nano /etc/default/opendkim
Run Code Online (Sandbox Code Playgroud)

并在文件末尾添加这些行。他们会告诉 OpenDKIM 它应该在哪个端口接收签名请求:

SOCKET="inet:8891@localhost"
Run Code Online (Sandbox Code Playgroud)

我们打开 Postfix 配置文件。

nano /etc/postfix/main.cf
Run Code Online (Sandbox Code Playgroud)

并将这些行添加到文件末尾。他们会告诉 Postfix 它应该发送要签名的电子邮件以及发送地址。

milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
Run Code Online (Sandbox Code Playgroud)

如果您现在不添加域,则可以重新启动所有内容,以使配置生效。

/etc/init.d/opendkim restart
/etc/init.d/postfix reload
/etc/init.d/postfix restart
Run Code Online (Sandbox Code Playgroud)

完毕!服务器已准备好使用 DKIM。现在,您需要将您的域添加到该系统中。以下过程对于您要添加的所有域都是相同的。我将使用 otherdomain.com 作为示例,将其替换为您自己的。

请记住,我以前是 root,但如果不是,请sudo su在命令之前使用关键字sudo

sudo su
Run Code Online (Sandbox Code Playgroud)

首先,我们为我们的域创建一个目录并进入它:

mkdir -p /etc/opendkim/keys/otherdomain.com
cd /etc/opendkim/keys/otherdomain.com
Run Code Online (Sandbox Code Playgroud)

现在我们为域生成一个密钥:

opendkim-genkey -r -d otherdomain.com
Run Code Online (Sandbox Code Playgroud)

我们将新创建的文件的所有权授予 OpenDKIM 用户:

chown opendkim:opendkim default.private
Run Code Online (Sandbox Code Playgroud)

我们打开KeyTable文件为我们的新域添加新密钥:

nano /etc/opendkim/KeyTable
Run Code Online (Sandbox Code Playgroud)

我们将它添加到文件的末尾(在我们可能拥有的所有其他域之后):

default._domainkey.otherdomain.com otherdomain.com:default:/etc/opendkim/keys/otherdomain.com/default.private
Run Code Online (Sandbox Code Playgroud)

我们打开SigningTable文件。

nano /etc/opendkim/SigningTable
Run Code Online (Sandbox Code Playgroud)

并在文件末尾追加(同样,我们将为每个域分配一行):

otherdomain.com default._domainkey.otherdomain.com
Run Code Online (Sandbox Code Playgroud)

此签名表列出了所有已签名的邮件。只需添加一个域名,来自该域的所有邮件都将被签名。

我不确定是否有必要进行下一步,但我只是做了,以防万一... 我们打开TrustedHosts文件。

nano /etc/opendkim/TrustedHosts
Run Code Online (Sandbox Code Playgroud)

并在文件末尾添加:

otherdomain.com
Run Code Online (Sandbox Code Playgroud)

最后一件事:我们显示文件的内容/etc/opendkim/keys/otherdomain.com/default.txt

cat /etc/opendkim/keys/otherdomain.com/default.txt
Run Code Online (Sandbox Code Playgroud)

并将引号之间的信息添加到TXT域的DNS区域中的记录中,我们也必须default._domainkey用作记录的名称。注意:“在引号之间”是以“ v=DKIM1;k=rsa; p=WIGfM...”开头的文本。

如果我们完成添加域(现在),我们将重新启动所有内容以应用更改。

/etc/init.d/opendkim restart
/etc/init.d/postfix reload
/etc/init.d/postfix restart
Run Code Online (Sandbox Code Playgroud)

完毕!

  • 很棒的指南,但我必须从 SigningTable 条目中删除 *@ 以避免在 mail.log 中出现错误“'user@example.com' 的签名表不匹配”,根据 http://lists.opendkim.org/存档/opendkim/users/2011/08/1332.html (2认同)