はじめに
まだ以下の記事をお読みいただいていない方は、本稿より先にそちらをお読みください。
SPFとは
SPFとは”Sender Policy Framework”の略称で、電子メールの受取り側が差出人情報を確認することで、差出人メールアドレスが詐称/なりすましされたものでないかを判別する技術(送信ドメイン認証)の1つです。
電子メールの送信に用いられる「SMTP」と呼ばれるプロトコルでは、その仕様上、原則として差出人のメールアドレスを誰でも自由に変更できてしまうという問題があります。
SPFはこの問題の対策の1つとして策定されました。
SPFの基本的な仕組み
電子メールにおいては、「差出人メールアドレスは簡単に詐称できるが、送信元のIPアドレスは詐称できない」という前提のもと、差出人の送信ドメイン(@example.comなど)が「我々はこれらのIPアドレスからしかメールを送信しませんよ」という情報を公開することで、受信側がこの情報と照会し、なりすましか否かを判断します。
このIPアドレスの情報は、送信ドメインのDNS TXTレコードに、特定の書式で記載します。このTXTレコードを特に「SPFレコード」と呼びます。
メールの受取り側(スパム対策のゲートウェイなど)は、メールの差出人のドメインのDNSのSPFレコードを確認し、差し出し元が信頼できるIPアドレスから送られたものであるか、なりすましメールの判断材料とします。
SPFレコードの書式
前述の通り、SPFレコードとは特定の書式で記載されたTXTレコードになります(CNAMEやMXと同じような意味で、SPFというレコードがあるわけではありません)。
SPFレコードの例
example.com TXT “v=spf1 +ip4:203.0.113.1 +a +a:www.example.org +mx +include:spf.protection.outlook.com -all”
※1行で記載されます。
v=spf1と-allとの間に、信頼して欲しいIPアドレスの情報を記載します
(+記号は省略できます)。
+ip4:203.0.113.1
IPアドレス203.0.113.1を指定します。
+a:www.example.org
www.example.orgのAレコードと同じIPアドレスを指定します。
:以降を省略した場合、元ホスト(この場合はexample.com)のAレコードと同じIPアドレスになります。
+mx:example.org
example.orgのMXレコードと同じホストを指定します。
:以降を省略した場合、元ホスト(この場合はexample.com)のMXレコードと同じホストになります。
+include:spf.protection.outlook.com
spf.protection.outlook.comというホストのSPFレコードも組み込みます。
-all
を最後に記載することで、「これ以外から送られたメールは拒否してください」という意味になります。
~all
-(ハイフン)の代わりに~(チルダ)にすると「これ以外から送られたメールは信頼できませんが、拒否はしないでください」という、-allよりも「緩い」ルールになります。
SPFレコードの書き方の注意点
SPFレコードは複数存在してはいけない
のように複数のSPFレコードが存在してはいけません。
のようにまとめてください。
参照先ホストを省略してはいけない
このような書き方は誤りです。
のようにFQDNで記載ください。
代表的なクラウドメールサービスのSPF
最後に、代表的なクラウドメールサービスを利用する際に、SPFレコードに追加するincludeを紹介します(2022年4月現在)。
Micorosoft365 Exchange
+include:spf.protection.outlook.com
Google Workspace
+include:_spf.google.com
まとめてメール(ブラストメール)
+ include:spf.bmv.jp
一斉メール配信サービス「まとめてメール」を利用する場合は、まとめてメールの送信元をSPFレコードに追加いただく必要があります。
Active! gate SS
+include:_spf.activegate-ss.jp
メール誤送信防止サービスActive! gate SS(アクティブゲート) を利用する場合は、Active! gate SSの送信元をSPFレコードに追加いただく必要があります。
最後に
他のホストのSPFレコードのみを利用するredirectなど、その他の機構の解説は省略します。正確な仕様はRFC 7208を参照ください。