Debianストレッチでopendkimをセットアップしようとしていますが、ソケットの変更に失敗しました。ソケットを/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)
何が悪いのですか? (私は同じ問題を持つ他の人を見つけることができないので、それは私の間違いだと思います)
更新:
/etc/default/opendkim
をSOCKET="inet:8891@localhost"
に変更し、このソケットを使用するようにpostfix構成を変更すると、inet:localhost:8891: Connection refused
になります。
PDATE2:
これで、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:[email protected]
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
ようやく解決策を見つけました。
/etc/init.d/opendkim
は何もしないようです。しかし、代わりにservicefile /lib/systemd/system/opendkim.service
は、間違ったソケットがハードコードされたものを使用しています。
しかし、debianパッケージには、正しいsystemdサービスを生成するbashも含まれているようです。
だから実行した後
/lib/opendkim/opendkim.service.generate
systemctl daemon-reload
service opendkim restart
opendkimを再起動すると、ソケットファイルが予期した場所に表示されます。これは、次の呼び出しで確認できます。
tail /var/log/mail.log | grep OpenDKIM
更新:この問題に関するdebianバグレポートがあるようです: #861169
私はコメントするのに十分な評判がなく、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
編集を試みる前に、postfixユーザーをopendkimグループに追加し、/lib/opendkim/opendkim.service.generate
per Lukas Winkler's ソリューションを試しました。接続拒否エラーは、ポート番号が/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と、解決策を共有してくれたLankに感謝します。
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
を目的のパスに設定できない場合は、次のことをお勧めします。
/var/log
のmail
、syslog
、またはopendkim
からログを取得して確認
/etc/init.d/opendkim
スクリプトをチェックし、sockファイルが値にハードセットされているかどうかを検査します
デフォルトの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
を指定してください
これは私のために働きました:
編集/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サービスがポート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
それは私を助けました:-)
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
ExecStartパラメータを上書きしないように、/ etc/systemd/system/opendkim.service.d/override.confを/etc/systemd/system/opendkim.service.d/override.conf.oldに名前変更しました。
すべてが/etc/opendkim.confから設定を選択してうまく機能しています