如何在 2 个后缀实例中使用 opendkim 套接字?

How to use opendkim socket in 2 postfix instances?

我有 2 个后缀实例 运行,我想用 opendkim 签署电子邮件,但问题是我无法在两个实例中使用相同的套接字,代码如下

/etc/default/opendkim

SOCKET="local:/var/spool/postfix/opendkim/opendkim.sock"
SOCKET="local:/var/spool/postfix-2/opendkim/opendkim.sock"

/etc/postfix/main.cf

smtpd_milters = local:opendkim/opendkim.sock
non_smtpd_milters = local:opendkim/opendkim.sock

/etc/postfix-2/main.cf

smtpd_milters = local:opendkim/opendkim.sock
non_smtpd_milters = local:opendkim/opendkim.sock

请帮帮我!

OpenDKIM 将只使用一个 UNIX 套接字。您不能像上面那样指定多个 UNIX 套接字。

选项 1

在其他地方创建套接字文件,例如SOCKET="local:/var/run/opendkim/opendkim.sock"。确保 Postfix 的两个实例都有权通过 opendkim 组的成员身份或其他方式访问此文件。

在 chroot jail 中为每个 Postfix 实例创建一个 opendkim 目录:

mkdir /var/spool/postfix/opendkim/
mkdir /var/spool/postfix-2/opendkim/

将包含套接字文件的目录绑定到后缀 chroot 监狱中的每个目录。

mount --bind /var/run/opendkim/ /var/spool/postfix/opendkim/
mount --bind /var/run/opendkim/ /var/spool/postfix-2/opendkim/

两个 Postfix 实例现在应该可以访问相同的套接字文件,安装在它们自己的目录中。如果现在可以正常工作,您需要将条目添加到 /etc/fstab 以便每次启动时都会发生这种安装。

/var/run/opendkim/ /var/spool/postfix/opendkim none defaults,bind 0 0
/var/run/opendkim/ /var/spool/postfix-2/opendkim none defaults,bind 0 0

选项 2

使用 TCP/IP 端口而不是 unix 套接字在 Postfix 和 OpenDKIM 之间进行通信,例如SOCKET="inet:8891@localhost".

更改您的 Postfix main.cf 文件以使用此 TCP/IP 套接字:

smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

如果 Postfix 无法连接,那么您可能需要调整防火墙以允许此连接。

如果您的外发邮件未被签名,那么您可能需要将以下行添加到 opendkim.conf:

InternalHosts           /etc/opendkim/TrustedHosts
ExternalIgnoreList      /etc/opendkim/TrustedHosts

创建此 TrustedHosts 文件并列出 Postfix 在连接到 OpenDKIM 时可能使用的每个 IP 地址和主机名,例如:

127.0.0.1
::1
localhost
hostname.example.com
example.com

此列表标识应为哪些主机邮件签名,而不是应验证任何签名的外部邮件。