ไม่สามารถเปลี่ยนซ็อกเก็ต OpenDKIM ใน Debian stretch ใน / etc / default / opendkim


18

ฉันพยายามตั้งค่า opendkim บน Debian stretch แต่ฉันไม่สามารถเปลี่ยนซ็อกเก็ตได้ ฉันต้องการเปลี่ยนซ็อกเก็ตเป็น/var/spool/postfix/opendkim/opendkim.sockดังนั้นฉันจึงสามารถใช้กับ postfix ได้

ฉันได้เพิ่มลง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)

ผมทำอะไรผิดหรือเปล่า? (ฉันเดาว่ามันเป็นความผิดพลาดของฉันเพราะฉันไม่สามารถหาคนอื่นที่มีปัญหาเดียวกันได้)

UPDATE:

เปลี่ยน/etc/default/opendkimไปSOCKET="inet:8891@localhost"และการเปลี่ยนแปลงการตั้งค่า postfix ที่จะใช้ผลการซ็อกเก็ตนี้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 (ตามที่ฉันกำลังกวดวิชา )
lw1.at

@Miloshio postfix อ้างว่าconnect to Milter service local:/var/run/opendkim/opendkim.sock: No such file or directoryแม้จะคิดว่ามันมีอยู่ตามที่ chrooted ไปแล้ว/var/spool/postfix/
lw1.at

ดูเหมือนว่ามันจะไม่ chrooted โปรดตรวจสอบอีกครั้งได้ไหม เส้นทางของคุณควรมีลักษณะเช่น/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จะใช้servicefile แทนซึ่งมีซ็อกเก็ตที่ไม่ถูกต้องฮาร์ดโค้ด

แต่แพคเกจเดเบียนก็ดูเหมือนจะรวมทุบตีที่สร้างบริการ systemd ที่ถูกต้อง

ดังนั้นหลังจากการวิ่ง

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

และรีสตาร์ท opendkim ไฟล์ซ็อกเก็ตจะปรากฏขึ้นในสถานที่ที่คาดหวังซึ่งสามารถตรวจสอบได้โดยการโทร:

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

อัปเดต: ดูเหมือนว่ามีข้อบกพร่องเดเบียนรายงานเกี่ยวกับปัญหานี้: # 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 เคลอร์ของการแก้ปัญหา /lib/systemd/system/opendkim.serviceข้อผิดพลาดการเชื่อมต่อไม่ยอมจนกระทั่งหมายเลขพอร์ตที่ถูกเพิ่มเข้ามา

ในการอัปเดต/lib/systemd/system/opendkim.serviceฉันใช้พอร์ต 8891 สำหรับ Ubuntu และใส่เครื่องหมายบรรทัด 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 daemon, opendkim และ postfix เมลขาออกถูกลงชื่อโดยไม่มีปัญหาและบันทึกเมลแสดง "เพิ่มฟิลด์ DKIM-Signature"

systemctl daemon-reload
systemctl opendkim restart
systemctl postfix restart

ไม่มีปัญหาการเชื่อมต่อเมื่อกำหนดค่า OpenDkim กับ Centos7 เมื่อเร็ว ๆ นี้ดังนั้นในกรณีนี้จึงเกี่ยวข้องกับ 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เส้นทางที่ต้องการได้ฉันขอแนะนำให้คุณ:

  • คว้าบันทึกจากmail, syslogหรือopendkimใน/var/logและตรวจสอบ

  • ตรวจสอบ/etc/init.d/opendkimสคริปต์และตรวจสอบว่าไฟล์ถุงเท้ามีการตั้งค่าที่ยาก

  • ลองใช้ค่าเริ่มต้นlocal:/var/run/opendkim/opendkim.sock- และระบุsmtpd_milters = local:/var/run/opendkim/opendkim.sockและnon_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@localhostตั้งค่าเป็นไฟล์ opendkim conf แล้ว
MilošĐakonović

1
opendkim ละเว้นการตั้งค่า / etc / default / opendkim socket - ตอนนี้เราต้องเปลี่ยน /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.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

และในที่สุดรีสตาร์ท daemon และ 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'

(ดูบรรทัดที่ 2 ของโควต้าก่อนหน้า) ดังนั้นฉันจึงไป

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.