从squeeze 升级到wheezy 后,我在debian 上遇到postfix 问题。 Postfix 配置为使用 dkim-filter 对消息进行签名。更新之前,一切都工作正常,现在与服务(tcp 或 unix 套接字)的连接失败。我想也许是因为 debian 切换到 opendkim,所以我删除了 dkim-filter 并安装了 opendkim - 同样的问题。我什至尝试设置 unix 文件套接字连接而不是 tcp 选项 - 同样的问题:
postfix/smtpd: warning: connect to Milter service unix:/var/run/opendkim/opendkim.sock: No such file or directory
或(使用 TCP/IP):
postfix/cleanup: warning: connect to Milter service inet:localhost:8891: Connection refused
我检查了两次 - 套接字文件存在并且服务正在侦听端口 8891。
我可以做什么来解决这个问题?
答案1
- 检查 opendkim 是否正在运行。 (我认为这就像您看到的套接字文件一样。)
你配置opendkim了吗?配置文件是
/etc/opendkim.conf
.您需要更新文件以匹配您的站点/域并且dkim密钥小路。
将 postfix 添加到 opendkim 组
如果opendkim.sock权限如下
$ ls -l /var/run/opendkim -rw-rw-r-- 1 opendkim opendkim 6 月 2 日 14:56 opendkim.pid srwxrwxr-x 1 opendkim opendkim 0 5 月 2 日 14:56 opendkim.sock
如果不是,请确保
UMask
设置为0002
in/etc/opendkim.conf
。然后执行以下操作
sudo adduser postfix opendkim
Postfix 在 chroot 中运行
修改
/etc/default/opendkim
、改变插座postfix chroot 位置的选项SOCKET =“本地:/var/spool/postfix/var/run/opendkim/opendkim.sock”
您必须创建目录
/var/spool/postfix/var/run/opendkim
并更改其权限sudo mkdir -p /var/spool/postfix/var/run/opendkim sudo chown opendkim:opendkim /var/spool/postfix/var/run/opendkim
重新启动 opendkim
sudo 服务 opendkim 重新启动
答案2
帮助我修复 Ubuntu 16.04 LTS 上的此警告的快速摘要:Postfix 版本 3.1.0-3ubuntu0.2 Opendkim 版本 2.10.3-3build1
(我假设 Postfix 和 Opendkim 已经安装,相互集成,您收到的唯一警告是“连接到 Milter 本地服务:/var/spool/postfix/opendkim/opendkim.sock:没有这样的文件或目录”)
将用户后缀添加到组 opendkim(如果已完成则跳过)
sudo adduser postfix opendkim
- 创建目录并设置所有者(如果已完成则跳过)
sudo mkdir -p /var/spool/postfix/var/run/opendkim
sudo chown opendkim:opendkim /var/spool/postfix/var/run/opendkim
- 检查权限:
ls -l /var/spool/postfix/var/run/opendkim
srwxrwxr-x 1 opendkim opendkim 0 Nov 12 14:34 opendkim.sock
- 编辑opendkim配置文件:/etc/opendkim.conf,添加行
本地套接字:/var/spool/postfix/var/run/opendkim/opendkim.sock
/etc/defaults/opendkim,添加
SOCKET =“本地:/var/spool/postfix/var/run/opendkim/opendkim.sock”
- 编辑 postfix 配置:/etc/postfix/main.cf
# Milter configuration # Postfix ≥ 2.6 milter_protocol = 6, Postfix ≤ 2.5 milter_protocol = 2 milter_protocol = 6 milter_default_action = accept smtpd_milters = unix:var/run/opendkim/opendkim.sock non_smtpd_milters = unix:var/run/opendkim/opendkim.sock
- 重新启动服务(或重启)
systemctl 重新启动 opendkim
systemctl 重新启动 postfix
就是这样。我不知道为什么需要写
smtpd_milters = unix:var/run/opendkim/opendkim.sock
代替
smtpd_milters = 本地:/var/spool/postfix/var/run/opendkim/opendkim.sock
。如果有人知道,欢迎解释。
答案3
我在 Debian Stretch 上遇到了同样的问题,结果是由 opendkim 的 systemd 服务文件损坏引起的。请参阅此答案以获取解决方案:https://serverfault.com/a/847442/84962
此修复归结为:
/lib/opendkim/opendkim.service.generate
systemctl daemon-reload
service opendkim restart
答案4
另一种方法是禁用chroot
,这会产生安全隐患:
vi /etc/postfix/master.cf
# service type private unpriv chroot wakeup maxproc command + args
cleanup unix n - n - 0 cleanup
警告显示postfix/cleanup
,因此您可以停用此服务的 chroot。