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