この疑問に回答します。
メールを送信する際に、迷惑メール防止の設定を組み込まないと相手に届く前に振るい落されます。しっかりと迷惑メール防止対策を実施する必要があります。DKIMを正しく設定したのにテスト送信でPostFixがDKIMと連携してくれない。私がハマったので経緯をまとめます。
DKIMの電子署名が付与されない
DKIMの電子署名をつけるメールリレーサーバーを構築しました。
パラメーターの不備
よくある事です。
スペルミス、記述方法が間違っている、コロン(:)、セミコロン(;)などが間違っている可能性があるので、設定ファイルをよーく眺めてください。
OpenDKIMサービスの再読み込み
よくある事です。
設定ファイルを書き換えただけで、再読み込みを行っていない。サービスを再起動してください。
キーペア(公開鍵・秘密鍵)のアクセス権(Permission denied)
キーペアを作成する際には管理者権限である、rootで作成します。作成されてファイルのオーナーはrootです。OpenDKIMサービスは一般ユーザー(opendkim)で動作しまのでアクセス権が無くて動作しない。
アクセス権にエラーがあると/var/log/maillogに「Permission denied」とエラーが表示されます。
can't load key from /etc/opendkim/keys/20200519.private: Permission denied error loading key '20200518._domainkey.mydomain.com'
キーペアファイルのアクセス権(所有者)を管理者(root)からopendkim に変更しましょう。
# ls -al /etc/opendkim/keys/mydomain/ -rw------- 1 root root 887 May 19 12:16 20200519.private -rw------- 1 root root 318 May 19 12:16 20200519.txt # chown -R opendkim:opendkim /etc/opendkim/keys/ # ls -al /etc/opendkim/keys/mydomain/ -rw------- 1 opendkim opendkim 887 May 19 12:16 20200519.private -rw------- 1 opendkim opendkim 318 May 19 12:16 20200519.txt
TELNETからSMTPコマンドを実行
メーラーを使って試せば早かった。ココで1日ハマりました。コマンドは最小限のコマンドではダメなようです。DATAには過不足なく情報を入れてください。(前提:OpenDKIMの設定は正しい)
TELNETからSMTPコマンドを実行(ダメな手順)
疎通テストであれば、これで十分です。DKIMのテストもこの手順で実施しました。
コマンドの実行結果
リレーサーバーにFROM、TO、本文(件名)を付けて送付しています。
# telnet xxx.xxx.xxx.xx 25 mail from:[email protected] rcpt to:[email protected] data subject:test test . quit
/var/log/maillogを確認
postfix のメール送信ログを確認しました。
opendkim[1159]: B474930A9116: mydomain.com [xxx.xxx.xxx.xxx] not internal opendkim[1159]: B474930A9116: not authenticated opendkim[1159]: B474930A9116: no signature data
「no signature data」となって証明書を署名してくれません。
メールヘッダーを確認
受信したメールヘッダーを確認しました。
Authentication-Results: spf=pass (sender IP is xxx.xxx.xxx.xxx) smtp.mailfrom=mydomain.com; mydomain.com; dkim=none (message not signed) header.d=none;mydomain.com; dmarc=bestguesspass action=none header.from=mydomain.com;compauth=pass reason=109
「dkim=none」証明書を署名してくれません。
何をやってもダメでした。DKIMの設定が悪いと思って何度も見直しを実施しましたが、間違いはありません。
つまり、この手順がマズかった。
TELNETからSMTPコマンドを実行(正常に動作する手順)
DATA内にFROM:とTO:の設定を入れる。
コマンドの実行結果
リレーサーバーにFROM、TO、本文(件名、送信元、受信先)を付けて送付しています。
# telnet xxx.xxx.xxx.xx 25 mail from:[email protected] rcpt to:[email protected] data from:[email protected] to:[email protected] subject:test test . quit
/var/log/maillogを確認
postfix のメール送信ログを確認しました。
opendkim[1159]: C648230A9116: DKIM-Signature field added (s=20200518, d=mydomain.com)
「DKIM-Signature field added」となって証明書を署名しました。
メールヘッダーを確認
受信したメールヘッダーを確認しました。
Authentication-Results: spf=pass (sender IP is xxx.xxx.xxx.xxx) smtp.mailfrom=mydomain.com; mydomain.com; dkim=pass (signature was verified) header.d=mydomain.com; mydomain.com; dmarc=bestguesspass action=none header.from=mydomain;compauth=pass reason=109 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mydomain.com; s=20200518; t=1590118475; bh=g3zLYH4xKxcPrHOD18z9YfpQcnk/GaJedfustWU5uGs=; h=subject:from:to:From; b=cQICvGVZkGdT+ATp3Hi/C3y8/3uL82shNbYYSQRtUQi//MGgUn7wYF08unjoJ93yZ baV2KYAs75baad6AWI/5K2yjLIc3YoTZnYhGWjRzmJSvBNfTfgtUiDSrCnUfTE2lmO QBX66Hq6QlbaRHUcRKMXzxZ6M1Skv4qs13qHGrKo=
「dkim=pass」となり証明書も付加されていました。
送信ドメインとSigningTableの不一致(no signing table match)
ユーザーからの、外部サービスの通知メールを自社ドメインにしたいと依頼があり、リレーサバーを構築しました。自己チェックではすべてOKなのにユーザーがテスト送信すると、「迷惑メールフォルダー」に格納される連絡が入りました。
postfix のメール送信ログを確認しました。
opendkim[1159]: 30F9F308846A: no signing table match for '[email protected]' opendkim[1159]: 30F9F308846A: no signature data
「no signing table match」となって証明書を署名してくれません。
ログを見続けて発見しました。送信されてくるFROMのドメインが、SigningTableに載ってない。
ユーザーに外部サービスのメール送信者欄を修正してもらい解決しました。
以上、「PostfixにDKIM設定を行った時、ハマった動作テスト」という記事でした。