为了让我的邮件服务器向 Microsoft、Gmail 和 Yahoo 用户发送邮件,我需要配置 DKIM。我遵循此 Debian 指南:https://wiki.debian.org/opendkim。
我编写了一个脚本来完成大部分工作,但配置文件的编辑工作仍需手动完成(提供机会)。脚本如下:
read mydomain
echo "Enter Selector (e.g. default, 2020, dkim):"
read myselector
echo "Installing opendkim..."
apt install opendkim opendkim-tools
echo "Generating keys..."
mkdir -p /etc/dkimkeys/"$mydomain"
chown -R $USER /etc/dkimkeys/"$mydomain"
#cd /etc/dkimkeys/"$mydomain"
sudo opendkim-genkey -D /etc/dkimkeys/"$mydomain" -d "$mydomain" -s "$myselector"
echo "Check location /etc/dkimkeys/$mydomain for created files. Optional (via SFTP would be best)"
echo "Continue?"
read
echo "Open /etc/opendkim.conf (via SFTP), so you can edit the parameters"
echo "(see https://wiki.debian.org/opendkim)..."
echo "When done, press ENTER"
read
echo "Restarting opendkim..."
systemctl restart opendkim
echo "Open /etc/postfix/main.cf (via SFTP), so you can edit the parameters"
echo "(see https://wiki.debian.org/opendkim)..."
echo "When done, press ENTER"
read
echo "Restarting postfix..."
systemctl reload postfix.
echo "Done! Publish your public key as a TXT record in DNS at $myselector._domainkey.$mydomain."
echo "The generated file /etc/dkimkeys/$mydomain/$myselector.txt contains the record."
编辑 /etc/opendkim.conf 文件后,我的 Postfix SMTP 不再接受任何连接。客户端无法连接,使用外部检查器,我得到:
[006.573] --> STARTTLS
[006.635] <-- 454 4.3.0 Try again later
[006.636] STARTTLS command rejected
[006.636] --> MAIL FROM:<[email protected]>
[006.782] <-- 451 4.7.1 Service unavailable - try again later
[006.782] Cannot proof email address (reason: MAIL FROM rejected)
我认为指南中的这一行有问题:
Socket inet:8891@localhost
我注释掉了:
Socket local:/var/run/opendkim/opendkim.sock
...但并没有什么区别。
有人在 Postfix 上设置了有效的 DKIM 吗?你能比较一下我的 main.cf 和 opendkim 文件并告诉我哪里做错了吗?从这里获取它们:https://filebin.net/gwqv1ge2qpz9yy65
谢谢
答案1
有 2 个地方指定了监听器。在 /etc/default/opendkim 中,您需要添加:
SOCKET="inet:8891@localhost"
。
注释掉其他插座。
在 /etc/postfix/main.cf 中您需要添加:
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
我的 /etc/opendkim.conf 中也有 SOCKET inet:8891@localhost,但我不确定它是否有必要。
在更新崩溃后,我刚刚让服务器重新运行。出于某种原因,如果另一个用户拥有密钥的权限,opendkim 将无法启动。我通过将密钥复制到 opendkim 用户和组拥有的文件夹来解决这个问题。直到我重新安装 opendkim,错误描述才显示在 systemctl status opendkim 中。在此之前,它只显示错误代码,但没有解释。该服务器已运行 4 年,没有发生任何事故。