🔍

digでTXTを引いたらDMARCとDKIMが丸ごと抜けていた

に公開

自分のドメインに .htaccess でリダイレクトを1行足す作業をする前に、壊してはいけないレコードを把握しようとして dig を打ちました。

dig example.com TXT +short

返ってきたのは SPF と site verification の2本。「TXT は2本。メール系は SPF だけ気をつければいい」と判断しました。

実際は TXT が10本ありました。

見えていた SPF 1本 + verification 1本 = 2本
実際 10本(SPF 4・DKIM 4・DMARC 1・verification 1)

なぜ返らなかったのか

dig は正しく動いています。聞いた名前に、正しく答えていました。

dig example.com TXT が返すのは example.com という名前に付いている TXT だけです。そして DMARC と DKIM は、別の名前に置かれています。

レコード 置かれている名前
SPF example.com(そのまま)
DMARC _dmarc.example.com
DKIM <selector>._domainkey.example.com

抜けていたのは _dmarc と default._domainkey、それにサブドメイン3つ分の DKIM でした。

「見えなかった」のではなく、見ていない名前があったというのが正確なところです。

個別に引くこともできる

名前が分かっていれば、それぞれ引けます。

dig _dmarc.example.com TXT +short
dig default._domainkey.example.com TXT +short

ただし DKIM のセレクタ名は総当たりできません。default 以外にもサービスごとに独自のセレクタが使われるので、名前を知らないと引きようがない。

ゾーン全体を取得する AXFR という仕組みもありますが、これは通常拒否されます(誰でもゾーン情報を丸ごと取れてしまうため)。

結局、全体を見るには DNS の管理画面かゾーンファイルを開くしかありませんでした。

半分以下しか把握できていなかった

管理画面を開いたら、レコードは全部で 37本ありました。

A 16本 / MX 8本 / TXT 10本 / NS 3本

dig から組み立てた把握は十数本だったので、半分以下です。

何が危なかったか

メール系が SPF・DKIM・DMARC の3点セットで4ドメイン分組んでありました。それを「SPF だけ気をつければいい」という理解で触るところだったわけです。

特に DMARC は、消えてもすぐには気づけません。rua=mailto: で自分宛にレポートが飛ぶ設定になっているので、届かなくなったことに気づくまで時間がかかります。SPF が壊れればメールが弾かれてすぐ分かりますが、DMARC はそうならない。

名前を1つ指定した時点で、全体を見たことにはならない

dig を打った目的は「壊してはいけないものを把握する」ことでした。範囲を確認する作業だったのに、その作業自体で範囲を狭く取っていたことになります。

コマンドは正しく、出力も正しく、ただ問いが狭かった。ここが自分にとっては引っかかりどころでした。確認のコマンドを打つときは、それが何を返さないかのほうを先に見ておくと安全そうです。

GitHubで編集を提案

Discussion