メールを送信しないドメインにSPF/DKIM/DMARCを設定して迷惑メール被害を避ける

メールを送信しないドメインにSPF/DKIM/DMARCを設定して迷惑メール被害を避ける
GoogleのDNS設定を見てみる

独自ドメインを持っているが、メールには使っていないという状況はよくあるはずです。

しかし、メールに使っていないドメインでも、メールの仕組み上、そのドメインを騙ってメールを送信されるリスクが存在します。

悪意ある第三者がドメインを詐称して迷惑メールやフィッシングメールを送信することで、ドメイン所有者が加害者であるかのように見せかけることが可能です。

結果として、ドメインの評判が傷つき、将来メールを使いたくなったときに正常に送信できなくなったり、最悪の場合ブラックリストに登録されたりする可能性があります。

被害を防ぐには、メールを送信しないドメインでも適切なセキュリティ設定が必要です。

本記事では、メール送信に使わないドメインでも設定しておくべき迷惑メール対策について解説します。

TL;DR

メール送受信に使わないドメインには、以下の3つのDNS TXTレコードを設定しましょう。

レコード名 タイプ
(空) TXT v=spf1 -all
_dmarc TXT v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s;
*._domainkey TXT v=DKIM1; p=

また、不要なMXレコードがあれば削除しておくのがベターです。

なりすましメールの仕組み

2種類の「送信者アドレス」

電子メールには、エンベロープFromヘッダーFromという2つの送信者アドレスが存在します。

  • エンベロープFromは、SMTP通信時に「MAIL FROM」コマンドで指定される送信元アドレスです。メールサーバ間の配送時に使われ、エラー通知の返送先となりますが、通常のメールクライアントには表示されません。技術的には「Return-Path」ヘッダとして記録されます。
  • ヘッダーFromは、メールのヘッダ部分に含まれる「From:」フィールドのアドレスです。メールクライアントが「差出人」として表示するのはヘッダーFromであり、受信者が実際に目にする送信者情報です。エンベロープFromとは独立して設定できるため、両者が異なることもあります。

なりすましメールは、エンベロープFromとヘッダーFromの両方を不正に詐称することで成立します。

どうやって防ぐのか?

なりすましメールを防ぐには、「このドメインからメールが送られることはない」とインターネット上で宣言する必要があります。

この宣言に使われるのが、SPF、DKIM、DMARCという3つの技術です。

複雑に見えますが、目的はシンプルです。

「あなたのドメインを騙ったメールが届いたら、偽物だと受信側に判断させる」

それだけです。

具体的には、DNSレコードに「このドメインからは一切メールを送りません」と登録することで、受信サーバがなりすましメールを自動的に拒否できるようになります。

以下、各技術を見ていきましょう。

3つの対策技術

SPF(送信サーバを制限する)

SPFは、ドメインのDNSにTXTレコードを追加して「許可する送信サーバ」を宣言します。

メールを送信しないドメインの場合、「どのサーバからも送信しない」と宣言します。

v=spf1 -all

-all は「すべて拒否」を意味し、対象ドメインからの正当なメールは存在しないことを示します。

DKIM(電子署名で真正性を担保する)

DKIM(DomainKeys Identified Mail) は、メールに電子署名を付与し、DNSに登録した公開鍵で検証する仕組みです。

メールを送信しないドメインでは、「有効な公開鍵は存在しない」ことを示すために空の公開鍵を登録します。

v=DKIM1; p=

p= の値が空であることで、「対象ドメインの署名付きメールは存在しない」と宣言できます。

すべてのサブドメインに適用するため、ワイルドカード *._domainkey を使います。

DMARC(なりすましメールの処理を指示する)

DMARC(Domain-based Message Authentication, Reporting and Conformance) は、SPFやDKIMの検証に失敗したメールをどう扱うか、ドメイン所有者が指示できる仕組みです。

メールを送信しないドメインでは、すべて拒否(reject)を指定します。

v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s;
タグ 意味
p=reject ドメインルートのポリシーを拒否に設定
sp=reject サブドメインのポリシーを拒否に設定
adkim=s DKIM検証をstrict(厳格)モードに設定
aspf=s SPF検証をstrictモードに設定

オプションで rua=[<mailto:your@email.com>](<mailto:your@email.com>); を追加すると、なりすましが検出された際にレポートを受け取れます。

Cloudflare DNSを使っている場合

Cloudflare DNSを使っている場合、MXレコードが未設定のドメインでは管理画面に「Email Security」の通知が表示されます。

通知画面からワンクリックで必要なレコードを追加できるので、手動で設定する必要がありません。

設定の確認方法

設定が正しく反映されているかは、以下の方法で確認できます。

コマンドラインで確認

# SPFの確認
dig TXT [example.com](<http://example.com>)

# DKIMの確認
dig TXT *._[domainkey.example.com](<http://domainkey.example.com>)

# DMARCの確認
dig TXT _[dmarc.example.com](<http://dmarc.example.com>)

オンラインツールで確認

dmarcian.com などのサービスを使えば、ドメイン名を入力するだけで一括チェックできます。

Mandated NL-Block - dmarcian
dmarcian

まとめ

メールを送信しないドメインであっても、なりすましのリスクは存在します。

以下の3つのDNSレコードを設定することで、ドメインを適切に保護できます。

  1. SPFv=spf1 -all を設定し、すべてのサーバからの送信を拒否
  2. DKIMv=DKIM1; p= を設定し、有効な署名が存在しないことを明示
  3. DMARCv=DMARC1; p=reject; ... を設定し、なりすましメールの拒否を指示

設定は数分で完了します。独自ドメインをお持ちの方は、早めに確認されることをお勧めします。

参考資料

Email sender guidelines - Google Workspace Admin Help
The guidelines in this article can help you successfully send and deliver email to personal Gmail accounts. Starting in 2024, email senders must meet the requirements described here to send email to G

メール送信者のガイドライン

メールを送信しないドメインを保護する方法|Cloudflare

Read more

Boids

群れに指揮者はいない 鳥の群れは、誰かが指示を出しているわけではない。魚の群れも同じ。それぞれが周囲を見て、少しだけ動く。その繰り返しが、全体として秩序ある動きを生む。 これを1986年にCraig Reynoldsがコードで再現した。名前は Boids(bird + oid)。個体に与えるルールは3つだけ。 1. Separation ── 近すぎたら離れる 2. Alignment ── 周囲と同じ方向を向く 3. Cohesion ── 群れの中心に寄る これだけで、群れは群れらしく動く。 なぜ作ったか 群れの動きは、見ていて飽きない。 * 単純なルールから複雑な動きが生まれる ── 創発(emergence)の典型例。設計していないのに、設計したかのように見える。 * 自分のブログに置きたかった ── 静的なページに、動くものがあると空気が変わる。 * Web Components で作りたかった ── どこにでも持っていける部品として。 設計の話 見えないときは止める 画面外でアニメーションを回し続けるのは無駄。Inte

By Sakashita Yasunobu

Days Elapsed

一年を「面」で見る 一年は365日。数字で見ると多いけど、並べてみると案外少ない。 12ヶ月を並べて、過去を塗りつぶして、今日を光らせる。それだけのカレンダーを作った。進捗バーが「一次元」なら、これは「二次元」の進捗表示。 Year Progress一年は50週ちょっとしかない 2026年を週で数えると、52週とちょっと。 カレンダーで見ると長そうなのに、週で数えると急に短くなる。そんな感覚を形にしたくて、このページの上の方に進捗バーを置いた。 やっていることは単純で、「今年が何%進んだか」をリアルタイムで表示しているだけ。 なぜ作ったか 理由は3つある。 1. 時間を「量」として見たかった ── イベントや予定ではなく、単純に「どれだけ経ったか」を数値で見たかった。 2. 目に見える形にしたかった ── 抽象的な「一年」を、動く数字に落とすとどう感じるか試したかった。 3. 自分の場所に置きたかった ── 誰かのツールを借りるのではなく、自分のブログに自分で作ったものを置きたかった。 実装の話 せっかく作るなら、

By Sakashita Yasunobu

Year Progress

一年は50週ちょっとしかない 一年を週で数えると、52週とちょっと。 カレンダーで見ると長そうなのに、週で数えると急に短くなる。そんな感覚を形にしたくて、このページの上の方に進捗バーを置いた。 やっていることは単純で、「今年が何%進んだか」をリアルタイムで表示しているだけ。 なぜ作ったか 理由は3つある。 1. 時間を「量」として見たかった ── イベントや予定ではなく、単純に「どれだけ経ったか」を数値で見たかった。 2. 目に見える形にしたかった ── 抽象的な「一年」を、動く数字に落とすとどう感じるか試したかった。 3. 自分の場所に置きたかった ── 誰かのツールを借りるのではなく、自分のブログに自分で作ったものを置きたかった。 実装の話 せっかく作るなら、それなりに丁寧にやりたかった。 * Web Components で実装。ブログのCSSやDOMを汚さず、どこにでも持っていける。 * requestAnimationFrame で描画。固定間隔のタイマーではなく、画面更新に同期させることで滑らかさとリソース効率を両立。 *

By Sakashita Yasunobu