Postfix + dkim-milterからOpenDKIMに移行する


 かなり以前に Postfix を DKIM 対応にするネタを書いたが、その後、dkim-milter は OpenDKIM にリプレイスされた。遅ればせながら今回、OpenDKIM に乗り換えてみた。dkim-milter のままでも問題はないが、1 MTA で複数のドメインに対して複数の DKIM-Signature を付けられるようになったので、ぜひ乗り換えるべきだと思う。

 Gentoo Linux の場合は、何よりもまず emerge する。

ACCEPT_KEYWORDS="~amd64" emerge opendkim

 次に、dkim-milter から移行する場合は、鍵ペアを /etc/opendkim 以下に移動する。新しく鍵ペアを作る場合は、OpenDKIM についてくるシェルスクリプトで作成する。

opendkim-genkey -s セレクタ名 -d ドメイン名

 ただし、Gentoo Linux の mail-filter/opendkim-2.5.2-r1 についてくる opendkim-genkey の場合、DNS に登録すべきレコードが不正確になる。生成されるセレクタ名.txt というファイル名の中身を DKIM 対応するドメインの DNS に設定するのだが、

セレクタ名._domainkey IN TXT "v=DKIM1;=rsa; p=MIGf...

となっている。実際には「=rsa」は「k=rsa」なので、修正した上で DNS に反映する。反映したら、nslookup などで正しく引けるかを確認する。

nslookup -q=txt default._domainkey.damelog.com 8.8.8.8

 正しく引けるようであれば、秘密鍵の方の所有者を milter ユーザに変更して、milter で読み出せるようにしておく。

 ここまでできたら、/etc/opendkim/opendkim.conf に以下を追加する。

InternalHosts           refile:/etc/opendkim/TrustedHosts
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable

 TrustedHosts には、DKIM シグニチャをつけるべきメールサーバをリストアップしておく。Postfix と一対一で使う場合は、対応する Postfix が動作しているホストを書いておけば良い。

 KeyTable には、TXT フィールドとシグニチャをつけるドメイン、セレクタ、対応する秘密鍵を1行につき1ドメインずつ書いていく。

default._domainkey.damelog.com damelog.com:default:/etc/opendkim/default.private

 複数の鍵ペアを運用したい場合は、鍵ペアの分だけここに列挙しておけば良い。

 最後に SigningTable には、どのメールアドレスに対してはどの TXT フィールドを参照するかを指定する。ここではワイルドカードが使える。

*@damelog.com default._domainkey.damelog.com

 最後に、ここは好みの問題だが、OpenDKIM で検証する際に TCP 経由で検証するようにした。これはもともとの Postfix の設定が TCP 経由で dkim-milter に投げていたため。この設定については、opendkim.conf に書けば良い。

Socket inet:8891@127.0.0.1

 これで OpenDKIM 側の設定は完了なので、OpenDKIM を起動する。

/etc/init.d/opendkim start

 最後に Postfix 側で milter の設定をしていない場合は、/etc/postfix/main.cf に以下を追加しておく。

smtpd_milters     =
	inet:127.0.0.1:8891

 Postfix を再起動後、check-auth@verifier.port25.com や sa-test@sendmail.net といったテスト用アドレスにメールを送信して正しく設定できているかを確認する。check-auth@verifier.port25.com の場合は

DKIM check: pass

sa-test@sendmail.net の場合は

Authentication System: DomainKeys Identified Mail (DKIM)
Result: DKIM signature confirmed GOOD
Description: Signature verified, message arrived intact
Reporting host: services.sendmail.com
More information: http://dkim.org/
Sendmail milter: http://opendkim.org/

となっていればよい。

 メールサーバの第三者転送の禁止や逆引き設定といった基本的な設定はもちろん、DKIM や SPF といったなりすまし防止メカニズムへの対応は、特に企業向け MTA の設定としては不可欠といってもいいだろう。日本の企業だと SPF に対応していることはあっても DKIM に対応していないケースもあったりするが、こういう場合、Gmail などでいつ迷惑メール扱いされてもおかしくない状況にある。もともとメール自体、仕様として 100% の到着が保証されてはいないが、少しでも排除されるリスクを減らすためにも、こういった対応はぜひやっていきたい。