SPFとDKIMのDNS設定方法と仕組みについて

SPFもDKIMもメールの送信者がなりすましていないかを検証する手段です。設定時に色々調べたのでメモを残しておこうと思います。

SPF

SPFではIPアドレスやドメインを使用して送信者が正しいかを検証します。

  1. メールを受け取ったら送信者のドメインのSPFレコード(なければTXTレコード)を参照します
  2. 取得した値をみて、記入されているIPアドレスやドメイン先のIPアドレスから送られているかを確認します
  3. 一致した場合は正しいと判定します
Name Type Value
example.com SPF "v=spf1 ip4:12.34.56.78 include:example.com -all"
example.com TXT "v=spf1 ip4:12.34.56.78 include:example.com -all"

SPFレコードを認識しないリゾルバやDNSサーバが存在するので両方を設定するとのことらしいです。

SPFを複数設定する場合

SPFを複数記入する場合には注意が必要です。

↓のような2つの設定を書きたい場合は

"v=spf1 include:aaa.com ~all"
"v=spf1 include:bbb.com ~all"

このように1つにまとめて記入する必要があります。

"v=spf1 include:aaa.com include:bbb.com ~all"

DKIM

DKIMでは秘密鍵・公開鍵を使用して電子署名の手法で送信者の認証を行います。

  1. メールを送信する際にメールのハッシュ値を送信サーバーが持っている秘密鍵で復号化(最初に暗号化ではなく復号化)して送ります
  2. メールを受信したら、DKIM-Signatureのdのプロパティを参照してTXTフィールドの問い合わせを行う
  3. DKIMの公開鍵が取得できるので取得した公開鍵を使い暗号化してもとのハッシュ値を取得します(最初に秘密鍵で復号化しているので、公開鍵で暗号化すると元にもどる)
  4. 受信したメールのハッシュ値と先ほど公開鍵で暗号化して戻したハッシュ値を比較して一致した場合は送信者が正しいと判定します

DKIMの設定項目

ドメインと値が指定されるのでTXTレコードに設定します。

Name Type Value
xxxxx._domainkey.example.com. TXT "v=DKIM1; k=rsa; p=MqiM1e5NqIiZ3qmEHq....."

xxxxxの部分をセレクターといって公開鍵を複数設定する場合はこの部分を変更します(大抵はサービスごとに違うセレクターを指定される)

参照