SPFメカニズムを理解する:a、mx、ip4、include
Quick Answer
SPFはRFC 7208 §5で8つのメカニズムを定義しています:all、include、a、mx、ptr、ip4、ip6、exists。最もよく使われる4つは次のとおりです:ip4(特定のIPv4アドレスまたは範囲を承認、ルックアップ0回)、a(ドメインのA/AAAAレコードを承認、ルックアップ1回)、mx(ドメインのMXレコードとそのAレコードを承認、最悪の場合で最大10回のルックアップ)、include(別ドメインのSPFレコードに評価を委任、ルックアップ1回に加えてネストされたルックアップ)。
SPFメカニズムを理解する:a、mx、ip4、include
SPFはRFC 7208 §5で8つのメカニズムを定義しています:all、include、a、mx、ptr、ip4、ip6、exists。 95%の場面で使用するのは、ip4(特定のIPv4アドレスまたはCIDR範囲を承認)、a(ドメインのA/AAAAレコードを承認)、mx(ドメインのMXレコードを承認)、include(別ドメインのSPFレコードに評価を委任)の4つです。
「SPFの構文は一見単純に見えます」と、DuoCircleのCTOであるAdam Lundriganは語ります。「v=spf1のあとにメカニズムと修飾子が続く形は分かりやすそうですが、評価の意味論は驚くほど複雑です。メカニズムの順序が重要であり、最初に一致したものが優先され、~allと-allの違いは配信に実際の影響を及ぼします。私たちは毎週、配置を誤ったメカニズムが意図したポリシーを暗黙のうちに上書きしているレコードを目にしています。」
各SPFメカニズム、修飾子、モディファイアの詳細については、SPFレコード構文の完全ガイドをご覧ください。
各メカニズムには、RFC 7208の10回ルックアップ制限に対してカウントされる特定のDNSルックアップコストがあります:
ip4/ip6– ルックアップ0回(リテラルIP、DNS不要)a– ルックアップ1回mx– ルックアップ1回 に加えて、返される各MXホストごとに1回(MXが多いドメインでは、知らないうちに上限を超える可能性があります)include– ルックアップ1回 に加えて、インクルードされたSPFレコードが再帰的に消費するすべての分exists– ルックアップ1回ptr– ルックアップ1回以上(RFC 7208 §5.5では使用しないことを明確に推奨しています)
このガイドでは、よく使われる4つのメカニズムそれぞれについて、正確な構文、コーナーケース(複数IPを持つAレコード、多数のAレコードを持つMXホスト、再帰的なインクルード)、そして同じ送信IPのセットに対して複数の選択肢がある場合にa/mx/ip4/includeのどれを選ぶかを解説します。手動でのメンテナンスが面倒に感じられる場合は、それを自動化するAutoSPFの仕組みをご覧ください。
「a」メカニズム
SPFの「a」メカニズムは、受信側のメールサーバーに対して、特定のドメインのAレコードまたはAAAAレコードがメールを送信しているIPアドレスを指している場合、そのメールを正当なものとみなすように指示します。
つまり基本的に、メールがドメインのA(ip4)またはAAAA(ip6)レコードに記載されたIPから送信されており、「a」メカニズムを含めている場合、SPFは通過します。
例:v=spf1 a -all
「a」メカニズムはいつ使うべきか?
次の場合に使用してください:
-
メールサーバーがドメインと同じIPアドレスを共有している場合(例:ウェブサイトとメールサーバーが同じサーバーでホストされている)。
-
小規模でシンプルな構成であり、送信元IPがドメインのA/AAAAレコードに直接結び付いている場合。
-
ドメインのAレコードが常にメールサーバーのIPを反映すると確信できる場合(これが重要です)。

「a」メカニズムはいつ避けるべきか?
次の場合は「a」メカニズムの使用を控えてください:
-
Aレコードが何を指しているのか分からない、または制御できない場合(例:サードパーティのホスティングやCDNを利用している)。
-
ウェブサイトとメールサーバーが別々の異なるIPアドレスでホストされている場合。
-
SPFレコードを明示的で保守しやすいものにしたい場合は、分かりやすさのために「ip4」や「include」を使用してください。
さらに、ドメインのAレコードがいつか変更されると(サーバー移行時など)、気づかないうちに送信メールのSPFを意図せず壊してしまう可能性があります。
「mx」メカニズム
SPFにおいて「mx」メカニズムは、送信ドメインのMXレコードに記載されたサーバーが、ドメイン所有者に代わってメールを送信することを許可すると受信サーバーに伝えます。基本的には、ドメインのMXレコードを解決してホスト名を取得します。次に、そのホスト名をIPアドレスに解決します。あなたのメールの送信元IPアドレスが、記載されたIPアドレスのいずれかと一致すれば、SPFチェックは通過します。

「mx」メカニズムはいつ使うべきか?
メールがドメインのメールを受信するのと同じメールサーバーを通じて送信されている場合、つまり受信メールサーバーと送信メールサーバーが同一である場合に「mx」メカニズムを使用してください。
よくあるケース:
-
ウェブホストやドメインプロバイダーのメールサービス(GoDaddyやBluehostのメールなど)を利用している。
-
受信メールと送信メールの両方を処理するオンプレミスのメールサーバー(Microsoft Exchangeなど)を運用している。
-
同じプロバイダーが受信と送信の両方のメールフローを処理する構成を会社で採用している。

「mx」メカニズムはいつ避けるべきか?
送信メールがMXサーバーを経由しない場合、「mx」メカニズムの使用は理想的ではありません。これがよく起こるケースは次のとおりです:
-
サードパーティのメール送信サービス(Mailchimp、Google Workspace、Zoho、Salesforceなど)を利用している。
-
ドメインが1つのサーバー(MX)でメールを受信し、別のサーバー(SMTPリレーやAPIベースの送信者)で送信している。
-
MXレコードが実際に何を指しているのか分からない。
「mx」メカニズムを使用する場合、MXレコードは常に適切に更新しておく必要がある点にご注意ください。 また、一部のサービスは頻繁にIPをローテーションしたり、CDNやロードバランサーを使用したりするため、解決先のIPを継続的に確認してください。そのため、MXレコードが壊れる可能性があります。
「ip4」メカニズム
「ip4」メカニズムは、IPv4アドレス(または範囲)があなたのドメインに代わってメールを送信することを明示的に承認するために使用されます。
例:
v=spf1 ip4:192.0.2.0/24 -all
これはメールサーバーに対して、「ねえ、192.0.2.0/24の範囲内のいずれかのIPからメールが来た場合、それはこのドメインにとって正当なものだよ」と伝えます。

「ip4」メカニズムはいつ使うべきか?
「ip4」メカニズムは次の場合に最も適しています:
-
自分のメールサーバーを管理し、そのIPを把握している場合。
-
固定の送信元IPを提供するサービス(ウェブホストやCRMツールなど)を利用している場合。
-
includeメカニズムを使う代わりに、既知の静的IPを手動で許可リストに登録したい場合。
-
既知のSPF「include」でカバーされないサードパーティ送信者を個別に承認する必要がある場合。
おまけの利点として、余分なDNSルックアップを回避するのにも役立ちます。
「ip4」メカニズムはいつ避けるべきか?
慎重になったほうがよいのは次の場合です:
-
IPアドレスが動的である、または頻繁に変わる場合。SPFは自動更新されないため、メール配信を壊してしまう可能性があります。
-
Google WorkspaceやMailchimpのような大手サードパーティプラットフォームを利用している場合、それらはすでに「include」レコードを提供しています。
また、1つのレコードに複数の「ip4」エントリを追加すると、SPFレコードが長くなりすぎて管理が難しくなる点にも注意してください。

「include」メカニズム
「include」メカニズムを使うと、他のドメインがあなたに代わってメールを送信することを承認できます。
「include」メカニズムはいつ使うべきか?
サードパーティのサービスがあなたのドメインを使ってメールを送信する場合に使用してください。これには次のものが含まれます:
-
メールマーケティングプラットフォーム(Mailchimp、SendGrid、Klaviyoなど)
-
トランザクションメールサービス(Amazon SES、Postmarkなど)
-
CRMツールやヘルプデスク(HubSpot、Intercom、Freshdesk)
-
セキュリティサービス(ProofpointやMimecastなど、送信メールを処理する場合)
「include」メカニズムはいつ避けるべきか?
「include」メカニズムを避ける必要はありませんが、使いすぎないよう次の点を考慮してください:
-
各「include」は10回のDNSルックアップ制限に加算され、それを超えるとDNSルックアップが多すぎるエラーが発生します。
-
他ドメインからのネストされた「include」ステートメントは、知らないうちに制限を超えることがあります。
-
完全に制御または信頼できないドメインは決してインクルードしないでください。
「include」ステートメントを使いすぎて、SPFレコードがすでにDNSルックアップ制限を超えている場合は、当社の自動SPFフラット化ツールをご利用ください。これらをIPアドレスに置き換えることで、ルックアップの必要性を最小限に抑えます。 どのアプローチがあなたのドメインに適しているか気になりますか?マクロとフラット化の比較に関する当社の見解をお読みください。ツールについて詳しく知りたい場合や、その他のSPF関連の問題でサポートが必要な場合は、お気軽にお問い合わせください。
CTO
CTO of DuoCircle. Architect of AutoSPF's SPF flattening engine and DNS monitoring infrastructure.
LinkedIn Profile →