SPFによるメール認証の仕組みや設定方法について詳しく解説!
SPFという言葉をご存知でしょうか?
SPFとは送信ドメイン認証技術の1つで、メールの配信結果に大きな影響を与えます。
SPFがメールセキュリティ対策の一つでなりすましメールを防ぐための対策であるとは知っているという方が多いと思います。一方でメール送信時にエラーが発生するため、「SPFレコードを設定したいけれどSPFレコードとはどういうものか?」「どのような仕組みになっているのか?」よく分からないという方も多いようです。
本記事では、SPFレコードの動作原理や設定手順、記述例などについて説明します。ぜひ参考にしていただきSPFを活用し、なりすましメールからご自分の情報をお守りください。
SPF・SPFレコードとは?
SPFとは、当該メールが本当に表示アドレスからのものかを検証するフレームワークで、SPFレコードはその設定情報を表します。事前に使用するドメインに対して、さまざまな情報を登録しておかなければなりません。
ドメインネームサービス(DNS)サーバーに追加されるSPFレコードは、受信したメールが実際の送信者IPアドレスからのものか、フィッシングキャンペーンとして送られたものかを知らせます。
SPFを使用すれば、受信側は、予想通りの相手からのメールだと確信が持てます。一方送信元もなりすましやブランド名を偽ったフィッシングメールが送信されないと安心できます。
SPFの必要性
迷惑メールの増加が注目される中、SPFなどの送信元ドメイン認証が重要視されます。迷惑メールは、誰から来たかわからないように送信元アドレスを偽装するケースが一般的です。
一般的に、インターネット上ではSMTPを利用して電子メールを送信します。
SMTPを用いた電子メールの送信では、2つの送信者メールアドレスが指定されます。電子メールのヘッダーのFromフィールドに表示される送信者アドレスと、FROMコマンドの引数として指定されるメールアドレスです。
これらの2つのアドレスは同じである必要はなく、任意のアドレスが指定できるため、アドレスの偽装が容易に行われます。
そのため、SPFを使用して、フィッシングメールを事前に識別することが重要です。
SPFの仕組み
SPFレコードを確認すれば、当該ドメインから許可されたメール送信サーバーが判明します。
通常、SPFレコードはSMTP通信の手順の一環として、メール本文が送信される前段でチェックされます。その回答と実際の送信元IPアドレスが一致するかを確認し、送信ドメインを許可します。
つまり、送信メールが正しいメールアドレスから送信されたと証明できれば、相手のメールボックスに届くのです。
SPFレコードの未登録や設定を間違えていると送信メールは相手の迷惑メールフォルダーに振り分けられてしまう可能性があります。
SPFの構成要素
SPFレコードはさまざまな組み合わせで構成されており、左に書かれているものから評価されていきます。
ここではそれぞれの構成要素について解説していきます。専門的な内容ですので、最初は構成要素が何であるかについて大まかな理解でも問題ありません。
バージョン番号
SPFレコードは、まずバージョン番号から始まります。
この番号は、送信者の正当性を確認する機構によって承認される必要があります。
バージョン番号に続き、文字列は、機構、限定子、および修飾子から構成されます。
バージョン番号は「v=spf1」と指定します。
この記述方法がバージョン1の文法に沿って定義されていることを示しています。
現行、SPFレコードの文法はバージョン1のみなので、v=spf2などと記述すると不正と認識されて廃棄されます。
また「v=spf1.0」としてしまってもエラーになってしまいますので注意しましょう。
限定子
限定子とは照合処理のやり方を決める記述です。
機構にマッチしたときの処理を設定します。
限定子の種類は以下のとおりです。
表記 | 結果 | 意味 |
+ | Pass | 当該ドメインの送信メールサーバーであると許可する |
– | Fail | 不正メールとして処理する |
~ | SoftFail | 認証情報は公開しているが、正当のメールでも失敗する可能性もある |
? | Neautral | SPF指定なしとして処理される |
機構
機構は、認証対象のIPアドレスと照合する条件を指定します。
一般的なものは以下のとおりです。
機構 | 引数 | 機能 |
all | なし | 全ての送信元ホストに適合します。これはSPFレコードの最後に配置され、デフォルトの動作を定義するために利用されます。 |
include | ドメイン名 | include先ドメインのSPFレコードで認証処理が通れば承認されます。inciude先でさらにinclude機構があったら再帰的に評価します。 |
a | ドメイン名 | ドメインのAレコードによるIPアドレスの一致があれば許可されます。 |
mx | ドメイン名 | 送信元ホストの与えられたドメインのMXレコードによって解決されたIPアドレスが許可されます。 |
ptr | ドメイン名 | 指定したAレコードに対応する各サーバーのPTRレコードを定義します。 |
ip4 | IPネットワークアドレスまたはIPアドレス | 送信元IPアドレスが、指定された引数がIPネットワークに含まれる、またはIPアドレスに一致する場合、許可されます。 |
ip6 | IPv6ネットワークアドレスまたはIPv6アドレス | IPv6アドレスの定義に使用します。 |
これらの機構のうちinclude、a、mx、ptrはDNSのクエリが必要です。
そのため1つのSPFレコード内では10回までしか使えません。
10回以下であれば十分に感じるかもしれませんが、includeは再帰的に評価されるので、例えばinclude先のSPFレコードがさらに2つのincludeを含んでいると、3回としてカウントされるので注意してください。
修飾子
修飾子を利用すると、フレームワークを拡張できます。
修飾子は「=」で区切られた値あるいは名前のペアで一段と詳しい情報を得られます。
0〜2個まで記述でき、レコードの文末に一度のみ記述できます。
代表的な修飾子は以下のとおりです。
修飾子 | 文法 | 機能 |
redirect | redirect=ドメイン名 | ドメインに問い合わせるために使われます。2つ以上のドメインで同一のSPFレコードを運用する際に重宝します。 |
exp | exp=ドメイン名 | 一致した機構にFAIL限定子が含まれるケースで説明の記述で使用します。SPFログに記載されます。 |
SPFレコードの記述例
ここからは、SPFレコードにおける記述の方法を解説します。
記述ミス防止の観点から、SPFレコードはシンプルな記述にするべきです。
基本的なSPFレコード
「ドメイン」. IN TXT “v=spf1 +ip4:「IPアドレス」〜all”
もっとも基本となる方法で、メールサーバーの送信元IPアドレスを直接指定する方式です。
送信メールサーバーが少ない場合は、記述ミスを避けたり受信側でのDNSクエリを抑えたりするためにこの方法を強くおすすめします。
複数のメールサーバーがある場合
v=spf1 ip4:「IPアドレス」 ip4:「IPアドレス」~all
この方法では、2つのIPアドレスからの送信を許可しています。
複数のメールサーバーが存在しても、SPFレコードは1行です。
SPFレコードを複数行にすると、不正なSPFレコードになるので、ご注意ください。
メール送信サービスを利用している場合
「ドメイン」.IN TXT ”v=spf1 include:「メール送信サービスのドメイン」~all”
メール送信サービスのSPFレコードの記述方法です。
ただし、各サービスのドキュメントやガイドラインを参照し、正確なSPF設定を行うことが重要です。
また、ドメインの他の既存のSPFレコードと適切に統合することも忘れないでください。
ホスト名で記述
「ドメイン」. IN TXT “v=spf1 a :「ホスト名」~all”
このSPFレコードは、送信ドメインが「ドメイン」であり、送信IPアドレスが「ホスト名」のAレコードで解決されるIPアドレスである場合を承認します。
それ以外のIPアドレスは許可されません。
ネットワークでの指定
「ドメイン」. IN TXT “v=spf1 +ip4:「ネットワーク」 ~all”
この記述では、指定されたIPv4ネットワークの送信元IPアドレスが許可され、~all は、SPFに合致しない送信元に対して中立的な扱いを示します。
ネットワークの範囲は極力狭い範囲にしましょう。
SPFにおける課題
迷惑メール対策に有効なSPFですが、以下の2点の課題があります。
- 転送問題
- 第三者サーバー利用問題
1点ずつ詳しく説明します。
転送問題
SPFはIPアドレスを使用して認証を行うため、メールが転送されると、正当なメールであっても許可されないという問題が生じます。
メールの転送時に、Fromフィールドはそのままでありながら、メール送信を担当するサーバーのIPアドレスが変化します。
このため、転送元のIPアドレスが元のDNSサーバーに記載されたSPFレコードと一致しないため、許可されなくなります。
例えば、Aさんからのメールを受信したBさんがそのメールをCさんに転送した場合、メールの送信元はAさんのままですが、実際にメールを送ったのはBさんです。
この状況は、メール送信元が偽装されたメールと同じです。そのため、許可されず、迷惑メールとして認識されてしまいます。
このような問題を防ぐには、送信元を書き換える必要があります。上記のケースでは、送信元をBさんに変更すれば問題が解決します。
第三者サーバー利用問題
第三者のサーバーを使用する場合は、会社が提供しているVPNやSSL通信を使用してください。
例えば、出先から個人利用のプロバイダーのメールサーバーで送信する場合、会社のアドレスを送信元として使用すると、迷惑メールと同様の状態になります。認証に失敗し、メールは拒否されます。
出先であっても、会社が提供しているVPNやSSL通信を利用すれば、出先からでも会社のメールサーバーを利用できます。
SPFレコードの確認
SPFレコードの設定を確認する方法は以下のとおりです。
Windowsの場合
コマンドプロンプトを開いた上で「nslookup -type=TXT 確認するドメイン」を入力後エンターキー
Macの場合
ターミナルを開いた上で「dig txt 確認するドメイン」を入力後エンターキー
多少難しい面もありますが、この方法で確認できます。
「v=spf1~」の記述がないと、SPFレコードが未設定の可能性が高いです。
また、ブラウザでSPFレコードの確認が可能なサイトもあります。
まとめ
今回の記事では、SPFの仕組みやSPFレコードの設定方法などを解説しました。
SPFレコードを設定すれば送信元の信頼性を確保できます。SPFが正常に働いていないとメール配信時に信頼性のないメールと分類されてしまうケースがありますので確認が必要です。
特にGmailへメールを送信する場合はSPFレコードを設定していないと迷惑メールと分類されてしまうケースが目立ちます。
メールを送ったのに相手に届かないとお悩みの方は、本記事を参考にしてSPFレコードの設定を再度確認してください。
最新のEC・CRM事例やノウハウ、事業者対談セミナー・記事などマーケティングに役立つ情報をお届けします。