MailData Logo

Sender Policy Framework

SPFとは

SPFエスピーエフとは、Sender Policy Frameworkの略で、管理しているドメインのメールアドレスを使って送信できるMTA(Mail Transfer Agent)をDNSのレコードとして記載する事で、明示的に許可されたMTAを受信側MTAが認証する仕様です。

動作の例

動作の例として、下の図で説明します。
example.comの正当なメールサーバのIPアドレスは、113.149.170.222です。
これをDNSにTXTレコードでSPFの登録をしておきます。

もしも、support@example.comのアドレスで、なりすましメールを送ろうとする悪意ある人が、自分で用意した122.197.157.64のアドレスのメールサーバを使って送ろうとしても、受信側のメールサーバが、そのメールを受信する際に、example.comのDNSにSPFの記載があるTXTレコードを問い合わせれば、当然IPアドレスが違うので、正当なメールサーバではないと分かります。

SPFの動作の例

SPFの設定だけだと、処理をどうするかは受信側メールサーバに委ねられる

SPFレコードを設定すれば、受信側のメールサーバは、メールを受信した際に、正当なメールサーバから送られたかどうかの判断ができます。
正当ではないメールサーバから送られたメールをどうするかは、受信側のメールサーバにその処理が委ねられます。
多くのメールサーバで、迷惑メールフォルダに入れる設定にしています。

自社からのメールが、ちょくちょく送り先の迷惑メールボックスに入っている場合は、SPFの設定がそもそもされているかを確認することをお勧めします。

送信元が、処理をコントロールしたい場合はDMARCの設定が必要

送信元が、正当ではないメールサーバから自社のドメイン名でのメールを送信された場合の処理をコントロールしたい場合には、DMARCの設定が必須です。
DMARCで、受信するか、隔離するか、排除するか、受信側メールサーバに処理を明示的に指示することが可能となります。

MXレコードでは駄目なの?

メールサーバのDNSでの登録と云えば、MX(Mail Exchange)レコードです。
「メールサーバの正当性なら、MXレコードを確認すればいいじゃないか?」と思われるかもしれません。

昨今では、例えば、一括メール配信サービスなど、他社のサービスを使って、自社のドメイン名のメールアドレスで配信するという事がありますよね。
その場合には、一括メール配信サービスのメールサーバのドメイン名は、自社のドメイン名ではありません。
そして、MXレコードに他社のメールサービスのメールサーバを登録してしまうと、そちらに自社宛てのメールも届く事になります。

SPFは、送信する正当なメールサーバのIPアドレスやホスト名を登録するという点がミソです。
これによって、一括メール配信サービスなど、他社のサービスを他社のドメインのメールサーバから送信しても、正当である事を通知できるのです。

SPFの制限

SPFに記載したMTAのホスト名や内包リストの総DNS Lookup数は10を超えてはいけません。
超えてしまうと、SPF permanent errorとなり、DNSのSPFレコードの解釈が正しく出来なかったと判断され、SMTPは550番エラーを返すべしと定められています。
実際には、「550,”5.7.1” Unauthenticated email is not accepted from this domain.」(このドメインから認証されていないメールを受け取れない)というエラーになります。

SPFレコードだけでは防げない例

「それならSPFレコードがあれば十分じゃない?」と思われる方もいらっしゃるでしょう。
昨今は、自社でメールサーバを構築して運用するという企業も随分減ってしまいました。
GmailなどのSaaSで自社のメールを運用している企業も多いでしょう。

例えば、Gmailでメールを運用している場合に、SPFに入るのは、_spf.google.comという記載です。
このホスト名をLinuxでnslookupすると、更に幾つかのホスト名の記載があります。
(Windowsのnslookupでは動作しません)


$ nslookup -type=TXT _spf.google.com
Server:         169.254.169.254
Address:        169.254.169.254#53

Non-authoritative answer:
_spf.google.com text = "v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all"

Authoritative answers can be found from:

$ nslookup -type=TXT _netblocks.google.com
Server:         169.254.169.254
Address:        169.254.169.254#53

Non-authoritative answer:
_netblocks.google.com   text = "v=spf1 ip4:35.190.247.0/24 ip4:64.233.160.0/19 ip4:66.102.0.0/20 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:74.125.0.0/16 ip4:108.177.8.0/21 ip4:173.194.0.0/16 ip4:209.85.128.0/17 ip4:216.58.192.0/19 ip4:216.239.32.0/19 ~all"

Authoritative answers can be found from:

Gmailは、登録さえすれば、他の人も使えるサービスです。
ですから、悪意のある人物が、Gmailで捨てアカウントを作成して、なりすましメールを送ることは可能なのです。
それは、_spf.google.comには、Gmailのメール送信サーバのIPアドレスのリストを内包されているからです。

SPFだけでは防げない例

そこで、DKIMが必要となります。