在CentOS 8 / RHEL 8邮件服务器上安装和配置OpenDKIM

之前,我向您展示了如何在CentOS / RHEL邮件服务器上设置SPF和DKIM。 在Linux上可以执行DKIM签名和验证的两个常见软件是OpenDKIM和Amavis。 在该教程中,我使用了Amavis,因为当时OpenDKIM不包含在任何CentOS 8 / RHEL 8存储库中。 到目前为止,OpenDKIM已包含在EPEL存储库中。 有些人更喜欢使用OpenDKIM,因此我将在本教程中向您展示如何使用。

什么是DKIM?

DKIM(DomainKeys标识邮件)是DNS中的一种TXT记录,可以帮助防止电子邮件欺骗并将合法电子邮件发送到收件人的收件箱而不是垃圾邮件文件夹中。 DKIM使用私钥来 为您的域发送的电子邮件添加签名。 接收SMTP服务器使用相应的公用密钥验证签名,该公用密钥发布在您的域的DNS记录中。

在Amavis中禁用DKIM

如果您遵循了我先前的Amavis教程,但是现在您想使用OpenDKIM,则需要在Amavis中禁用DKIM。 编辑主配置文件。

sudo nano /etc/amavisd/amavisd.conf

找到以下几行。

$enable_dkim_verification = 1;  # enable DKIM signatures verification
$enable_dkim_signing = 1;       # load DKIM signing code, keys defined by dkim_key

添加一个 # 每行开头的字符以将其注释掉。

#$enable_dkim_verification = 1;  # enable DKIM signatures verification
#$enable_dkim_signing = 1;       # load DKIM signing code, keys defined by dkim_key

保存并关闭文件。 然后重新启动Amavis。

sudo systemctl restart amavisd

步骤1:在CentOS 8 / RHEL8上安装和配置OpenDKIM

首先启用EPEL(企业Linux的额外软件包)存储库并安装OpenDKIM。

sudo dnf install epel-release

sudo dnf install opendkim

编辑OpenDKIM主配置文件。

sudo nano /etc/opendkim.conf

找到以下行。

Mode     v

默认情况下,OpenDKIM在验证模式(v)下运行,该模式将验证传入电子邮件的DKIM签名。 我们需要对发送的电子邮件进行签名,因此请将此行更改为以下内容以启用签名模式。

Mode           sv

然后找到以下几行。

## Specifies whether or not the filter should generate report mail back
## to senders when verification fails and an address for such a purpose
## is provided. See opendkim.conf(5) for details.
SendReports yes

## Specifies the sending address to be used on From: headers of outgoing
## failure reports. By default, the e-mail address of the user executing
## the filter is used ([email protected]).
# ReportAddress "Example.com Postmaster" <[email protected]>

当签名验证失败并且签名包括报告请求(“ r = y”),并且签名域在DNS的报告记录中公告报告地址(即ra = user)时,OpenDKIM将向该地址发送结构化报告包含重现问题所需的详细信息。 您可能要使用特定的“发件人”电子邮件地址来发送报告。 取消注释 ReportAddress 参数并更改电子邮件地址。 请注意,这不会造成反向散射问题,因为报告电子邮件将发送到发件人域的DNS记录中指定的电子邮件地址。

找到以下行并将其注释掉,因为我们将为每个域名使用单独的键。

KeyFile   /etc/opendkim/keys/default.private

接下来,找到以下4行并将其取消注释。

# KeyTable            /etc/opendkim/KeyTable

# SigningTable        refile:/etc/opendkim/SigningTable

# ExternalIgnoreList  refile:/etc/opendkim/TrustedHosts

# InternalHosts       refile:/etc/opendkim/TrustedHosts

保存并关闭文件。

步骤2:创建签名表,密钥表和可信主机文件

编辑签名表文件。

sudo nano /etc/opendkim/SigningTable

在此文件的末尾添加以下行。 这告诉OpenDKIM,您服务器上的发件人是否正在使用 @your-domain.com 地址,然后应使用由标识的私钥进行签名 20200308._domainkey.your-domain.com

*@your-domain.com    20200308._domainkey.your-domain.com

DKIM选择器是20200308。 一个域名可能具有多个DKIM密钥。 DKIM选择器允许您选择特定的DKIM密钥。 您可以为DKIM选择器使用任何名称,但是我发现使用当前日期(2020年3月8日)作为DKIM选择器很方便。 保存并关闭文件。 然后编辑密钥表文件。

sudo nano /etc/opendkim/KeyTable

添加以下行,该行指定DKIM私钥的位置。

20200308._domainkey.your-domain.com     your-domain.com:20200308:/etc/opendkim/keys/your-domain.com/20200308.private

保存并关闭文件。 接下来,编辑受信任的主机文件。

sudo nano /etc/opendkim/TrustedHosts

默认情况下,此文件中包含127.0.0.0.1和:: 1。 现在添加以下行。 这告诉OpenDKIM,如果电子邮件来自您自己的域名,则OpenDKIM不应在电子邮件上执行DKIM验证。

*.your-domain.com

保存并关闭文件。

步骤3:产生私人/公开金钥对

由于DKIM用于签名传出邮件和验证传入消息,因此我们需要生成一个用于签名的私钥和一个用于远程验证者的公钥。 公钥将在DNS中发布。

为域创建一个单独的文件夹。

sudo mkdir /etc/opendkim/keys/your-domain.com

使用生成密钥 opendkim-genkey 工具。

sudo opendkim-genkey -b 2048 -d your-domain.com -D /etc/opendkim/keys/your-domain.com -s 20200308 -v

上面的命令将创建2048位密钥。 -d (domain) 指定域。 -D (directory) 指定将存储密钥的目录。 我用 20200308 作为DKIM选择器。 一旦命令执行完毕,私钥将被写入 20200308.private 文件和公钥将被写入 20200308.txt 文件。

默认情况下,只有root可以读取和写入密钥文件。 使 opendkim 作为私钥的所有者。

sudo chown opendkim:opendkim /etc/opendkim/keys/ -R

步骤4:在DNS记录中发布您的公钥

显示公钥

sudo cat /etc/opendkim/keys/your-domain.com/20200308.txt

后面的字符串 p 参数是公钥。

安装opendkim centos 8

在您的DNS管理器中,创建TXT记录,输入 20200308._domainkey 在名称字段中。 (您需要用自己的DKIM选择器替换20200308。)然后返回到终端窗口,复制括号中的所有内容并将其粘贴到DNS记录的value字段中。 您需要删除值字段中的所有双引号和换行符。 如果您不删除它们,则下一步的关键测试可能会失败。

DKIM记录

步骤5:测试DKIM密钥

在CentOS 8 / RHEL 8服务器上输入以下命令以测试您的密钥。

sudo opendkim-testkey -d your-domain.com -s 20200308 -vvv

如果一切正常,您将看到 key OK 信息。

opendkim-testkey: using default configfile /etc/opendkim.conf
opendkim-testkey: checking key '20200308._domainkey.linuxbabe.com'
opendkim-testkey: key OK

如果看到“密钥不安全”,请不要惊慌。 这是因为未在您的域名上启用DNSSEC。 DNSSEC是用于安全DNS查询的安全标准。 大多数域名尚未启用DNSSEC。 您可以继续遵循本指南。

现在,我们可以启动opendkim服务。

sudo systemctl start opendkim

并在引导时启用自动启动。

sudo systemctl enable opendkim

OpenDKIM监听 127.0.0.1:8891

步骤6:将Postfix连接到OpenDKIM

编辑Postfix主要配置文件。

sudo nano /etc/postfix/main.cf

在此文件的末尾添加以下行,以便Postfix能够通过milter协议调用OpenDKIM。 请注意,您应该使用 127.0.0.1 作为地址。 不要使用 localhost

# Milter configuration
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters

保存并关闭文件。 然后加 postfix 用户 opendkim 组。

sudo gpasswd -a postfix opendkim

重新开始 postfix 服务。

sudo systemctl restart postfix

步骤7:SPF和DKIM检查

现在,您可以使用桌面电子邮件客户端或Webmail客户端将测试电子邮件发送到 [email protected] 并获得免费的电子邮件身份验证报告。 这是我从port25.com获得的报告。

postfix-spf-dkim-centos8-rhel8

您还可以从邮件服务器向Gmail帐户发送测试电子邮件,以查看是否通过了SPF和DKIM检查。 在Gmail中已打开的电子邮件的右侧,如果您单击 show original 从下拉菜单中单击按钮,您可以查看身份验证结果。

Gmail SPF和DKIM检查

如果您的消息未签名并且DKIM检查失败,则可能要检查后缀日志(/var/log/maillog),看看您的配置有什么问题。

您的电子邮件服务器还将对收到的电子邮件执行DKIM验证。 您可以在电子邮件标题中查看结果。 以下是使用Gmail对发件人进行的SPF和DKIM检查。

Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2607:f8b0:4864:20::c2d; helo=mail-yw1-xc2d.google.com; [email protected]; receiver=<UNKNOWN> 
Authentication-Results: email.linuxbabe.com;
	dkim=pass (2048-bit key; unprotected) header.d=gmail.com [email protected]l.com header.b="XWMRd2co";
	dkim-atps=neutral

如何为多个域配置OpenDKIM

我写了一个指南,说明如何使用PostfixAdmin在CentOS 8 / RHEL 8邮件服务器上托管多个域。 在那篇文章中,我将Amavis用于DKIM签名和验证。 如果您使用OpenDKIM,则需要跳过该文章中的步骤3。

要为多个域配置OpenDKIM,您需要在签名表,密钥表和可信主机文件中添加其他域,如下所示。

签名表:

*@domain1.com       20200308._domainkey.domain1.com
*@domain2.com       20200308._domainkey.domain2.com

密钥表:

20200308._domainkey.domain1.com     domain1.com:20200308:/etc/opendkim/keys/domain1.com/20200308.private
20200308._domainkey.domain2.com     domain2.com:20200308:/etc/opendkim/keys/domain2.com/20200308.private

受信任的主机:

127.0.0.1
localhost

*.domain1.com
*.domain2.com

然后生成DKIM专用/公用密钥对,并将DKIM公用密钥添加到DNS中,如针对其他域的第3步,第4步和第5步所述。 重新启动OpenDKIM,您就完成了。

sudo systemctl restart opendkim

下一步

我希望本教程可以帮助您在CentOS 8 / RHEL 8邮件服务器上安装和配置OpenDKIM。 现在,您可能需要阅读以下教程来设置OpenDMARC以阻止电子邮件欺骗。

  • 在CentOS / RHEL上使用Postfix设置OpenDMARC以阻止电子邮件欺骗

与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多提示和技巧。 保重🙂

Sidebar