/ etc / default / opendkim의 데비안 스트레치에서 OpenDKIM 소켓을 변경할 수 없습니다


18

데비안 스트레치에서 opendkim을 설정하려고하는데 소켓 변경에 실패합니다. 소켓을 변경하여 /var/spool/postfix/opendkim/opendkim.sockpostfix와 함께 사용할 수 있습니다.

나는 추가 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"하고이 소켓 결과를 사용하는 접미사 설정을 변경inet:localhost:8891: Connection refused

UPDATE2 :

이제 데비안 스트레치 패키지에 번들로 제공된 파일로 교체했습니다 :

# 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와 함께 사용하려면 이것이 필요합니까?
Miloš Đakonović

@Miloshio postfix가 chroot에서 실행되는 것처럼 생각했습니다. (
따라온

@Miloshio 후위 주장 connect to Milter service local:/var/run/opendkim/opendkim.sock: No such file or directory도이에 chroot에 그대로 존재 생각/var/spool/postfix/
lw1.at

chroot되지 않은 것 같습니다. 다시 확인해 주시겠습니까? /var/spool/postfix/var/run...만약 당신의 길은 다음과 같이 보일 것입니다
Miloš Đakonović

어떤 시나리오에서든 inet대신을 사용 합니다 local. 서비스를 디버깅하고 있지 않다면 digitalocean.com/community/tutorials/…
Miloš Đakonović

답변:


31

마침내 해결책을 찾았습니다.

/etc/init.d/opendkim아무것도하지 않는 것. 그러나 대신 /lib/systemd/system/opendkim.service소켓이 잘못 코딩 된 서비스 파일 이 사용됩니다.

그러나 데비안 패키지에는 올바른 시스템 서비스를 생성하는 bash가 포함되어있는 것 같습니다.

그래서 실행 후

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

opendkim을 다시 시작하면 소켓 파일이 예상 위치에 표시되며 다음을 호출하여 확인할 수 있습니다.

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

업데이트 :이 문제에 대한 데비안 버그보고가있는 것 같습니다 : # 861169


3

나는 의견을 말할만큼 평판이 충분하지 않으며 OpenDKim-Postfix '연결이 거부되었습니다'오류 메시지에 대한 솔루션을 검색 한 후 LocutusBE가 /lib/systemd/system/opendkim.service제공 한 편집 이 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

편집을 시도하기 전에 postdkim 사용자를 opendkim 그룹에 추가하고 Lukas Winkler의 솔루션 /lib/opendkim/opendkim.service.generate별로 시도했습니다 . 포트 번호가 추가 될 때까지 연결 거부 오류가 지속되었습니다 ./lib/systemd/system/opendkim.service

업데이트하기 /lib/systemd/system/opendkim.service위해 우분투에 포트 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
milter_protocol = 2

systemctl 데몬, opendkim 및 postfix를 다시 시작한 후 발신 메일에 문제없이 서명하고 메일 로그에 "DKIM-Signature field added"가 표시되었습니다.

systemctl daemon-reload
systemctl opendkim restart
systemctl postfix restart

최근 Centos7로 OpenDkim을 구성 할 때 연결 문제가 없었으므로이 경우 분명히 우분투 관련이었습니다. 질문을 게시하고 솔루션을 공유 한 사람들에게 Lukas Winkler에게 감사합니다.


2

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원하는 경로로 설정할 수 없으면 다음 과 같이 제안합니다.

  • 에서 로그를 잡아 mail, syslog또는 opendkim에서 /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

편집 후 두 서비스를 다시 시작하려고 했습니까?
Miloš Đ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@localhostopendkim conf 파일 로 설정해 도 그 줄 이 보입니까?
Miloš Đakonović

아이디어 주셔서 감사합니다. 해결책을 찾았습니다. (데비안 패키지에는 이상한 것이 있습니다)
lw1.at

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.at

고마워 – 이것은 Ubuntu 16.04.3 LTS에서 수정되었습니다 opendkim.service.generate.
Ivan Mir

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

설치 후 8100 포트에서 opendkim 서비스가 깨어나지 않았으며 이전 솔루션으로는 도움이되지 않았습니다. 그래서 시도했습니다

/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

그것은 나를 도왔다 :-)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.