如何在 Debian 测试/拉伸上配置 opendkim 的套接字

如何在 Debian 测试/拉伸上配置 opendkim 的套接字

这一切都在 Debian 测试中(= 目前为止)。
我正在尝试配置opendkim,但它不会使用我想要的套接字。

根据man opendkim.confSocket可以在 中进行配置/etc/opendkim.conf
我也尝试过创建我在 Jessie 盒子中看到的文件/etc/default/opendkim,但这也不起作用。

因此,我尝试在中输入以下行/etc/opendkim.conf

Socket  inet:39172@localhost

现在,根据/etc/init.d/opendkim,该文件被读取:

if [ -f /etc/opendkim.conf ]; then
  CONFIG_SOCKET=`awk '$1 == "Socket" { print $2 }' /etc/opendkim.conf`
fi

对我来说,到目前为止看起来不错。但是紧随其后的以下代码片段似乎转储了现在已读取的信息:

# This can be set via Socket option in config file, so it's not required
if [ -n "$SOCKET" -a -z "$CONFIG_SOCKET" ]; then
    DAEMON_OPTS="-p $SOCKET $DAEMON_OPTS"
fi

DAEMON_OPTS="-x /etc/opendkim.conf -u $USER -P $PIDFILE $DAEMON_OPTS"

我真的不明白这应该做什么。$CONFIG_SOCKET从未真正用于启动opendkim,是吗?那么,为什么首先要从配置文件中读取呢?

我注意到还有一个文件/etc/systemd/system/multi-user.target.wants/opendkim似乎没有加载任何配置。
如果它有任何重要性:要重新启动opendkim,我输入service opendkim restart

我检查套接字是否已被读取的是: telnet localhost 39172Connection refused/var/log/syslog说:

 opendkim[8343]: OpenDKIM Filter v2.11.0 starting (args: -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock)

我的问题是: 我应该如何在 Debian 测试/拉伸上配置 opendkim 的套接字?

这可能也解决了上面的脚本应该如何工作的谜团。

答案1

您配置正确,但这是 Debian Stretch 的一个未解决的错误,它会忽略配置:

看:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864162

答案2

当然,编辑 systemd 单元并不是最佳实践。我们应该这样做:

sudo systemctl edit opendkim

并插入:

[Service]
ExecStart=
ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/spool/postfix/opendkim/opendkim.sock

(注意双 ExecStart - 这不是拼写错误)

答案3

我通过编辑上述文件解决了这个问题/etc/systemd/system/multi-user.target.wants/opendkim。我不知道这是否是最佳实践,但由于配置似乎是硬编码的,我没有其他选择。

文件的内容(我现在使用unix套接字而不是随机端口39172):

[...]
ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/spool/postfix/var/run/opendkim/opendkim.sock
[...]

/var/spool/postfix/var/run/opendkim需要创建该目录并将所有权授予opendkim:opendkim.更改文件后,我执行了systemctl daemon-reloadservice opendkim restart,并且新的套接字被识别。然后我更改了权限(Umask 002/etc/opendkim.conf),postfix 现在可以访问 milter。

相关内容