Không thể thay đổi ổ cắm OpenDKIM trong Debian kéo dài trong / etc / default / opendkim


18

Tôi đang cố gắng thiết lập opendkim trên Debian nhưng tôi thất bại trong việc thay đổi socket. Tôi muốn thay đổi ổ cắm để /var/spool/postfix/opendkim/opendkim.socktôi có thể sử dụng nó với postfix.

Tôi đã thêm Socket local:/var/spool/postfix/opendkim/opendkim.sockvào/etc/opendkim.conf

và cũng đã thử thêm SOCKET="local:/var/spool/postfix/opendkim/opendkim.sockvào /etc/default/opendkim(mà tôi phải tạo ra).

Bất kể tôi thay đổi điều gì hoặc tần suất tôi khởi động lại opendkim, nó luôn sử dụng /var/run/opendkim/opendkim.socklàm ổ cắm.

➜  ~ 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)

Tôi đang làm gì sai? (Tôi đoán đó là lỗi của tôi vì tôi không thể tìm thấy ai khác có cùng vấn đề)

CẬP NHẬT:

Thay đổi /etc/default/opendkimđể SOCKET="inet:8891@localhost"và thay đổi cấu hình postfix để sử dụng kết quả ổ cắm này tronginet:localhost:8891: Connection refused

CẬP NHẬT2:

Bây giờ tôi đã thay thế bằng tệp được gói trong gói kéo dài debian:

# 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=   

Bao gồm các dòng sau nơi ổ cắm được quyết định:

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

"vì vậy tôi có thể sử dụng nó với postfix" Bạn có chắc chắn rằng bạn cần điều này để làm cho nó hoạt động với Postfix?
Miloš Đakonović

@Miloshio Tôi nghĩ như vậy khi postfix chạy trong một chroot. (Theo hướng dẫn tôi đang theo dõi )
lw1.at

@Miloshio yêu cầu postfix connect to Milter service local:/var/run/opendkim/opendkim.sock: No such file or directorythậm chí nghĩ rằng nó tồn tại khi nó được chroot đến/var/spool/postfix/
lw1.at

Nghe có vẻ như nó không bị chroot. Xin vui lòng kiểm tra lại? Con đường của bạn sẽ trông giống như /var/spool/postfix/var/run...nếu nó là
Miloš Đakonović

Trong mọi trường hợp, tôi sẽ sử dụng inetthay vì local. Có thể, nếu bạn không gỡ lỗi dịch vụ, hãy thử triển khai: digitalocean.com/community/tutorials/
mẹo

Câu trả lời:


31

Cuối cùng tôi đã tìm ra giải pháp.

Các /etc/init.d/opendkimdường như không làm gì cả. Nhưng thay vào đó, dịch vụ /lib/systemd/system/opendkim.serviceđược sử dụng có mã hóa ổ cắm sai.

Nhưng gói debian dường như cũng bao gồm một bash tạo ra dịch vụ systemd chính xác.

Vì vậy, sau khi chạy

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

và khởi động lại opendkim, tệp socket xuất hiện ở vị trí dự kiến, có thể được xác minh bằng cách gọi:

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

Cập nhật: Dường như có một lỗi debian về vấn đề này: # 861169


3

Tôi không đủ uy tín để bình luận và muốn thừa nhận rằng sau nhiều giờ tìm kiếm giải pháp cho thông báo lỗi 'kết nối bị từ chối' của PostDKim-Postfix, bản /lib/systemd/system/opendkim.servicechỉnh sửa được cung cấp bởi LocutusBE đã hoạt động với Ubuntu 17.04:

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

biên tập /lib/systemd/system/opendkim.service

thay đổi:

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

đến:

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

Trước khi thử chỉnh sửa, tôi đã thêm người dùng postfix vào nhóm opendkim và thử /lib/opendkim/opendkim.service.generatetheo giải pháp của Lukas Winkler . Lỗi từ chối kết nối vẫn tồn tại cho đến khi số cổng được thêm vào /lib/systemd/system/opendkim.service.

Để cập nhật /lib/systemd/system/opendkim.service, tôi đã sử dụng cổng 8891 cho Ubuntu và nhận xét dòng ExecStart ban đầu cho mục đích thử nghiệm, sau đó thêm một dòng mới với cổng #:

/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

Số cổng phù hợp đã được chỉ định bổ sung trong /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

Sau khi khởi động lại daemon systemctl, opendkim và postfix, thư gửi đi đã được ký mà không có vấn đề gì và nhật ký thư hiển thị "Đã thêm trường chữ ký DKIM".

systemctl daemon-reload
systemctl opendkim restart
systemctl postfix restart

Gần đây không có vấn đề kết nối nào khi định cấu hình OpenDkim với Centos7, vì vậy rõ ràng trong trường hợp này nó có liên quan đến Ubuntu. Cảm ơn Lukas Winkler đã đăng câu hỏi và những người đã chia sẻ giải pháp của họ.


2

Để sử dụng inetổ cắm, bạn cần chỉ định:

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

đồng thời, bạn cần thay đổi cài đặt trong Postfix:

trong /etc/postfix/main.cf add:

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

nếu bạn không thể đặt thành localđường dẫn mong muốn, tôi sẽ đề nghị bạn:

  • lấy một khúc gỗ từ mail, sysloghoặc opendkimtrong /var/logvà kiểm tra

  • kiểm tra /etc/init.d/opendkimtập lệnh và kiểm tra xem tập tin sock có được đặt thành giá trị không

  • cố gắng đi với mặc định local:/var/run/opendkim/opendkim.sock- và chỉ định smtpd_milters = local:/var/run/opendkim/opendkim.socknon_smtpd_milters = local:/var/run/opendkim/opendkim.socktrong/etc/postfix/main.cf


Bây giờ tôi đã thay đổi cấu hình giống hệt như của bạn (cùng một cổng) nhưng tôi vẫn nhận đượcwarning: connect to Milter service inet:localhost:12301: Connection refused
lw1.at

Bạn đã thử khởi động lại cả hai dịch vụ sau khi chỉnh sửa chưa?
Miloš Đakonović

Tôi đã làm và bây giờ tôi cũng khởi động lại. Khi nhìn vào mail.log tôi luôn thấy dòng sauOpenDKIM Filter v2.11.0 starting (args: -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock)
lw1.at

Bạn thấy dòng đó ngay cả với SOCKET="inet:12301@localhosttập tin thành opendkim conf?
Miloš Đakonović

cảm ơn vì những ý tưởng Tôi đã tìm thấy giải pháp (có gì đó kỳ lạ với gói debian)
lw1.at

1

Điều này làm việc cho tôi:

biên tập /lib/systemd/system/opendkim.service

thay đổi:

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

đến:

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

Đây chính xác là thay đổi được thực hiện bởi tập lệnh /lib/opendkim/opendkim.service.generate.
lw1.at

Cảm ơn rất nhiều - điều này đã sửa nó trên Ubuntu 16.04.3 LTS mà thiếu opendkim.service.generate.
Ivan Mir

0

OpenDKIM hoạt động cho đến khi tôi nâng cấp máy chủ của mình. OpenDKIM sẽ không bắt đầu và không có ổ cắm nào chạy cho Milter để bắt đầu. Trong /var/log/syslogtôi có thể thấy rằng opendkim đã thất bại khi cố gắng tạo ra một ổ cắm ở nơi khác so với trước khi nâng cấp. Tôi cố gắng để chỉnh sửa cài đặt ổ cắm trong /etc/opendkim.conf, /etc/default/opendkim/lib/systemd/system/opendkim.servicenhưng nó đã không giúp đỡ. Hóa ra thông tin đã ở trước mặt tôi suốt thời gian:

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

Tôi nhận thấy các cài đặt đã bị ghi đè bởi tệp "override.conf" và được chỉnh sửa để nó được căn chỉnh với /etc/postfix/main.cf(chạy như chroot) của tôi:

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

Biên tập /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

Và cuối cùng khởi động lại daemon và opendkim:

systemctl daemon-reload && systemctl restart opendkim

0

Tôi vừa đổi tên /etc/systemd/system/opendkim.service.d/override.conf thành /etc/systemd/system/opendkim.service.d/override.conf.old để nó không ghi đè các tham số ExecStart.

Mọi thứ đều hoạt động tốt khi chọn cấu hình từ /etc/opendkim.conf


0

Dịch vụ opendkim của tôi đã không thức dậy trên cổng 8100 sau khi cài đặt và các giải pháp trước đó không giúp được gì. Vì vậy, tôi đã cố gắng

/lib/opendkim/opendkim.service.generate

nói

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

vì vậy tôi đã xem tập tin dịch vụ

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

và tìm thấy những con đường lạ

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

và chỉ huy

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

nói

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

(nhìn đến dòng thứ 2 trên hạn ngạch trước đó) vì vậy tôi đã đi đến

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

và xóa "-" 3 lần Sau đó

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

Điều đó đã giúp tôi :-)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.