/ etc / default / opendkimのDebianストレッチでOpenDKIMソケットを変更できない


18

Debianストレッチに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)

何が間違っていますか?(同じ問題を持つ他の人を見つけることができないので、それは私の間違いだと思います)

更新:

このソケットを使用するようにpostfix configに変更して変更/etc/default/opendkimするSOCKET="inet:8891@localhost"と、inet:localhost:8891: Connection refused

更新2:

これで、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で動作させるためにこれが本当に必要なのか?
ミロシュチャコノヴィッチ

@Miloshio postfixがchrootで実行されると思いました。(チュートリアルによれば、私はフォローしています
-lw1.at

@Miloshioの接尾辞はconnect to Milter service local:/var/run/opendkim/opendkim.sock: No such file or directory、それが/var/spool/postfix/
chrooted

chrootされていないようです。もう一度確認してください。あなたのパスは次のようになります。/var/spool/postfix/var/run...それがある場合
ミロシュĐakonović

どのシナリオでも、のinet代わりに使用しますlocal。あなたがダウンサービスデバッグされていない場合は多分、実装しよう:digitalocean.com/community/tutorials/...
ミロシュĐakonović

回答:


31

私は最終的に解決策を見つけました。

/etc/init.d/opendkim何もしていないようです。しかし、代わりに/lib/systemd/system/opendkim.service間違ったソケットがハードコードされたservicefile が使用されます。

しかし、debianパッケージには、正しいsystemdサービスを生成するbashも含まれているようです。

だから走った後

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

opendkimを再起動すると、ソケットファイルが予想される場所に表示されます。これは次の呼び出しで確認できます。

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

更新:この問題に関するdebian バグレポートがあるようです:#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

編集を開始する前に、私はopendkimグループにpostfixのユーザーを追加してみまし/lib/opendkim/opendkim.service.generateあたりのルーカス・ウィンクラーのソリューション。接続拒否エラーは、ポート番号がに追加されるまで続きました/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
milter_protocol = 2

systemctlデーモン、opendkim、およびpostfixを再起動した後、送信メールは問題なく署名され、メールログに「DKIM-Signatureフィールドが追加されました」と表示されました。

systemctl daemon-reload
systemctl opendkim restart
systemctl postfix restart

最近Centos7でOpenDkimを構成する際に接続の問題はなかったため、このインスタンスでは明らかにUbuntu関連でした。質問を投稿してくれた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目的のパスに設定できない場合は、次のことをお勧めします。

  • からmailsyslogまたはログを取得opendkim/var/logて確認する

  • /etc/init.d/opendkimスクリプトを確認し、sockファイルが値に固定されているかどうかを調べます

  • デフォルトのままにしてみてください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

編集後に両方のサービスを再起動しようとしましたか?
ミロシュチャコノヴィッチ

私はやったし、今も再起動しました。た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ファイルに設定してもその行が表示されますか?
ミロシュチャコノヴィッチ

アイデアをありがとう。私は解決策を見つけました(debianパッケージには奇妙なものがあります)
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.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.cfchrootとして実行されることに気付きました。

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

ExecStartパラメータを上書きしないように、/ etc / systemd / system / opendkim.service.d / override.confを/etc/systemd/system/opendkim.service.d/override.conf.oldに変更しました。

すべてが/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.