水たまりは希望を写している

KUSANAGI 9 で DKIM を設定する

KUSANAGI 9、SPF DKIM DMARC のテキスト。

高速な 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 関係ないっすね。

この記事を書いた人

AioiLight

Web とか Android とかをやってる人。アニメ・ゲームが好きなはずなのに消費しきれない毎日。

Twitter (@aioilight)