KUSANAGI 9 で DKIM を設定する

高速な WordPress 実行環境 KUSANAGI のバージョン 9 で DKIM を設定するという話。
なぜ DKIM が必要か
僕のドメイン aioilight.space
では、ウェブサーバーとして KUSANAGI の VPS、メールサーバーとしてさくらのメールボックスを使用している。まあメールを送る機会はほぼ無いのだが、さくらのメールボックス側で DKIM を設定して、それに加えてドメインに対して DMARC も設定した。
DMARC は SPF と DKIM の片方がパスできれば問題ないものの、両方パスできることには越したことないので、VPS 側でも DKIM を設定してみよう。
DKIM 導入の手順
KUSANAGI 環境での DKIM 導入の手順は、既に先人がやっているので、基本的な流れはこちらの「KUSANAGI にDKIMを入れるメモ」に従う。しかし、OS のバージョンが異なるので微妙にコマンドは異なる。
OpenDKIM を入れる
sudo dnf install opendkim opendkim-tools
CentOS Stream 9 ではパッケージマネージャが dnf
になっているので。そこは違うね。
キーペアを作る
sudo opendkim-genkey -D /etc/opendkim/keys/ -d example.com -s s20250101
opendkim-genkey
コマンドでキーペアを生成する。-D
でディレクトリを指定。 -d
でドメイン名を指定。-s
はセレクタで、好きに設定できるが基本は日付であることが多いみたい。
コマンドを実行すると、セレクタ名.txt
に公開鍵、セレクタ名.private
に秘密鍵が保存される。
以後の解説では、ドメインが example.com
、セレクタが s20250101
である場合の例になる。
ファイルの所有権を変更する
sudo chown -R opendkim:opendkim /etc/opendkim/keys/
ファイル・ディレクトリの所有権を opndkim:opendkim
にしておく。
OpenDKIM の設定をする
/etc/opendkim.conf
を編集する。
# Mode v ->
Mode sv
# Socket local:/run/opendkim/opendkim.sock ->
Socket inet:8891@localhost
# 下記をコメント ->
KeyFile /etc/opendkim/keys/default.private
# 下記をコメントアウト ->
KeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
/etc/opendkim/KeyTable
を編集する。
s20250101._domainkey.example.com example.com:s20250101:/etc/opendkim/keys/s20250101.private
/etc/opendkim/SigningTable
を編集する。
*@example.com s20250101._domainkey.example.com
サブドメインも同じ鍵で署名したければ、
*@sub.example.com s20250101._domainkey.example.com
でよい。ただし、DMARC のアライメントを relaxed
にする必要がある。もちろん、ドメイン毎にキーペアを生成して、それぞれ違う鍵で署名することもできる。
OpenDKIM を起動する
sudo systemctl start opendkim
sudo systemctl enable opendkim
Postfix を設定する
/etc/postfix/main.cf
を編集する。これは末尾に追加する形。
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
(番外編?) Postfix の追加設定
このままでも DKIM 自体は動くのだが、僕の場合、メインのメール送受信については別のサーバー (さくらのメールボックス) で行っていて、KUSANAGI 環境から別のサーバーへのメール (ドメイン内メール) については受信ができなかったため、追加の設定をして回避する。
myhostname = example.com
inet_interfaces = localhost
mydestination = localhost.$mydomain, localhost
Postfix を再起動する
sudo systemctl restart postfix
DNS レコードを編集する
s20250101._domainkey.example.com
に TXT レコードに追加する。
"v=DKIM1; k=rsa; p=ここに歌詞(公開鍵)を入力"
レコードの追加作業はサービスによって書き方が異なる可能性がある。
実際に DKIM が設定されているか確認してみよう
/var/log/maillog
を見てみると、このようなログが記録され、DKIM 署名が追加されていることが分かる。
opendkim[#######]: ###########: DKIM-Signature field added (s=s20250101, d=example.com)
あとは、実際に届いたメールのソースを確認して、SPF / DKIM / DMARC の状況を確認する。

また、Gmail などでは「原文を表示」メニューから、簡単に SPF / DKIM / DMARC のステータスをチェックできる。
まとめ
まああんまり KUSANAGI 関係ないっすね。