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

[ad_1]

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

什么是DKIM?

DKIM(DomainKeys Identified Mail)是 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

Save 和 close 文件。 然后重启Amavis。

sudo systemctl restart amavisd

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

首先启用 EPEL (Extra Packages for Enterprise 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

Save 和 close 文件。

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

编辑签名表文件。

sudo nano /etc/opendkim/SigningTable

在此文件的末尾添加以下行。 这告诉 OpenDKIM,如果您服务器上的发件人正在使用 @your-domain.com 地址,那么它应该用标识的私钥签名 20200308._domainkey.your-domain.com.

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

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

sudo nano /etc/opendkim/KeyTable

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

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

Save 和 close 文件。 接下来,编辑受信任的主机文件。

sudo nano /etc/opendkim/TrustedHosts

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

*.your-domain.com

Save 和 close 文件。

第 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 参数是公钥。

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

DKIM 记录

第 5 步:测试 DKIM 密钥

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

请注意,您的 DKIM 记录可能需要一段时间才能传播到 Internet。 根据您使用的域注册商,您的 DNS 记录可能会立即传播,也可能需要长达 24 小时才能传播。 你可以去https://www.dmarcanalyzer.com/dkim/dkim-check/,输入 20200308 作为选择器并输入您的域名以检查 DKIM 记录传播。

如果您看到“密钥不安全”,请不要惊慌。 这是因为您的域名未启用 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

Save 和 close 文件。 然后加 postfix 用户 opendkim 团体。

sudo gpasswd -a postfix opendkim

重新开始 postfix 服务。

sudo systemctl restart postfix

第 7 步:SPF 和 DKIM 检查

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

postfix-spf-dkim-centos8-rhel8

您还可以从您的邮件服务器向您的 Gmail 帐户发送一封测试电子邮件,以查看是否通过了 SPF 和 DKIM 检查。 在 Gmail 中打开的电子邮件的右侧,如果您点击 show original 按钮,可以看到认证结果。

Gmail SPF 和 DKIM 检查 scalahosting

如果您的消息未签名且 DKIM 检查失败,您可能需要检查 postfix 日志(/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] 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 私有/公共密钥对并在 DNS 中添加 DKIM 公钥,如步骤 3、步骤 4 和步骤 5 中提到的其他域。 重新启动 OpenDKIM,你就完成了。

sudo systemctl restart opendkim

下一步

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

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

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

[ad_2]

Related Posts