无法在/ etc / default / opendkim中的Debian Stretch中更改OpenDKIM套接字


18

我正在尝试在Debian Stretch上设置opendkim,但无法更改套接字。我想将套接字更改为,/var/spool/postfix/opendkim/opendkim.sock以便可以与后缀一起使用。

我加Socket local:/var/spool/postfix/opendkim/opendkim.sock/etc/opendkim.conf

并尝试添加SOCKET="local:/var/spool/postfix/opendkim/opendkim.sock/etc/default/opendkim(我不得不创建)。

无论我进行了什么更改或重新启动opendkim的频率如何,它始终/var/run/opendkim/opendkim.sock用作其套接字。

➜  ~ netstat -a | fgrep LISTEN | grep open
unix  2      [ ACC ]     STREAM     LISTENING     5534128  /var/run/opendkim/opendkim.sock

➜  ~ sudo systemctl status opendkim.service

● opendkim.service - OpenDKIM DomainKeys Identified Mail (DKIM) Milter
   Loaded: loaded (/lib/systemd/system/opendkim.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2017-04-30 12:41:54 CEST; 5min ago
     Docs: man:opendkim(8)
           man:opendkim.conf(5)
           man:opendkim-genkey(8)
           man:opendkim-genzone(8)
           man:opendkim-testadsp(8)
           man:opendkim-testkey
           http://www.opendkim.org/docs.html
  Process: 25246 ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock (code=exited, status=0/SUCCESS)
 Main PID: 25248 (opendkim)
    Tasks: 7 (limit: 4915)
   CGroup: /system.slice/opendkim.service
           ├─25248 /usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock
           └─25249 /usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock

Apr 30 12:41:54 vServer systemd[1]: Starting OpenDKIM DomainKeys Identified Mail (DKIM) Milter...
Apr 30 12:41:54 vServer systemd[1]: Started OpenDKIM DomainKeys Identified Mail (DKIM) Milter.
Apr 30 12:41:54 vServer opendkim[25249]: OpenDKIM Filter v2.11.0 starting (args: -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock)

我究竟做错了什么?(我想这是我的错误,因为我找不到其他人遇到同样的问题)

更新:

更改/etc/default/opendkimSOCKET="inet:8891@localhost"和更改postfix配置以使用此套接字会导致inet:localhost:8891: Connection refused

UPDATE2:

我现在已替换为debian Stretch软件包中捆绑的文件:

# Command-line options specified here will override the contents of                                                                                                         
# /etc/opendkim.conf. See opendkim(8) for a complete list of options.                                                                                                       
#DAEMON_OPTS=""                                                                                                                                                             
# Change to /var/spool/postfix/var/run/opendkim to use a Unix socket with                                                                                                   
# postfix in a chroot:                                                                                                                                                      
RUNDIR=/var/spool/postfix/var/run/opendkim                                                                                                                                  
#RUNDIR=/var/run/opendkim                                                                                                                                                   
#                                                                                                                                                                           
# Uncomment to specify an alternate socket                                                                                                                                  
# Note that setting this will override any Socket value in opendkim.conf                                                                                                    
# default:                                                                                                                                                                  
SOCKET=local:$RUNDIR/opendkim.sock                                                                                                                                          
# listen on all interfaces on port 54321:                                                                                                                                   
#SOCKET=inet:54321                                                                                                                                                          
# listen on loopback on port 12345:                                                                                                                                         
#SOCKET=inet:12345@localhost                                                                                                                                                
# listen on 192.0.2.1 on port 12345:                                                                                                                                        
#SOCKET=inet:12345@192.0.2.1                                                                                                                                                
USER=opendkim                                                                                                                                                               
GROUP=opendkim                                                                                                                                                              
PIDFILE=$RUNDIR/$NAME.pid                                                                                                                                                   
EXTRAAFTER=   

其中包括确定套接字的以下行:

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

“所以我可以将其与postfix一起使用”您确定需要此内容才能使其与Postfix一起使用吗?
米洛什Đakonović

@Miloshio我以为postfix在chroot中运行。(根据我正在关注的教程
lw1.at

@Miloshio postfix声称connect to Milter service local:/var/run/opendkim/opendkim.sock: No such file or directory甚至认为它存在,因为它被更改为/var/spool/postfix/
lw1.at

听起来好像没有被chroot。请您再检查一次?你的路径应该是这样/var/spool/postfix/var/run...,如果它是
米洛什Đakonović

在任何情况下,我都可以使用inet代替local。也许,如果你不下来调试服务,尝试实施:digitalocean.com/community/tutorials/...
米洛什Đakonović

Answers:


31

我终于找到了解决方案。

/etc/init.d/opendkim似乎并没有做任何事情。但是,/lib/systemd/system/opendkim.service使用的服务文件具有错误的套接字硬编码。

但是debian软件包似乎还包含生成正确的系统服务的bash。

所以跑步后

/lib/opendkim/opendkim.service.generate
systemctl daemon-reload
service opendkim restart

然后重新启动opendkim,套接字文件将出现在预期的位置,可以通过调用以下命令进行验证:

tail /var/log/mail.log | grep OpenDKIM

更新:似乎有一个关于此问题的Debian错误报告:#861169


2

我没有足够的信誉评论,想承认,寻找一个解决OpenDKim-的Postfix小时后“拒绝连接”的错误信息,则/lib/systemd/system/opendkim.service提供编辑LocutusBE与Ubuntu 17.04的工作:

warning: connect to Milter service inet:localhost:8891: Connection refused

编辑 /lib/systemd/system/opendkim.service

更改:

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

至:

ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock -p inet:12301@localhost

systemctl daemon-reload

systemctl opendkim restart

在尝试编辑之前,我将postfix用户添加到opendkim组,并/lib/opendkim/opendkim.service.generate根据Lukas Winkler的解决方案进行了尝试。连接拒绝错误持续存在,直到将端口号添加到为止/lib/systemd/system/opendkim.service

为了进行更新/lib/systemd/system/opendkim.service,我使用了用于Ubuntu的端口8891,并注释掉了原始的ExecStart行以进行测试,然后添加了一个新端口,端口号为:

/lib/systemd/system/opendkim.service (Service category):

    [Service]
    Type=forking
    PIDFile=/var/run/opendkim/opendkim.pid
    User=opendkim
    UMask=0007
    #ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock
    ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock -p inet:8891@localhost
    Restart=on-failure
    ExecReload=/bin/kill -USR1 $MAINPID

匹配的端口号另外在中指定/etc/opendkim.conf

Socket                  inet:8891@localhost

/etc/postfix/main.cf

smtpd_milters = inet:localhost:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

重新启动systemctl守护程序,opendkim和postfix之后,对外发邮件进行了签名,没有问题,邮件日志显示“已添加DKIM-Signature字段”。

systemctl daemon-reload
systemctl opendkim restart
systemctl postfix restart

最近使用Centos7配置OpenDkim时没有连接问题,因此显然在这种情况下,它与Ubuntu相关。感谢Lukas Winkler发布问题以及共享解决方案的人员。


1

为了使用inet套接字,您需要指定:

SOCKET="inet:12301@localhost"/etc/default/opendkim

另外,因此您需要在Postfix中更改设置:

/etc/postfix/main.cf 添加:

milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301

如果您无法设置local所需的路径,建议您:

  • 抓住从日志mailsyslogopendkim/var/log检查

  • 检查/etc/init.d/opendkim脚本并检查袜子文件是否被硬设置为一个值

  • 尝试去与默认local:/var/run/opendkim/opendkim.sock-并指定smtpd_milters = local:/var/run/opendkim/opendkim.socknon_smtpd_milters = local:/var/run/opendkim/opendkim.sock/etc/postfix/main.cf


我现在已经将配置更改为与您的配置完全相同(相同的端口),但是我仍然得到warning: connect to Milter service inet:localhost:12301: Connection refused
lw1.at

编辑后是否尝试重新启动两个服务?
米洛什Đakonović

我做到了,现在我也重新启动了。当查看mail.log时,我总是看到以下行OpenDKIM Filter v2.11.0 starting (args: -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock)
lw1.at

即使SOCKET="inet:12301@localhost设置为opendkim conf文件,您也看到那行?
米洛什Đakonović

1
opendkim忽略/ etc / default / opendkim套接字设置-现在我们必须更改/etc/opendkim.conf
SledgehammerPL

1

这为我工作:

编辑 /lib/systemd/system/opendkim.service

更改:

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

至:

ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock -p inet:12301@localhost

systemctl daemon-reload

systemctl opendkim restart

这正是/lib/opendkim/opendkim.service.generate脚本所做的更改。
lw1.17年

非常感谢–这已在缺少的Ubuntu 16.04.3 LTS上进行了修复opendkim.service.generate
伊万·米尔

0

在我升级服务器之前,OpenDKIM一直有效。OpenDKIM无法启动,Milter无法连接到任何套接字。在/var/log/syslog我看得出来,opendkim失败尝试比升级之前创建一个插座的不同的地方。我试图编辑在插座的设置/etc/opendkim.conf/etc/default/opendkim并且/lib/systemd/system/opendkim.service但它并没有帮助。原来,信息一直在我眼前:

opendkim.service - OpenDKIM DomainKeys Identified Mail (DKIM) Milter 
Loaded: loaded (/lib/systemd/system/opendkim.service; enabled; vendor preset: enabled)   
Drop-In: /etc/systemd/system/opendkim.service.d
           └─override.conf    
Active: active (running) since Sat 2017-10-14 16:03:45 CEST; 4h 44min ago

我注意到设置被“ override.conf”文件覆盖并进行了编辑,使其与我的文件对齐/etc/postfix/main.cf(以chroot运行):

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

编辑 /etc/systemd/system/opendkim.service.d/override.conf

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

最后重新启动守护程序和opendkim:

systemctl daemon-reload && systemctl restart opendkim

0

我只是将/etc/systemd/system/opendkim.service.d/override.conf重命名为/etc/systemd/system/opendkim.service.d/override.conf.old,以便它不会覆盖ExecStart参数。

一切正常,从/etc/opendkim.conf中选择配置


0

安装后,我的opendkim服务没有在端口8100上唤醒,以前的解决方案也无济于事。所以我尝试了

/lib/opendkim/opendkim.service.generate

与说

-bash: /lib/opendkim/opendkim.service.generate: No such file or directory

所以我看了服务档案

cat /lib/systemd/system/opendkim.service
# If you are using OpenDKIM with SQL datasets it might be necessary to start OpenDKIM after the database servers.
# For example, if using both MariaDB and PostgreSQL, change "After=" in the "[Unit]" section to:
# After=network.target nss-lookup.target syslog.target mariadb.service postgresql.service

[Unit]
Description=DomainKeys Identified Mail (DKIM) Milter
Documentation=man:opendkim(8) man:opendkim.conf(5) man:opendkim-genkey(8) man:opendkim-genzone(8) man:opendkim-testadsp(8) man:opendkim-testkey http://www.opendkim.org/docs.html
After=network.target nss-lookup.target

[Service]
Type=forking
EnvironmentFile=-/etc/default/opendkim
PIDFile=/var/run/opendkim/opendkim.pid
PermissionsStartOnly=true
User=opendkim
Group=opendkim
ExecStartPre=-/bin/mkdir -p /var/run/opendkim
ExecStartPre=-/bin/chown opendkim.opendkim /var/run/opendkim
ExecStart=/usr/sbin/opendkim -x /etc/opendkim.conf -u opendkim -P /var/run/opendkim/opendkim.pid -p $SOCKET $DAEMON_OPTS
TimeoutStartSec=10
ExecReload=/bin/kill -USR1 $MAINPID

发现奇怪的路

EnvironmentFile=-/etc/default/opendkim
ExecStartPre=-/bin/mkdir -p /var/run/opendkim
ExecStartPre=-/bin/chown opendkim.opendkim /var/run/opendkim

和命令

 /usr/sbin/opendkim -x /etc/opendkim.conf -u opendkim -P /var/run/opendkim/opendkim.pid -p $SOCKET $DAEMON_OPTS

说过

/usr/sbin/opendkim: option requires an argument -- 'p'

(请看上一个配额的第二行),所以我去了

sudo nano /lib/systemd/system/opendkim.service

并删除“-” 3次

sudo systemctl daemon-reload
sudo service opendkim restart
sudo netstat -tulpn

那帮助了我:-)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.