メールのヘッダーにDKIM-Signatureを表示したい。
なので、opendkimの周囲をおさらいすることにした。
先ずはGeminiさんに相談する。
だって何が何だか判らないのだもの、仕方が無いんだ。
opendkimは一度設定するだけで、backgroundで動かすものだとは思ってもいなかったんだよ。
最初に結果を書く。
opendkim.confはこんな感じになった。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Canonicalization relaxed/simple Domain k-in.co.jp ExternalIgnoreList /opt/local/var/db/opendkim/TrustedHosts InternalHosts /opt/local/var/db/opendkim/TrustedHosts KeyFile /opt/local/var/db/opendkim/default.private KeyTable /opt/local/var/db/opendkim/keytable MacroList daemon ORIGINATING Mode sv ReportAddress "DKIM Error Postmaster" <postmaster@k-in.co.jp> Selector default SigningTable /opt/local/var/db/opendkim/SigningTable Socket local:/opt/local/var/run/opendkim/opendkim.sock Syslog Yes SyslogFacility local5 UserID _postfix |
SyslogFacilityは元々mailだったけれど、local5に変更。
MacroListのdaemon ORIGINATINGはdaemon:ORIGINATING(コロンで繋ぐ)とエラーになる。
ここ(コロン挟んだ)はAIさんも間違えたよ。だから失敗しても大丈夫。
これで/etc/syslog.confに設定しておけば独立したログが取れる筈。
|
1 |
local5 /opt/local/var/log/opendkim/opendkim.log |
取れていないんだけれどね……何故に?
postfix/main.ctに追加したのはここ。(だけだったと思う)
|
1 2 3 |
smtpd_milters = unix:/opt/local/var/run/opendkim/opendkim.sock non_smtpd_milters = $smtpd_milters milter_default_action = accept |
postfix/master.cfに追加したのはsubmissionの2行。
|
1 2 3 |
submission inet n - n - - smtpd -o smtpd_milters=unix:/opt/local/var/run/opendkim/opendkim.sock -o milter_macro_daemon_name=ORIGINATING |
これだと未だ動かない。
何故かlogに出ないので、対応も取れないんだわ。
Google AIさんに尋ねたところ、この様な対応策を出してくれた。
- opendkim.confにMacroList daemon ORIGINATINGが無かった。
なので、postfixからの起動指示を受け取れない。 - ownerが違っていた。
sudo chown -R _postfix:_postfix /opt/local/var/db/opendkim
sudo chown -R _postfix:_postfix /opt/local/var/db/opendkim/*
以下はownerが_postfixでないとopendkimが中身を読めない - SigningTableが空だった。
k-in.co.jp default._domainkey.k-in.co.jp
が必要
他にもあったかも。
1番目は、master.cfのmilter_macro_daemon_name=ORIGINATINGに対応している。
postfixがopendkimを呼び出す時にORIGINATINGを送り、opendkimがそれを受けるとDKIM-Signatureを出力するらしい。
2番目は、opendkim.confの設定UserID _postfixが絡んでいる。
つまり、opendkimは_user _postfixで動いているのだ。だから当然である。
3番目は、SigningTableが空だったから何か入れないといけない。
答えはAIさんが示してくれた通りである。
opendkimの中身はこんな風。
|
1 2 3 4 5 6 7 8 |
% ls -l /opt/local/var/db/opendkim/ total 40 -rw-r--r-- 1 _postfix _postfix 86 8 6 17:51 SigningTable -rw-r--r-- 1 _postfix _postfix 51 8 6 10:40 TrustedHosts -rw------- 1 _postfix _postfix 916 4 17 11:37 default.private -rw------- 1 _postfix _postfix 319 4 17 11:37 default.txt -rw-r--r-- 1 _postfix _postfix 168 8 6 12:47 keytable |
default.privateは秘密鍵。
default.txtは公開鍵。
TrustedHostsは「署名を許可する送信元(信頼するホスト/IP)」 を指定するファイル。
|
1 2 3 4 5 |
::1 127.0.0.1 localhost k-in.co.jp 192.168.0.0/24 |
SigningTableは「どのメールアドレスに、どの鍵(KeyTableの鍵)を使って署名するか」 を結びつけるルールファイル。
|
1 |
k-in.co.jp default._domainkey.k-in.co.jp |
keytableは「使用する秘密鍵の置き場と情報のリスト」 を定義するファイル。
|
1 2 |
# [キー名] [ドメイン]:[セレクタ名]:[秘密鍵のフルパス] default._domainkey.k-in.co.jp k-in.co.jp:default:/opt/local/var/db/opendkim/default.private |
ここまでしてopendkimを再起動。
|
1 2 3 4 |
% ls -l /opt/local/var/run/opendkim/ total 0 srwxr-xr-x 1 _postfix wheel 0 8 6 18:13 opendkim.sock= |
今まで立ち上がらなかったopendkimがopendkim.sockを作り、postfixと通信できる様になった。
と云うことで、結果、出ましたっ!
|
1 2 3 4 5 6 7 |
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=k-in.co.jp; s=default; t=1786007611; bh=RDtbEYYacJtBNo8yXYDVJ5BCvHYwlgM36eoGMmiVv+I=; h=From:Date:Subject:To; b=dvNvU/ucXVSm2rPY7Okrl9YIr0cS8Ft3AKPiBuTthoeXF30/gXau/0xImY5YMEBcb fYGhgSikzw8NYEEIW9dUnVfBwEJzqJMyZtz1gu3aMqcsaE2KUvQTdPv02Z7XM8pkE4 OSNuTWrZt57Kw2E2i/KxlWX/cp0Xt/qLS9rHq+l8= |
未だ、ログは出ない。
ここでAIさんに聞いた。(全部聞いちゃう)
1.タブ区切りじゃ無いと動かない
2.プライオリティを指定しないと動かない
3.再起動しないと反映されない
のだそうです。
そして、sudo killall -HUP syslogdなんて方法もあるのね。(意味は判らないが、これで良いらしい)
序でに詳しく教えて貰った。
理由は、MacPortsという「外部環境」から、macOSの「内部システム(syslogd)」へ、独自に定義したログ(local5)を橋渡ししているからです。
Apple純正ではないカスタムファシリティ(local5)を追記する場合、syslogdの解釈パーサー(文字を読み取るプログラム)が古いBSD伝統の厳格なモードで動作してしまい、スペースが含まれた瞬間に「不正な構文」として処理をスキップしてしまう性質があります。
また、MacPorts側のインストーラー(install.*)がタブ区切りで設定を生成していたのも、歴史的に「タブで書くのが一番確実に動く(安全牌)」というUNIXの鉄則を忠実に守っているためです。
色々やってみたけれど、syslogからの移動(と言うよりsyslogに出てこない)は少々手強いので、放置することにした。
次はOpenDMARKに挑戦するか。
と思ったところで、MacPortsにはOpenDMARKもOpenSPFのなかったのでした。
ちゃんちゃん。(笑)

