Closed60

SPF, DKIM, DMARC設定について、わからないことを調べる

Masaharu HoriMasaharu Hori

一時期話題になったSPF, DKIM, DMARCを、実際に設定しながら分からないことを調べていく。

Masaharu HoriMasaharu Hori

SPFとは
SPF(Sender Policy Framework)は、メールの送信元ドメインが詐称されていないことを証明するための技術です。これにより、送信元のドメインが詐称されていないドメインだと確認でき、SPF認証を受けたメールは迷惑メールやなりすましでないことが証明されます。

https://www.future.ad.jp/futuremedia/other_gmailguideline2024/

Masaharu HoriMasaharu Hori

メールの受信サーバが、送信元のドメインが詐称されていないことを確認するための設定みたい

Masaharu HoriMasaharu Hori

Google Workspace のみを使用している場合: v=spf1 include:_spf.google.com ~all というテキスト行をコピーし、SPF レコードを追加する(後述)に進みます。

Masaharu HoriMasaharu Hori

v=spf1とは?

Claudeに聞いてみた。

v=spf1 について説明します。
これはSPF(Sender Policy Framework)レコードのバージョン指定で、以下を意味します:

  1. バージョン識別子
    ▪ v= はバージョンを示す識別子
    ▪ spf1 は SPF バージョン1を示す
    ▪ 現在使用されているSPFの標準バージョンは1のみ

  2. SPFレコードの開始
    ▪ すべてのSPFレコードは必ず v=spf1 で始まる必要がある
    ▪ これがないとSPFレコードとして認識されない

  3. 歴史的背景
    ▪ SPFの最初のバージョンを示す
    ▪ SPF2は提案されましたが、実装されることはなく、現在も spf1 が標準として使用されている

Masaharu HoriMasaharu Hori

_spf.google.comとは?

_spf.google.com はGoogleが提供するSPFレコードで、Google WorkspaceやGmailなどのGoogleのメールサービスから送信される正当なメールサーバーのIPアドレス一覧を含んでいます。このレコードを含めることで、Googleのメールサーバーからの送信を認証済みとして許可します。

Masaharu HoriMasaharu Hori

IPアドレスを直接指定しなくてもいけるんや。
Google側が即時IPアドレスを追加したり、削除できるようになっている。
メンテナンスしやすくて、いいね。


あと、各IPアドレスやドメインの前に、+~の設定をすることができるみたい。
+の場合は省略可能。
特定のIPアドレスやドメインからのメールを確実に拒否したい場合などに使う。
-ip4:x.x.x.xみたいに。

Masaharu HoriMasaharu Hori

_spf.google.comの中身を見てみる。

dig _spf.google.com TXT
;; ANSWER SECTION:
_spf.google.com.	300	IN	TXT	"v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all"
Masaharu HoriMasaharu Hori
dig _netblocks.google.com TXT
;; ANSWER SECTION:
_netblocks.google.com.	300	IN	TXT	"v=spf1 ip4:35.190.247.0/24 ip4:64.233.160.0/19 ip4:66.102.0.0/20 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:74.125.0.0/16 ip4:108.177.8.0/21 ip4:173.194.0.0/16 ip4:209.85.128.0/17 ip4:216.58.192.0/19 ip4:216.239.32.0/19 ~all"
Masaharu HoriMasaharu Hori
dig _netblocks2.google.com TXT
;; ANSWER SECTION:
_netblocks2.google.com.	300	IN	TXT	"v=spf1 ip6:2001:4860:4000::/36 ip6:2404:6800:4000::/36 ip6:2607:f8b0:4000::/36 ip6:2800:3f0:4000::/36 ip6:2a00:1450:4000::/36 ip6:2c0f:fb50:4000::/36 ~all"
Masaharu HoriMasaharu Hori
dig _netblocks3.google.com TXT
;; ANSWER SECTION:
_netblocks3.google.com.	300	IN	TXT	"v=spf1 ip4:172.217.0.0/19 ip4:172.217.32.0/20 ip4:172.217.128.0/19 ip4:172.217.160.0/20 ip4:172.217.192.0/19 ip4:172.253.56.0/21 ip4:172.253.112.0/20 ip4:108.177.96.0/19 ip4:35.191.0.0/16 ip4:130.211.0.0/22 ~all"
Masaharu HoriMasaharu Hori

~allとは?

~all はSPFレコードのソフトフェイル(Softfail)設定を示します。この設定では、SPFレコードに記載されていない送信元IPアドレスからのメールは完全には拒否されず、スパムフォルダに振り分けられたり、疑わしいメールとしてマークされたりします。

Masaharu HoriMasaharu Hori

このポリシーの挙動は、送信者側が指定する感じなのか?
ちょい違和感がある。

Masaharu HoriMasaharu Hori

いいえ、受信側は送信側が指定した ~all(Softfail)の指示に必ずしも従う必要はありません。
受信側には以下のような裁量があります:

  1. SPF検証結果の扱い
    ▪ 送信側の ~all 指定は「推奨」や「ヒント」程度の意味
    ▪ 受信側は独自のポリシーに基づいて判断可能
    ▪ より厳しく(完全拒否)することも、緩く(普通に受信)することも可能

  2. 受信側の判断例
    ▪ スパムフォルダに振り分ける
    ▪ 受信を完全に拒否する
    ▪ スパムスコアの一要素として扱う
    ▪ 警告フラグを付けるだけ
    ▪ 通常のメールとして扱う

  3. 他の要素との組み合わせ
    ▪ SPFは判断材料の1つに過ぎない
    ▪ DKIM、DMARC等の他の認証結果と組み合わせて判断
    ▪ 受信者独自のスパム対策ルールと組み合わせて最終判断

つまり、SPFレコードの ~all は送信側からの提案であり、最終的な判断は受信側のポリシーに委ねられています。

Masaharu HoriMasaharu Hori

Cloudflareの設定画面で、

  • ドメイン:_spf.google.com
  • ポリシー:~all
    を設定した。
Masaharu HoriMasaharu Hori

ちょっと気になったので、他のドメインのSPFを見てみる。

dig cyberagent.co.jp TXT
;; ANSWER SECTION:
cyberagent.co.jp.	300	IN	TXT	"v=spf1 include:_spf.cyberagent.co.jp include:_spf.google.com include:amazonses.com include:_spf.activegate-ss.jp include:spf-bma.mpme.jp include:spf.protection.outlook.com ~all"

(一部抜粋)

Masaharu HoriMasaharu Hori
dig apple.com TXT
;; ANSWER SECTION:
apple.com.		3600	IN	TXT	"v=spf1 include:_spf.apple.com include:_spf-txn.apple.com ~all"

(一部抜粋)

Masaharu HoriMasaharu Hori

Claudeにも聞いてみる。

DKIMは電子メールの認証技術で、以下の特徴があります:

  1. 仕組み
    ▪ メール送信時に電子署名を付加
    ▪ 暗号化された署名(ハッシュ値)をメールヘッダーに追加
    ▪ 受信側がDNSから公開鍵を取得して署名を検証

  2. 主な目的
    ▪ メールの内容が途中で改ざんされていないことを確認
    ▪ 送信ドメインの正当性を証明
    ▪ なりすましメールを防止

  3. 検証内容
    ▪ メールの送信元が正当なものか
    ▪ メール本文が送信後に改ざんされていないか
    ▪ 送信者が主張するドメインの所有者からの正当な送信か

Masaharu HoriMasaharu Hori

SPFとの違いは?

  1. 認証の対象と方法
    ▪ SPF:送信元メールサーバーのIPアドレスを認証
    「このIPアドレスからの送信は許可されているか?」を確認
    DNSで許可されたIPアドレスリストと照合
    ▪ DKIM:メール自体の内容と送信者の認証
    電子署名によってメールの内容を保証
    公開鍵暗号方式で署名を検証
    メール本文の改ざんも検知可能

  2. 転送時の動作
    ▪ SPF:メール転送時に認証が失敗する可能性が高い
    転送すると送信元IPが変わってしまうため
    ▪ DKIM:メール転送後も有効
    署名はメールヘッダーに含まれているため、転送されても署名は維持される

  3. なりすまし対策の観点
    ▪ SPF:送信サーバーの正当性を確認
    許可されたサーバーからの送信かを検証
    ▪ DKIM:送信者の身元とメール内容の完全性を保証
    電子署名により送信者を認証
    メール内容の改ざんも検知

このように、SPFとDKIMは異なる側面からメールの認証を行う補完的な技術となっています。そのため、多くの場合両方を併用することで、より強固なメール認証を実現しています。

Masaharu HoriMasaharu Hori

Googleのヘルプページ (上の投稿のページ) の説明が分かりやすい
どのようなフローで処理されるのか

Masaharu HoriMasaharu Hori

「送信メール ゲートウェイを使用する場合」という記載があるが、今回の場合は使用していなさそうなので、スキップ

Masaharu HoriMasaharu Hori

ヘルプページを参考にGoogle Workspaceの管理画面で値を発行

DNSホストの名前 (TXTレコード名):google._domainkey
TXTレコードの値:v=DKIM1; k=rsa; p=hogefuga

(公開される値なので伏せる必要はないが、長いので省略)

Masaharu HoriMasaharu Hori

構文

(Claude回答を一部編集)

  1. 基本構文
v=DKIM1; k=rsa; p=公開鍵; [オプションのタグ...]
  1. 必須タグ
    • v=DKIM1
      • バージョン指定
      • DKIM バージョン1を示す
      • 現状、バージョン1しか存在しない
    • k=rsa
      • 使用する暗号化アルゴリズム
      • 通常は RSA を使用
      • k=ed25519もあるが、まだ広く採用されていない
    • p=
      • 公開鍵の値
      • Base64エンコードされたRSA公開鍵
      • 鍵を削除する場合は p= と空の値を指定
  2. 主なオプションタグ
    • t=
      • フラグ(テストモード等)を指定
      • t=y:テストモード
      • t=s:サブドメインでのDKIM署名を禁止している
    • n=
      • メモ書き(注釈)
      • 人間が読むための説明文
    • s=
      • サービスタイプ
      • *:全てのサービスタイプ
      • email:メールのみ
  3. 構文ルール
    • セミコロン(;)で区切る
    • スペースは任意
    • タグは「タグ名=値」の形式
    • 大文字小文字は区別しない

その他参考になりそうなリンク

https://salt.iajapan.org/wpmu/anti_spam/admin/tech/explanation/dkim/

Masaharu HoriMasaharu Hori

Cloudflareに設定した
再びGoogle Workspaceの管理画面に戻り、認証を開始ボタンをクリックした

Masaharu HoriMasaharu Hori

「DKIM でメールを認証しています」と表示されている

ちょい時間かかりそう
最大48時間ほどかかるとのこと

他の設定をしながら待つ

Masaharu HoriMasaharu Hori
dig google._domainkey.cyberagent.co.jp TXT
;; ANSWER SECTION:
google._domainkey.cyberagent.co.jp. 300	IN TXT	"v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ZQjDjLh5qZIBSRebPK5zP3E9x8vde0FRSvUMXFN5yMsv9g4UXCBD0ZYEmLwDaNktqb+1WYSoTAMBD+8VFnLAO2KTmTGKoGXBqKeeiDi0d4XZO7z2H+ydRAh3/nAM1XDazlFNIsJqIH6QOR6/" "hvcOLWuNocwPhANG2dHTV7B1Xm55UqkRbXNBV9iz6BZ4Kcy52Q6oL3UfXyL2QoaSfKryVukEx/QtfWo+CngXtGXLwihPyC8DBrly8SoOxtqocet30bE/NYYXIC17854YVzCnDSRLNhLLL0XLOPtEcRj3tZMk5DeAaPC0LjdMmd56J5gh6t/GmexP+akz9/3jtSNcQIDAQAB"

公開鍵が複数ある?

このDNSレコードの見た目上の複数の値は、実際には1つの長い文字列を複数に分割して表示しているだけです。
DNSの仕様では、TXTレコードの1つの文字列は255バイトまでという制限があります。そのため、255バイトを超える長い文字列の場合、複数の文字列に分割して格納されます:

TXTレコードの仕様上、分割しているらしい。

Masaharu HoriMasaharu Hori

AppleのDKIMを見たいが、プレフィックス (googleの部分) が分からない

Masaharu HoriMasaharu Hori

Appleから受信したメールがあったので、それで確認した
ドメインはemail.apple.comだった
プレフィックスはemail0517だった

0517はなんの番号なんだろう??

Masaharu HoriMasaharu Hori
dig email0517._domainkey.email.apple.com TXT
;; ANSWER SECTION:
email0517._domainkey.email.apple.com. 30756 IN TXT "v=DKIM1; k=rsa; h=sha256; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy4V3QZgjpUK3HSijzU+u" "GQlfBx8N40Ese/TaM0P8BES/kTKJS7OvtEfmA+ihMYcwh+vpvjK7aBIpV2CT49Qn" "C/lXm8KwXad64VF18pgaCiuOW4rxC2L687Gn2BHEekcbl5FozRa716DLXpo07j5I" "X5sdvKPi6KylnmyOmjD/NqfvbLZf/lRlTb9pXf1N3fLu+W25vaotR4ZQpbrMQkKI" "ANDafdL4KvPmfFOfYuZYiLpQfHfuJYok0aROsS5as1cEthN9MnkdSBAJHLG/f63+" "jNLgSC9x77YBWH2gPIDIqEanPVPFPJjs0yNh1zCWJUma9ihNXNwBP9GDclt042th" "AwIDAQAB"
Masaharu HoriMasaharu Hori

DMARCとは
DMARC(Domain-based Message Authentication, Reporting & Conformance)は、メール詐欺攻撃から保護するための送信ドメイン認証技術です。SPFとDKIMを基にしており、メールに表示される送信元ドメインが信頼できるものかどうかを判断できます。

https://www.future.ad.jp/futuremedia/other_gmailguideline2024/

Masaharu HoriMasaharu Hori
  1. 基本概念
    ▪ Domain-based Message Authentication, Reporting & Conformance の略
    ▪ SPFとDKIMの認証結果を統合的に評価するフレームワーク
    ▪ メール受信者に具体的な対処方法を指示できる

  2. 主な機能
    ▪ 認証ポリシーの設定
    none (p=none): 何もしない
    quarantine (p=quarantine): 疑わしいメールを隔離
    reject (p=reject): 認証失敗したメールを拒否
    ▪ 認証結果のレポート受信
    送信ドメインの管理者が認証状況を把握可能
    なりすましメールの検出と対策に活用

  3. SPF・DKIMとの関係
    ▪ SPFとDKIMの両方または一方の認証結果を利用
    ▪ より包括的なメール認証を実現
    ▪ 認証失敗時の具体的な対応方法を指定

  4. メリット
    ▪ なりすましメール対策の強化
    ▪ メール配信の透明性向上
    ▪ 送信ドメインの評判管理
    ▪ 不正利用の早期発見

DMARCは、SPFとDKIMを補完し、より強固なメール認証システムを実現する重要な技術として位置づけられています。

Masaharu HoriMasaharu Hori

SPFやDKIMの認証に失敗した際に、どのような対応を行うのかを指定するものかな

Masaharu HoriMasaharu Hori

DMARCのポリシーは、SPFのポリシー同様、推奨値であり、受信者側が必ずしも従うわけではない。

Masaharu HoriMasaharu Hori

48時間空けた方がいいと書いてあったので、何日か空けてみた

DMARC を有効にする前に SPF と DKIM を設定していない場合、ドメインから送信されたメールの配信に問題が発生する可能性があります。
SPF と DKIM を設定してから DMARC を設定するまでに、48 時間の間隔を空けてください。

Masaharu HoriMasaharu Hori

構文ついて、Claudeに聞いた

  1. 基本フォーマット
    v=DMARC1; p=policy; [追加のタグ]

  2. 必須タグ
    • v: バージョン(必ず"DMARC1")
    • p: ポリシー(none, quarantine, reject のいずれか)

  3. 主な任意タグ
    • rua: 集計レポートの送信先メールアドレス
    • ruf: 失敗レポートの送信先メールアドレス
    • pct: ポリシーを適用するメールの割合(0-100)
    • sp: サブドメインに対するポリシー
    • aspf: SPFのアライメントモード(r/s)
    • adkim: DKIMのアライメントモード(r/s)
    • fo: 失敗レポートの生成オプション
    • ri: レポート間隔(秒単位)

Masaharu HoriMasaharu Hori

レポートの送信先としてメールアドレスを指定できるけど、メールの中身を毎回チェックするのはしんどい

DMARC Managementというのがあるみたい
メールを解析して、ダッシュボードで確認できるようにしてくれる
https://blog.cloudflare.com/ja-jp/dmarc-management/

ネームサーバとしてCloudflareを使用しているので、これを利用するることにしよう

Masaharu HoriMasaharu Hori

DMARC Managementの設定をすると、DMARCのレコードも生成される

設定を完了すると、以下のTXTレコードが追加された

v=DMARC1; p=none; rua=mailto:hogefuga@dmarc-reports.cloudflare.net

(公開される値だから伏せる必要はないけど、ボットとかにクロールされると迷惑なので一応)
(Cloudflare側で、スパムメールは解析不可として弾いてくれるとは思うけど、、)

Masaharu HoriMasaharu Hori

休み明けしばらくダッシュボードをチェックして、問題がなさそうだったらquarantineに移行しようかな

Masaharu HoriMasaharu Hori
dig _dmarc.cyberagent.co.jp TXT
_dmarc.cyberagent.co.jp. 300	IN	TXT	"v=DMARC1;p=none;rua=mailto:dmarc-reports@m.cyberagent.co.jp;"
Masaharu HoriMasaharu Hori
dig _dmarc.email.apple.com TXT
_dmarc.email.apple.com.	2213	IN	TXT	"v=DMARC1; p=reject; rua=mailto:d@rua.agari.com; ruf=mailto:d@ruf.agari.com;"
Masaharu HoriMasaharu Hori

DMARCの設定終了!

にしても、Google WorkspaceのDKIMのステータスが「DKIM でメールを認証しています」のままだな、、
メールの送受信と認証はできてそうだし、一旦経過観察

Masaharu HoriMasaharu Hori

今回の話とは関係ないけど、BIMI (Brand Indicators for Message Identification) というものがあるみたい。
これは、メールの受信ボックスで会社等のロゴを表示するための仕組み。
https://support.google.com/a/answer/10911320

ただ、ロゴが商標登録されている必要があるなど、対応が大変そう。
対応は見送り。

このスクラップは2025/01/02にクローズされました