PostfixにDKIM設定を行った時、ハマった動作テスト

メール
PostfixにDKIMを設定したので動作しない。原因がわからない

この疑問に回答します。

メールを送信する際に、迷惑メール防止の設定を組み込まないと相手に届く前に振るい落されます。しっかりと迷惑メール防止対策を実施する必要があります。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:noreplay@mydomain.com
rcpt to:user@mydomain2.com
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:noreplay@mydomain.com
rcpt to:user@mydomain2.com
data
from:noreplay@mydomain.com
to:user@mydomain2.com
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 'noreplay@sub3.mydomain.com'
opendkim[1159]: 30F9F308846A: no signature data

no signing table match」となって証明書を署名してくれません。

ログを見続けて発見しました。送信されてくるFROMのドメインが、SigningTableに載ってない。

ユーザーに外部サービスのメール送信者欄を修正してもらい解決しました。

 

 

以上、「PostfixにDKIM設定を行った時、ハマった動作テスト」という記事でした。