DKIM 設定をしたはずが迷惑メールとして送られてしまっていた
ドメインがサブドメインのメールアドレスに対して cloudflare 上で、DKIM 設定したはずがなぜか迷惑メールとして送信されてしまっていたので調査しました。結論としては DKIM の設定の際の TXT レコードの名前が間違っていたのが原因でしたが、DKIM 設定に関して調査する良いきっかけになったので調査して理解した部分を残しておきます。
そもそも DKIM とは?
DKIM は SPF などと同様の「送信ドメイン認証技術」のうちの一つで、仕組みを図で表すと下記のようになっています。
DKIM認証の流れを文章で書くと下記になります。
- 送信者側で公開鍵・秘密鍵のペアを発行する
- 公開鍵をドメインを管理してる DNS サーバーに置く
- 送信者側が秘密鍵を利用して電子署名をメールに付与する
- メール受信後、ドメインを管理している DNS サーバーに公開鍵を問い合わせる
- 問い合わせた公開鍵を利用して、電子署名を照合する
上記の 5 つの手順を実施することで、DKIM 認証を行うことができメールの改ざん防止につながります。
参考記事
- 【図解あり】DKIM の役割を 3 分で解説!!ドメイン送信技術の DKIM の仕組みを理解しよう|メール配信・メルマガ配信ならブラストメール
- DNS の DKIM レコードとは? | Cloudflare
今回 DKIM 設定が正常に設定できていなかった件について
冒頭でも述べましたが、今回は DKIM レコードの名前が誤っていました。具体的なドメイン名などは伏せますが、修正前はselector._domainkey
ようなレコード名になっていました。
通常のドメインに対して cloudflare で DKIM レコードを設定する場合はドメイン名を省略してくれるため修正前の名称でも大丈夫でした。他の DNS サーバーでしたら、selector._domainkey.domain.com
と名前をつける必要がありそうです。
ただ、今回 DKIM 設定をしたいメールドメインはサブドメインだったため、レコード名はselector._domainkey.sub.domain.com
と付ける必要がありました。
cloudflareだとselector._domainkey.sub
とする必要があります。
selector._domainkey.sub.domain.com
の名称に変更後、dig ってみたところ正常に TXT レコードが返ってきたので無事 DKIM レコードの設定ができました。
❯ dig selector._domainkey.sub.domain.com txt +short
"v=DKIM1; k=rsa; p=公開鍵"
参考記事
おまけ
DKIM 認証が失敗した場合はメールのソースに失敗理由が書いてあるのでそちらを参考にして失敗の原因を調査することができるようでした。自分の場合は下記のエラー理由が書いてあったので、署名の検証の部分に問題があることは理解できました。
dkim=temperror(no key for signature)
参考記事
DKIM 認証が失敗する原因とは? DKIM fail の修正方法 - ベアメールブログ
感想
そもそも最初から DKIM レコードの名前は、selector._domainkey.domain.com
と付ける必要があると分かっていたら、メールドメインがサブドメインになったとしてもすぐ分かりましたね、、
Discussion