PostfixがopendkimのUNIXソケットに接続しようとすると、拒否されたエラーが発生します。実際のエラー:
Sep 24 15:41:43 service-a-4 postfix/cleanup[17414]: warning: connect to Milter service unix:var/run/opendkim/opendkim.sock: Permission denied
postfix docs によると、postfixはデフォルトで「chrootモード」で実行されるため、postfixは/ var/spool/postfix /にロックされ、 postfix docs によると、「chrootモード」で実行している場合、milter(ソケット)の参照はすべて(/ var/spool/postfixに対して)相対的です。
だから私の設定は次のようになります:
# /etc/opendkim.conf
Socket local:/var/spool/postfix/var/run/opendkim/opendkim.sock
# /etc/postfix/main.cf
smtpd_milters = unix:/var/run/opendkim/opendkim.sock
テストメールを送信しようとすると、アクセス許可拒否エラーが表示されるので、いくつかのアクセス許可テストを試しました。
# Correctly lists the socket file
Sudo su -s /bin/bash postfix -c "ls /var/spool/postfix/var/run/opendkim/opendkim.sock"
しかし、postfixとして接続しようとしても、何も起こりません。
# Does not work
Sudo su -s /bin/bash postfix -c "nc -U -D /var/spool/postfix/var/run/opendkim/opendkim.sock"
# Does work (as root)
nc -U -D /var/spool/postfix/var/run/opendkim/opendkim.sock
この問題をデバッグしている間、SELinuxは一時的に無効になります(許容されます)。また、構成を変更するたびに両方のプロセス(opendkimとpostfix)を再起動しています。
他に何が欠けていますか?
バージョン:
CentOS 6.5
Postfix v2.6.6
Opendkim v2.9
私のCentOS6でテストしたところ、postfixは実際には「chrootされていない」ようです。
私の設定:
# /etc/opendkim.conf
Socket local:/var/run/opendkim/opendkim.sock
# /etc/postfix/main.cf
smtpd_milters = unix:/var/run/opendkim/opendkim.sock
これは以下を生成します:connect to Milter service unix:/var/run/opendkim/opendkim.sock: Permission denied
。
ただし、ソケットumaskは002なので、srwxrwxr-x. opendkim:opendkim opendkim.sock
。
umaskを000に変更すると、問題が解決します。それでも、opendkimでuser:groupを切り替える方が、一般に公開するよりも優れています。
環境:
centos 6.5 2.6.32-573.7.1.el6.x86_64
postfix 2.6.6-6.el6_5 @updates
opendkim 2.10.3-1.el6 @epel
これを見つけて上記の回答で問題が解決しない場合、私の問題は、opendkimソケットフォルダーにグループ実行権限がない/var/run/opendkim/
グループ権限が設定されていることを確認するために、cron @rebootを追加しました@reboot root chmod g+x /var/run/opendkim/
再起動後に戻ることからの次の警告を修正/パッチします。
警告:Milterサービスに接続しますunix:/var/run/opendkim/opendkim.sock:権限が拒否されました
1時間あたり10万通以上のメールに署名しているので、tcp接続は良い解決策ではありませんでした。
IIRC、centos 6のPostfixは、標準構成でchrootされて実行されません。私がepelからopendkimを設定したとき、それはこの設定に付属していました:
Socket inet:8891@localhost
したがって、postfixで有効にするには、これをmain.cfに追加するだけでした。
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
milter_protocol = 2
en opendkim en postfix afterを再起動して、キー、TrustedHosts、SigningTable、Keytableを適切に構成し、txtレコードをDNSに公開します。
O、そして私は忘れました:postfixもopendkimグループのメンバーである必要があります。