送信ドメインを認証するためのSPFレコードに詳しくなろう
- 2022年12月20日
- by SendGrid
- Category: ベストプラクティス 技術ネタ
この記事は Sender Policy Framework (SPF): A Layer of Protection in Email Infrastructure の抄訳です。
友人があなたのスマホを取り上げて、勝手にSMSを送信してしまったら?困りますよね。1度そんなことが起きると、受信者は本当にあなたから送られたSMSなのかずっと疑うようになるでしょう。信頼関係は壊れてしまうかもしれません。
これはEメールの世界でも同じです。恐ろしいことに、フィッシング詐欺師はユーザ名とパスワードが無くてもあなたになりすましてビジネスメールを送信できてしまいます。
でも安心してください。あなたのブランドとメールのレピュテーションを守ってくれる、Sender Policy Framework(SPF)という仕組みがあります。
Twilio SendGridなど多くのメール配信サービスでは、サーバからサーバへメールを送る際にSimple Mail Transfer Protocol (SMTP)というプロトコルを使用しています。
SMTPのセキュリティ上の弱点として、誰でも任意のドメインの差出人になりすますことができる、というものがあります(ドナルド・トランプ氏のTwitterアカウントが大量に作成されるようなものです)。 そのため受信者には、本当にその差出人からメールが送信されたかどうか分かりません。
受信者はメールを信頼できなくなり、送信者は自分のブランドになりすまされているのではないかと不安にかられる…これは誰にとっても良いことではありません! こんな時、DNSのTXTレコードに登録されているSPFレコードが解決策の一端を担います。この記事では、SPFの概要からチェック方法まで、すべてを網羅して説明します。
SPFレコードとは?
SPFとは、メールの送信ドメイン認証のひとつで、メールが正規のサーバ(=そのドメインからの送信が許可されているサーバ)から送信されているのかどうかを判断するのに有効です。SPFがあれば、ISPはあなたのドメインを利用した悪意のあるメールを判断できます。
SPFを使用すれば、受信者は期待通りの相手からメールが送られたと確信が持てますし、送信者はなりすましやブランド名を騙ったフィッシングメールが送信されないことを知って安心できます。
技術的にいうと、SPFレコードとはドメインの管理者が作成する短いテキストデータです。このTXTレコードは、他のレコード(A、PTR、MXなど)と一緒に、DNS (domain name system) へ登録します。たとえば次のようなものです。
"v=spf1 ip4:12.34.56.78 include:example.com -all"
SPFの仕組み
SPFレコードを見れば、そのドメインからメール送信を許可されているのはどういったサーバなのか分かります。
通常、SPFレコードは、SMTPの一連の通信手順のうち、メール本文が送信される前の段階で問い合わせられます。
メッセージを送信するために、まずは送信サーバと受信サーバの間でTCPコネクションが開かれます。コネクションが確立したのち、HELOコマンドによってメールの送信元ドメインを受信サーバに伝えます。 次に、MAIL FROMコマンドによって送信元メールアドレスを伝えます。 MAIL FROMコマンドで入力されたドメインがSPFレコードのチェックに使用されるドメインで、メールのエンベロープFromとReturn-Pathヘッダに設定されます。
たとえばMAIL FROMコマンドにおいて、luke@example.comが入力されたとします。 受信サーバは、example.comのパブリックDNSレコード群のうち”v=spf1″で始まるTXTレコード、すなわちSPFレコードを確認します。SPFレコードがなければ認証は通り、複数あればエラーになるでしょう。SPFレコードが一つだけならば、受信サーバはそれに従って、送信サーバのIPアドレスを認証するかどうか判断します。
1件のSPFレコードが見つかったと仮定し、前述の例で説明します。
"v=spf1 ip4:12.34.56.78 include:example.com -all"
受信サーバは、送信サーバのIPアドレスがSPFレコードに含まれているかどうかをチェックします。 IPアドレスが含まれていればSPF認証は通ります。
SPFレコードを形作るもの
SPFレコードは様々な機構(mechanism)の組み合わせによって出来ています。各機構は、左側に書かれているものから順番に評価されます。
include
include機構は、ドメイン名を引数とします。
include先ドメインのSPFレコードで認証処理が通るならば、認証を通します。include先でさらにinclude機構があった場合は、再帰的に評価します。
A
a機構は、ドメイン名を引数とします。
送信サーバのIPアドレスが、与えられたドメインのAレコードもしくはAAAAレコードで解決されるならば、認証を通します。
MX
mx機構は、ドメイン名を引数とします。
送信サーバのIPアドレスが、与えられたドメインのMXレコードで解決されるならば、認証を通します。
IP4、IP6
IP4機構とIP6機構は、IPアドレスを引数とします。
CIDR記法によるブロック指定(例 192.168.0.0/16)も可能です。送信サーバのIPアドレスが、与えられたIPアドレスに含まれるならば、認証を通します。
PTR
ptr機構は使わないようにしましょう。
いくつかの技術的な理由によりエラーとなってしまう場合があり、名前解決のために受信サーバのメモリと帯域を多く消費します。受信サーバによっては、ptr機構が含まれているだけで、認証を弾いてしまう場合もあります。
ALL
all機構は、引数を取らず常に認証を通します。
SPFレコードの末尾で使うのが一般的です。たとえば認証結果を失敗にする検証子(qualifier)と組みあわせた「-all」は、「これまでの機構によって認証が通らなかったIPアドレスは、全て認証失敗する」ことを意味します。
REDIRECT
redirectは、正確には機構ではなく変更子(modifier)です。
redirect先ドメインのSPFレコードを使って認証処理を行います。redirect変更子を利用するならば、他の機構は使わないようにしましょう。redirect変更子を使ったシンプルな例は次のとおりです。
"v=spf1 redirect:example.com"
機構のうちinclude、a、mx、ptr、exists、redirectは、DNSの問い合わせが必要になるため、一つのSPFレコード内での使用は10回以下にしなければならない、という制限があります。一見、10回までであれば十分な余裕があるように思われるかもしれませんが、include機構は再帰的に評価されるため、たとえばinclude先のSPFレコードがさらに2つのinclude機構を含んでいたならば、3回としてカウントされます。これには注意が必要です。
SendGridユーザがしなければならないこと
CNAMEレコードを、送信元ドメインの参照先をSendGridドメイン(sendgrid.net)に向けます。こうすることで、SMTPの受信サーバは、送信元ドメインのSPFレコードではなく、CNAMEで指定されているSendGridのSPFレコードをチェックするようになります。
そのため、同一のSPFレコードの値が返ってきても驚く必要はありません。
DNSレコードの設定内容について、詳しくは『独自ドメイン利用(Sender Authentication)および設定時のDNSレコードについて、詳しく教えてください』をご覧ください。
SPFレコードのテスト方法
すべてのISPがSPF認証を導入している訳ではありませんが、認証が失敗した場合はそのメールをブロックしたり迷惑メールフォルダに入れたりするISPもいます。
SPFレコードの記述方法は複数あり、少しずつ異なります。正しく設定されていることを確認しておきましょう。 レコードの検証や生成に役立つ3つのツールを紹介します。
- Scott Kitterman’s SPF Testing Tools:あなたのドメインのSPFレコードがすでに存在するかどうかを確認できます。また、SPFレコードの有効性やパフォーマンスのテストを行えます。
- SPF Record Check:SPFレコードのルックアップと検証が行えます。入力されたドメインのSPFレコードに対して診断テストを実行し、配信に影響を与える可能性のあるエラーを強調表示してくれます。
- SPF Wizard:ブラウザベースのSPFレコード生成ツールです。フォームに必要事項を入力するとサイトがSPFレコードを自動生成してくれます。
SPFの設定は率先して実施しよう
フィッシング詐欺師は、SPFが設定済みであるドメインよりも未設定のドメインを標的にします。 SPFはスパムメールを防ぐことはできませんが、攻撃を受けにくくする抑止力になるのです。それを望まない人はいないですよね?これが、すべてのメールクライアントにSPFレコードの作成を推奨する理由です。
SPFをSender IDやDKIM、DMARCと組み合わせて使用すれば、スパム送信者からのメールを適切に識別することができます。
メールは、とても大切なコミュニケーションツールです。ユーザからの信頼を保ち、メールを確実に届けるために下記リンクもぜひご覧ください。