この記事は「エンジニアのための メール送信・運用ノウハウ、メールのセキュリティやAI活用を投稿しよう!by blastengine Advent Calendar 2026」の2日目の記事です。
正直に書きます。このカレンダーを開いた理由は、プレゼントのiPad miniです。
募集テーマは、メール送信に携わった体験談やノウハウ。応募しようと決めてから気づきました。メールまわりの体験が、自分にはひとつもありません。送信機能を実装したこともなければ、SPFで悩んだこともない。
どうしたものかと思案していると、ある言葉が頭に浮かびました。
「パンがなければ、お菓子を食べればいいじゃない」
マリー・アントワネットの台詞として有名ですが、もとをたどると、ルソーが1760年代に書いた自伝『告白』に出てきます。名前の伏せられた「さる高貴な女性」の言葉として。しかも原文では、お菓子ではなくブリオッシュです。
それはさておき。
そうです。
体験がなければ、今日つくればいいのです。
題材は、個人開発で使っている after6labo.com です。引きこもり気質なので、このドメインからはメールを1通も送っていません。今後も送る予定はありません。
ところが、本人が引きこもっていても、ドメインは勝手に外へ連れ出されることがあります。なりすましメールの差出人として。調べてみると、それを止める設定は何も入っていませんでした。
結論:DNSにTXTを2件足しただけ
やったことは、DNSにTXTレコードを2件追加しただけです。
after6labo.com. TXT "v=spf1 -all"
_dmarc.after6labo.com. TXT "v=DMARC1; p=reject; sp=reject"
これで、ルートドメインと、外部ホスティングにCNAMEで向けている4つのサブドメインをまとめて、「このドメインからの正規のメールは存在しない」と宣言しました。サブドメイン側のDNSには触っていません。
反映待ち(TTL 1時間)を含めても、作業はその日のうちに終わりました。
送らないドメインでも、差出人には使われうる
メールの差出人(ヘッダーFrom)は、送る側が自由に書けます。受信側が「本当にそのドメインから来たのか」を判断する手がかりが、SPF・DKIM・DMARCです。
- SPF:そのドメインを封筒の差出人(MAIL FROM)に使ってよい送信サーバーを公開する
- DKIM:送信側がメールに署名し、検証用の公開鍵をDNSに置く
- DMARC:ヘッダーFromのドメインとSPF・DKIMの結果を突き合わせ、失敗したときの扱いを受信側に伝える
何も公開していないドメインは、受信側にとって判断材料がありません。扱いは受信側任せになります。
メールを送らないドメインなら、対策はいちばん簡単です。「送らない」と宣言すればいい。
設定前:何も入っていなかった
2026年10月31日に調べた、設定前の状態です。
| 項目 | 設定前 |
|---|---|
| SPF | なし(TXTはGoogleのサイト確認用の1件だけ) |
| DMARC | なし(_dmarc.after6labo.com が存在しない) |
| MX | なし |
| DKIM | よく使われるセレクタ名をいくつか引いたが、見つからない |
| サブドメイン | chaos / gift / tools / street の4つ。すべて外部ホスティングへのCNAME |
| このドメインで送っているサービス | なし(作った覚えがない) |
確認には、次のような問い合わせを使いました。
dig +short TXT after6labo.com
dig +short TXT _dmarc.after6labo.com
dig +short MX after6labo.com
dig +short CNAME chaos.after6labo.com
DKIMは、セレクタ名を知らないと引けません。「送っていない」は、DNSの状態と自分の把握を合わせた判断です。
迷ったところ
人生の迷いはDNSでは解決しないので、ここでは設定で迷った3点だけ書きます。
1. SPFの -all だけでは、差出人を守れない
SPFが確かめるのは封筒の差出人(MAIL FROM)で、受信者が目にするヘッダーFromではありません。なりすます側は、封筒に自分のドメインを使えばSPFをpassできます。
ヘッダーFromと結び付けて判定するのはDMARCです。SPFかDKIMのどちらかが、ヘッダーFromと揃ったドメインでpassしなければ、DMARCは失敗します。だからSPFとDMARCをセットにしました。
2. サブドメインにはSPFを置けない
chaos / gift / tools / street は、すべてCNAMEです。DNSの決まりで、CNAMEを置いた名前には、TXTを含むほかのレコードを同居させられません。サブドメインごとにSPFを足す方法は使えませんでした。
そこで、親ドメインのDMARCに sp=reject を付けました。受信側は、ヘッダーFromのドメインにDMARCレコードがなければ、組織ドメイン(ここでは after6labo.com)の _dmarc を見にいきます。そのとき、サブドメインには sp= の方針が適用されます。
サブドメインにはSPFもDKIMもないので、なりすましメールはDMARCで失敗し、sp=reject の対象になります。
調べていて気づいたことがひとつあります。CNAMEを向けたサブドメインのSPFは、実質的に向け先が決めます。TXTの問い合わせはCNAMEをたどるので、向け先のホスト名にSPFが公開されれば、それがサブドメインの結果になります。今は向け先にSPFがないので、結果は none です。
3. レポートの送り先(rua)は付けなかった
DMARCには、集計レポートの送り先 rua= を指定できます。付けたかったのですが、手元にあるのはGmailのアドレスだけです。
送り先が別ドメインの場合、受け取る側のドメインが「このドメインのレポートを受け取る」という許可レコードを公開している必要があります(RFC 7489 7.1)。gmail.com のDNSは自分では触れません。付けても届かない見込みなので、今回は外しました。
ヌルMX(RFC 7505)も候補でしたが、必須ではないので見送りました。
設定した内容
DNSは、ドメイン管理サービスのDNSで管理しています。追加したのは次の2件です。
| ホスト | 種別 | 値 | 意味 |
|---|---|---|---|
| after6labo.com | TXT | v=spf1 -all |
このドメインを封筒の差出人に使ってよい送信サーバーはない |
| _dmarc.after6labo.com | TXT | v=DMARC1; p=reject; sp=reject |
認証に失敗したメールの拒否を求める。サブドメインも同じ |
- Googleのサイト確認用のTXTは残しました。SPFは別のTXTとして追加します。
- SPFのレコードは1ドメインに1件までです。2件あると、SPFの評価がエラーになります(RFC 7208 3.2)。
-
p=rejectは受信側への要求です。実際にどう扱うかは、受信側が決めます。
設定後:2件とも返ってきた
TTLは1時間です。追加から1時間ほど待って、Google Public DNSで引き直しました。
| 問い合わせ | 返ってきた値 |
|---|---|
| after6labo.com TXT | Googleのサイト確認用(値は省略)、v=spf1 -all
|
| _dmarc.after6labo.com TXT | v=DMARC1; p=reject; sp=reject |
| _dmarc.chaos.after6labo.com TXT | 存在しない(NXDOMAIN) |
| chaos.after6labo.com | CNAMEのまま(変更なし) |
3行目が、この構成の要です。サブドメイン側にDMARCレコードがないので、親ドメインの sp=reject が使われます。サブドメインのCNAMEには触れずに、4つまとめて守れました。
手元で確かめるなら、dig で同じ内容を引けます。
dig +short TXT after6labo.com
dig +short TXT _dmarc.after6labo.com
dig TXT _dmarc.chaos.after6labo.com | grep status
これからメールを送りたくなったら
将来、どこかのサイトに通知メールを付けたくなったら、順番を間違えると自分のメールが拒否されます。今の設定は「正規のメールは存在しない」という宣言だからです。
- 送信に使うサービスを決める
- SPFに、そのサービスの送信サーバーを加える
- DKIMの公開鍵をDNSに置く
- テスト送信で、SPFかDKIMがヘッダーFromと揃ってpassすることを確かめる
- それから本番の送信を始める
サブドメインから送る場合、CNAMEを置いた名前そのものにはSPFのTXTを置けません。DKIMで揃えるか、送信専用のサブドメインを別に用意することになります。
この記事で確かめていないこと
- なりすましメールを実際に送って、拒否されるかは試していません。確認したのはDNSの公開内容までです。
- 受信側の扱いはサービスごとに異なります。
p=rejectを公開しても、必ず拒否されるとは限りません。 - DKIMはセレクタ名を総当たりできないので、「送っていない」はDNSと自分の把握に基づく判断です。
まとめ
- メールを送らないドメインは、「送らない」と宣言するのがいちばん安い対策です。TXT 2件で済みました。
- SPFだけではヘッダーFromを守れません。DMARCとセットにします。
- CNAMEで外部に向けたサブドメインは、親ドメインのDMARCの
sp=でまとめて守れます。ただし、そのSPFは向け先次第です。
メールの体験談がなかった自分にも、今日ひとつできました。DNSの反映待ちは1時間。iPad miniの結果発表は1月23日なので、TTLよりだいぶ長く待つことになりそうです。
選ばれなかったときは、選考を担当された方に、さる高貴な女性の役でひと言お願いできれば本望です。
「iPad miniがなければ、ブリオッシュを食べればいいじゃない」