ARC(RFC8617)とEd25519 SHA-256のDKIM(RFC8463)にさくっと対応させてみる Postfix + OpenARC + dkimpy-milter on FreeBSD

DMARC界隈の動きにあわせてPostfixをAuthenticated Received Chain(ARC)Ed25519 SHA-256のDKIMに対応させてみます。

FreeBSD上のPostfix + OpenDMARC + OpenDKIM を Postfix + OpenDMARC + dkimpy-milter + OpenARCに変えていきます。いずれOpenDKIMの状況が整った暁にはPostfix + OpenDMARC + OpenDKIM + OpenARCに戻すことにします。

まずはOpenARCでARCを追加します。まだportsが無いのでgit cloneでいきます。元気な方はぜひportsの作成を。まだDKIM対応させていない場合は先にDKIM対応させて、RSA鍵ペアを作ってDNSに公開鍵を突っ込むところまで済ませておきます。次にでてくるdkimpy-milterの現状の制限で、適用する各ドメインにそれぞれ同じ鍵で同じ名前のセレクタが必要です。

/usr/local/etc/openarc.confは次のような感じで、鍵はOpenDKIMで使用中のRSA鍵とセレクタを流用。特定条件下での脆弱性が見つかっても大丈夫なように良い子はARC専用に鍵ペアを作った方が無難かもです。ここでのDomain指定は公開鍵のためのドメインで、ヘッダにARCのフィールドを追加するかいなかの指定ではないです。SigningTableの実装を待ちます。

portsになった場合には気にしないで良くなりますが、ここでは起動はbsnmpdにお任せすることにして/etc/snmpd.configを編集。

Postfixのmaster.cfの中のすでにOpenDKIMなどのmilterがあるところに軒並みOpenARCのmilterを追加。

起動してエラーが無いことを確認。

Gmailにテストメールを送り、

のように、ヘッダの中のi=1のARC-SealとARC-Message-Signatureフィールドがopenarc.confで指定したドメインとセレクタでついていることを確認し(改行無しで78文字超えた署名がつくのであまりお行儀はよろしくない(as of 2019-11-18)です)、

で始まるフィールドの値に、

があることで付加した最初(i=1)の署名の対象が正しいとされたことが確認できます。


続いてOpenDKIMがed25519-sha256に正式に対応するまでの代替にdkimpy-milterを使ってみます。こちらはほぼReplacing OpenDKIM with dkimpy-milterに書かれている通りです。pip版は動かない、KeyTableEd25519も動かない、というのもその通りでした(as of 2019-11-18)。unix domain socketを使う設定になっていますがその場合Postfixの設定ではsock:ではなくてunix:かと思われます。こちらもportsが無いのでgit cloneで行きます。

Ed25519の鍵ペアを作ります。

KeyTableが使えないのでRSA SHA-256およびEd25519 SHA-256のDKIM署名を付けるすべてのドメインの セレクタ._domainkey.ドメイン の TXT RR を設定します。上のEd25519の例では出来上がったa5.dnsの内容がそれです。

/usr/local/etc/dkimpy-milter.confを編集します。

プロセス名がpythonなので今度はbsnmpdではなくて/etc/rc.localでの起動にしてみます。

Postfixのmaster.cfの中のOpenDKIMのmilterをdkimpy-milterに変更。

受信(主に25/tcp smtp)の場合はdkimpy-milter.confで指定したマクロ

も指定し、他の送信系では

を指定します。pickupの場合は専用のcleanupを指定してそのcleanupでmilterを設定する必要があるかもしれません。

先のブログの通りDKIMValidator.comに表示されるアドレスにテストメールを送り、結果を見るボタンを押すことでed25519-sha256署名の検証や、SPF、ついでにデフォルト設定のSpamAssassinのスコアも表示してくれます。ありがたや。

Gmailではa=rsa-sha256の方はdkim=passとなるものの、a=ed25519-sha256はまだ検証してくれずにdkim=neutral (no key)、となります(as of 2019-11-18)。

OutlookではARC-Authentication-Resultsでは結果dmarc=passとなるので良いもののdkim=failとdkim=passが入り乱れ、Authentication-Resultsにはdkim=passだけが入っていました(as of 2019-11-18)。

コメントを残す

メールアドレスが公開されることはありません。