技術解説 · 出典付きの回答
SPF(Sender Policy Framework)とは?仕組みを解説
SPF(Sender Policy Framework)は、ドメイン所有者が自分のドメインの代わりにメールを送信することを許可するメールサーバーを指定できる、DNSベースの送信ドメイン認証の仕組みです。受信側メールサーバーが送信元IPアドレスがドメインのSPFレコードに記載されているかを検証できるようにすることで、なりすましを防ぎます。
SPFの動作の仕組み
メールを受信すると、受信側サーバーはSMTPのMAIL FROMアドレスに含まれるドメインのTXTレコードを参照します。SPFレコードには、承認されたIPアドレスやサードパーティのサービスの一覧が含まれています。受信側は、接続してきたSMTPサーバーのIPアドレスをこの一覧と照合します。IPが含まれていればチェックは合格です。含まれていなければ、レコードで使われている修飾子に応じて、結果はfailまたはsoftfailになります。
送信者にとっての重要性
SPFは、メールのなりすましやフィッシングに対する主要な防御策です。有効なSPFレコードがないと、受信側サーバーは自社ドメインから送られたと称するメールが正当なものかどうかを検証できません。その結果、メールが迷惑メールと判定されたり、完全に拒否されたりすることがよくあります。SPFの導入は、メールのセキュリティポリシーのレポートと適用のためのより堅牢な枠組みを提供するDMARCアライメントの前提条件です。
運用でよくある間違い
よくある誤りは、DNSルックアップの上限である10回を超えてしまうことです。includeメカニズムを使いすぎたSPFレコードはPermErrorを引き起こし、認証が失敗します。また、1つのドメインに複数のSPFレコードがあることもよくある失敗で、これは無効であり自動的にfailになります。一貫した評価を得るため、承認するすべての送信元を1つのTXTレコードにまとめてください。
SPFレコードの例
一般的なSPFレコードは v=spf1 ip4:1.2.3.4 include:_spf.google.com ~all のような形式です。この例では、v=spf1 がバージョンを示し、ip4:1.2.3.4 が特定のサーバーを承認し、include:_spf.google.com がGoogle Workspaceを承認し、~all がそれ以外の送信元をsoftfailにすることを示しています。https://sendhq.cc/tools にあるSendHQの無料ツールで現在のレコードを確認し、構文が正しいことを確かめられます。
評価の修飾子
レコードの末尾には、承認されていないメールをどう扱うかを受信側に伝える修飾子を置きます。マイナス記号の -all はハードフェイルを示し、メールを拒否すべきであることを意味します。チルダの ~all はsoftfailを示し、メールを受け付けつつ不審なものとしてマークすべきであることを意味します。疑問符の ?all はneutralの結果で、受信側サーバーに特定の指示を与えません。
よく寄せられる質問
SPFレコードは複数持てますか?
いいえ。1つのドメインに設定できるSPFレコードはちょうど1つです。複数のレコードがあると恒久的なエラーになり、認証に失敗します。
DNSルックアップの上限とは何ですか?
SPFレコードの再帰的なDNSルックアップは10回までに制限されています。この上限を超えるとPermErrorが発生し、レコードは無効になります。
SPFですべてのなりすましを防げますか?
SPFが検証するのはReturn-Pathのアドレスだけで、ユーザーに表示されるFromヘッダーは検証しません。ヘッダーを完全に検証するにはDKIMとDMARCが必要です。
一次情報源
- RFC 7208:送信者ポリシーフレームワーク(SPF) — RFC Editor
- RFC 7489:ドメインベースのメッセージ認証・レポート・適合(DMARC) — RFC Editor