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の設定がそもそもされているかを確認することをお勧めします。
送信元が、処理をコントロールしたい場合は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アドレスのリストを内包されているからです。
そこで、DKIMが必要となります。