webサイト制作、便利アプリ、Apple製品について考えるブログ

DNSのSPFレコードを概念で理解する。【なりすまし防止】【自動送信メールが届かない対応】

2022年12月25日 2023年01月06日

最近仕事で、DNSのSPFレコード云々って話が出てきたので備忘でまとめておきます。

このあたりの話って、自分はweb制作会社のプロデューサーではあるのだけど、「は?」みたいな難しさがある。

webサイトを持っているお客さんは、そんなことお構いなしで「プロですよね?」みたいな雰囲気で聞いてこられますし。

それに対して「わからん」とも言えないので、その都度調べたり、エンジニアに聞いたりして回答しています。

あくまで自分の理解のためにまとめているものですので、間違っていることを書いている可能性もありますのでご了承ください。

SPFレコードは、TXTレコードに指定可能な「内容」の1つ。

SPFレコードって何?という話になるわけですが、端的に言うと

SPFレコードは、TXTレコードに指定可能な「内容」の1つです。

まず、ここが分かりにくい。SPFレコードっていうものがAレコードやTXTレコードと同列にあるわけではなく、SPFレコードは、TXTレコードの中で指定可能な「要素」にすぎません。

SPFレコードは、DNSで設定するドメインからのメールのなりすましを防ぐ防御策として有効。

では、そのTXTレコードの要素として設定可能なSPFレコードを定義しておくことでどのような良いことがあるのか?

その設定をしておくことで「DNSで設定するドメインからのメールのなりすましを防ぐ防御策」になります。

しかし、web制作会社の身で、自分が相談されることが多いのは、

「なりすましメールが送信された」

ということよりも・・・・

「システムからのメールが受信できない。それはSPFレコードが設定されていないからではないか?確認して欲しい。」

ってことの方が多いです。今のところ。

SPFレコードを指定すべき場面は?システムからの自動送信メールは意識すべき。

個人のメール送信、会社の日常業務で使うメール送信であれば、意識する必要はないと思います。

SPFレコードを指定すべきは、上で記載した

システムが自動送信するメールが受信者に届かない

というシチュエーションです。

具体的には、

  • お問い合わせフォームからの自動返信メール
  • CMS管理画面から送信されるリソース状況報告の自動送信メール

といったものです。

※実業務でも「設定しておいた方が良さげ」ってことが実際ありました。

SPFレコードでは送信側のドメイン、IPアドレスを設定します。

では、SPFレコードを設定しましょう、となった場合ですが、それはどこで設定すべきなのでしょうか?

例を挙げると、

「うちの問い合わせフォームの受付完了メールが、問い合わせした人に届かないみたいだから確認して」

ということが、お客さんから飛んでくることがあり得ます。

このとき、メールが「受信できない」ことが問題なのであれば、「受信側に問題がある」ので受信側のドメインを管理しているDNSって思いがちです。

しかし、そうではありません。

SPFレコードを設定すべきは送信側ドメインについてです。

CMSやお問い合わせフォームからの自動送信メールが届かない、ということであれば、メールを送っている側のドメインについてDNSにSPFレコードを指定する必要があります。

SPFレコードを設定しているものは何?

では、

  • SPFレコードで設定しているものはそもそも何?
  • SPFレコードを設定でなりすましメールを防げる理由、自動送信メールを受信できないことがある理由は?

という疑問について、回答していきたいと思います。

具体的な記述例

具体的な記述例としては、以下のような感じです。

example.jp. IN TXT "v=spf1 +ip4:192.168.100.0/24 ~all"

これが意味するところとしては・・・・

@example.jpというメールアドレスを送信元としてメールを送る際、 そのサーバが「192.168.100.0」というIPアドレスを持っていれば、それは正当な「正当なメールサーバー」ですよ。

ということです。

SPFレコードを設定でなりすましメールを防げる理由、自動送信メールを受信できないことがある理由は?

では、SPFレコードを設定でなりすましメールを防げる理由は何でしょうか?

それは、この情報などのような手順で確認されるかを追っていくと分かりやすいかもしれません。

システムがメールを送信すると、以下のような手順でメールが受信者に届きます。

  1. システムがメールを送信する。
  2. 送信サーバでメールを解析し、受信サーバにメールを送る。
  3. 受信サーバが受け取ったメールを解析し、DNSサーバに、このメールを送信しているメールサーバが正当なサーバかどうかを問い合わせる。
  4. DNSサーバが、TXTレコードのSPFレコードを回答する。
  5. 受信サーバ側で、受け取ったSPFレコードに記載のIPアドレスと、受信したメールのヘッダ情報に記載のメールを送信元IPアドレスが一致するかどうかを認証する。
  6. 認証の結果、IPアドレスが一致すれば正当なメールとして受信サーバが受け取り、受信者がメールとして受け取れるように処理する。

多分こんな流れ。

つまり、正当なメールの送信サーバの所在を確認することができるわけで、正当なメール送信システムではないサーバからのメール送信を受け付けない仕組みなわけです。

上記のようなことを実現できることから、DNSに送信側ドメインのSPFレコードを設定することで悪意のあるなりすましメールを防ぐことができるわけです。

また、システムからの自動送信メールについても、メール受信サーバ側のセキュリティレベルが高いと、「DNSのSPFレコードを確認し、IPアドレスが一致しないとメール送らない」ということになっているとメールが受信できない、ということが起こり得るわけですね。

理解としてはこんな感じ。DNSって直感理解が難しいよね。

一応、レンタルサーバ会社やメールサービスを展開する会社の記事などを参考に理解をまとめた感じです。概ね間違ったことは書いてないつもりですが、「何いってんの?違うよ。」みたいなことがあればご指摘いただけると幸いです。

まぁ、DNSに絡むことって、なんか分かりにくいですよね。

郵便局とかに例えると理解しやすいと言われますが、こういう細かい設定の話になってくるとこんがらかってきます。

ただ、この業界にいる以上、せめて概念としては理解しておきたいな、って思っています。