opendkim milter 未在正确的服务器套接字上启动

opendkim milter 未在正确的服务器套接字上启动

以下错误阻碍了 opendkim 的重新启动

× opendkim.service - OpenDKIM Milter
     Loaded: loaded (/lib/systemd/system/opendkim.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Sat 2023-04-22 08:00:27 UTC; 2s ago
[...]    Process: 2295 ExecStart=/usr/sbin/opendkim (code=exited, status=78)
opendkim.service: Control process exited, code=exited, status=78/CONFIG

尝试咨询(未加密,可能未更新)文档,未找到有关 的任何内容status=78
但显然 milter 配置在某种程度上是不正确的。 /etc/postfix/main.cf 定义:

# Milter configuration
milter_default_action = accept
milter_protocol = 6
smtpd_milters = local:opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters

/etc/opendkim.conf

Syslog                  yes
SyslogSuccess           yes
LogWhy                  yes

Canonicalization        relaxed/simple
Mode                    sv
SubDomains              no
OversignHeaders         From

UserID                  opendkim
UMask                   007

Socket                  local:/var/spool/postfix/opendkim/opendkim.sock

#Nameservers            127.0.0.1
AutoRestart                     yes
AutoRestartRate                 10/1M
Background                      yes
DNSTimeout                      5
SignatureAlgorithm              rsa-sha256

ExternalIgnoreList      refile:/etc/opendkim/trusted.hosts
InternalHosts           refile:/etc/opendkim/trusted.hosts
KeyTable                refile:/etc/opendkim/key.table
SigningTable            refile:/etc/opendkim/signing.table

PidFile                 /var/run/opendkim/opendkim.pid
# UserID                  opendkim:opendkim

我注意到以下情况:
• opendkim 配置最初引用ExternalIgnoreList refile:/etc/opendkim/TrustedHosts,而现有文件是/etc/opendkim/trusted.hosts。这对整个块重复。整个块被修改为小写的以点分隔的文件名,然后服务重新启动。

但是,电子邮件在发送时会被 Postfix 记录下来: warning: connect to Milter service local:opendkim/opendkim.sock: No such file or directory

cd /var/spool/postfix/opendkim
-bash: cd: /var/spool/postfix/opendkim: No such file or directory

我也没有看到 pid 文件/var/run/opendkim/

smtpd_milters = local:opendkim/opendkim.sockpostfix配置和 opendkim定义之间可能存在一些错误Socket。需要更改什么?

更新
warning: connect to Milter service local:opendkim/opendkim.sock: Permission denied仍在邮件日志中,因此该配置元素是错误的。

将设置更改postfix/main.cf

smtpd_milters = local:/var/spool/postfix/opendkim/opendkim.sock

结果是: warning: connect to Milter service local:/var/spool/postfix/opendkim/opendkim.sock: No such file or directory。 的存在/var/spool/postfix/opendkim/opendkim.sock得到验证。

答案1

虽然这是套接字在系统上所在的路径,但这不是 chrooted smtpd 实例将看到的路径:

smtpd_milters = local:/var/spool/postfix/opendkim/opendkim.sock

Postfix smtpd 需要路径相对的到chroot目录,它不知道/var/spool/postfix/启动后的路径。

smtpd_milters = unix:opendkim/opendkim.sock

/usr/share/doc/postfix/MILTER_README您可以在和中找到详细信息man 5 master,这里仅引用关键信息,重点是我的:

如果 smtpd(8) 或 cleanup(8) 进程在 chroot 模式下运行,则将解释绝对路径名相对于 Postfix 队列目录在许多系统上,local 是 unix 的同义词

答案2

部分解决方案

sudo chown opendkim:postfix /var/spool/postfix/opendkim 需要授予 postfix 创建权限opendkim.sock

虽然opendkim.service: Can't open PID file /run/opendkim/opendkim.pid (yet?) after start: Operation not permitted发生了,但这只是暂时的

Started OpenDKIM Milter.随后不久,它/run/opendkim/opendkim.pid被创建并被opendkim.pidroot 所有。

相关内容