電子メールの改ざん対策として電子署名を利用してメールを検証する DKIM (DomainKeys Identified Mail) という技術があります。
また、DKIM では電子署名を検証するための公開鍵を DNS から取得することでメールのなりすまし対策をおこなうことも出来ます。
そんな DKIM ですが、Office 365 でも利用できます。というか放っておいても有効になっているものだと思っていたのですが、何気なく Exchange 管理センター (保護 - dkim) を眺めていると DKIM が有効になっていない事に気が付きました。
[,w600]
どうやら複数のドメインを使用している等、特定の条件では手動で CNAME の登録と DKIM の有効化をしてやる必要があるようです。
- Office 365 に複数のドメインがある場合
- DMARC も設定する場合 (推奨)
- 秘密キーを制御する場合
- CNAME レコードをカスタマイズする場合
CNAME を登録する
DKIM を有効にするドメインごとに 以下の 2 つの CNAME を登録します。
Host name: selector1._domainkey
Points to address or value: selector1-<domainGUID>._domainkey.<initialDomain>
TTL: 3600Host name: selector2._domainkey
Points to address or value: selector2-<domainGUID>._domainkey.<initialDomain>
TTL: 3600
ここで <domainGUID> は使用しているドメインに割り当てられている ID で、ドメイン名が example.com だと example-com のような形になっていると思います。使用している MX レコードの先頭部分 (.mail.protection.outlook.com の前) に使用されているのではないかと思います。
<initialDomain> は最初にセットアップしたドメインですので、普通は XXXXX.onmicrosoft.com のような形になっていると思います。
今使っているドメインは Office 365 で管理しているので、管理センターの 設定 - ドメイン でカスタムレコードを 2 つ追加します。
[,w320]
DKIM を有効化する
CNAME を有効化した後は Exchange 管理センターの 保護 - dkim で設定を有効化すればいいらしいのですが、画面に変化がなかったので PowerShell で有効化しました。
PowerShell で Exchange Online に接続してから以下のコマンドを実行します。
New-DkimSigningConfig -DomainName example.com -Enabled $true
この状態で再度 Exchange 管理センターを開くと「DKIM 署名を追加します」が有効になっていました。
[,w600]
メールを送信してみる
では早速メールを送ってみます。
まずは DKIM の有効化前に Outlook.com に送ったメール。
Authentication-Results: hotmail.com; spf=pass (sender IP is xx.xx.xx.xx) smtp.mailfrom=kazuaki@*****.***; dkim=none header.d=*****.***; x-hmca=pass header.id=kazuaki@*****.***
SPF による送信元 IP の確認はパスしていますが、DKIM は未確認になっていますね。
設定後に送ったメールがこちら。
Authentication-Results: hotmail.com; spf=pass (sender IP is xx.xx.xx.xx) smtp.mailfrom=kazuaki@*****.***; dkim=pass header.d=*****.***; x-hmca=pass header.id=kazuaki@*****.***
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=*****.***;
s=selector1; h=From:To:Date:Subject:Message-id:Content-Type:MIME-Version;
bh=xxxxxxxxxxxxxxxxxxxx;b=xxxxxxxxxxxxxxxxxxxx
DKIM がパスしている事、DKIM-Signature ヘッダに送信元ドメイン (d=) やヘッダ、本文のハッシュ値 (bh=, b=) が含まれていることが確認できます。
これでメールを送った先でスパム扱いされる恐れが減る...かもしれませんね。