2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SPF ってなんだろう?まとめてみた

Last updated at Posted at 2021-09-18

SPF についてたまに思い出す必要があるのでまとめてみた

端的に言うと...

送信元詐称した迷惑メールなどを防ぐための仕組み

どう実装されているのか?

  • DNS にあらかじめSPF レコードを登録しておく
  • 受信したときに、受信者は送信元のIPアドレスがDNS のレコードに登録されたIPであるか確認する
    • 違う場合は認証失敗。送信できないなどの機構を作れる

具体的に追ってみよう

Case: example@gmail.com からtest@example.com へのメール配送を考えてみる

  • gmail からメールを送る
  • example.com のメールサーバはgmail からメールを受信する
    • メールを受信した際、その送信元IPを調べる
    • DNS レコードを確認する
dig +noall +answer gmail.com txt
gmail.com.              300     IN      TXT     "globalsign-smime-dv=CDYX+XFHUw2wml6/Gb8+59BsH31KzUr6c1l2BPvqKX8="
gmail.com.              300     IN      TXT     "v=spf1 redirect=_spf.google.com"
  • spf1 redirect=_spf.google.com なのでそちらを調べに行く
dig +noall +answer _spf.google.com  txt
_spf.google.com.        299     IN      TXT     "v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all"
  • netblock1~3 .google.com をinclude していることがわかる
dig +noall +answer _netblocks.google.com  txt
_netblocks.google.com.  290     IN      TXT     "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"
  • つまりGoogle の場合は上記のIPアドレスレンジをIPアドレスとして定義していて、これ以外のIPである場合は正規のIPではないと定義している
    • ~all としているので下記を意味する
      • 認証情報を公開しているが、正当なメールであっても認証失敗する可能性もある
      • すべての送信元ホストにマッチする

SoftFailとHardFail

SPF レコードには末尾に~all や -all などの記述がある
~ がsoftfail で - がHardFailである
これは、SPF の仕組みを使ってメールを受信した側がどのような挙動を取るべきかの指標となる部分である。
例えばGoogle の場合 ~ を利用しているためSoftfail であり、認証失敗する「可能性がある」としている。
これはつまり何かしらの転送経路があった場合にはGoogle のIP アドレス以外からログを受信することがあるかもしれないことを示唆している

世の中の他のドメインについても調べてみよう

  • yahoo → SoftFail
dig +noall +answer yahoo.co.jp txt
yahoo.co.jp.            900     IN      TXT     "google-site-verification=GvbYgNin-mY73VbS4IJK2D8nI3tHEf2NpRdy76VYqBU"
yahoo.co.jp.            900     IN      TXT     "v=spf1 include:spf.yahoo.co.jp ~all"
  • microsoft → hardFail
dig +noall +answer microsoft.com  txt | grep spf
microsoft.com.          3600    IN      TXT     "v=spf1 include:_spf-a.microsoft.com include:_spf-b.microsoft.com include:_spf-c.microsoft.com include:_spf-ssg-a.microsoft.com include:spf-a.hotmail.com include:_spf1-meo.microsoft.com -all"
  • amazon.com → hardFail
dig +noall +answer amazon.com  txt | grep spf
amazon.com.             900     IN      TXT     "v=spf1 include:spf1.amazon.com include:spf2.amazon.com include:amazonses.com -all"
amazon.com.             900     IN      TXT     "spf2.0/pra include:spf1.amazon.com include:spf2.amazon.com include:amazonses.com -all"
  • facebook → hardFail
dig +noall +answer facebook.com  txt | grep spf
facebook.com.           6979    IN      TXT     "v=spf1 redirect=_spf.facebook.com"
$ dig +noall +answer _spf.facebook.com txt | grep spf
_spf.facebook.com.      3600    IN      TXT     "v=spf1 ip4:66.220.144.128/25 ip4:66.220.155.0/24 ip4:66.220.157.0/25 ip4:69.63.178.128/25 ip4:69.63.181.0/24 ip4:69.63.184.0/25" " ip4:69.171.232.0/24 ip4:69.171.244.0/23 -all"
  • apple → softFail
dig +noall +answer apple.com txt | grep spf
apple.com.              3600    IN      TXT     "v=spf1 include:_spf.apple.com include:_spf-txn.apple.com ~all"
  • jal/ana → softFail
 dig +noall +answer jal.co.jp txt | grep spf
jal.co.jp.              900     IN      TXT     "v=spf1 +ip4:203.216.142.52 +ip4:202.219.37.2 +ip4:163.211.251.0/24 +ip4:163.211.252.0/24 +ip4:163.211.253.0/24 +ip4:163.211.224.0/21 +ip4:27.112.104.239 +ip4:82.150.225.79 +ip4:163.211.240.0/24 " "+ip4:202.218.104.28/30 +ip4:202.218.104.32/30 +ip4:210.152.224.237/32 +ip4:210.152.224.238/31 +ip4:210.152.224.240/30 " "include:spf.protection.outlook.com include:_spf.google.com include:nets1.spf.messagelabs.com include:nets2.spf.messagelabs.com ~all"
$ dig +noall +answer ana.co.jp txt | grep spf
ana.co.jp.              86400   IN      TXT     "v=spf1 +ip4:210.231.106.160/27 include:_spf.google.com +ip4:118.103.91.0/25 +ip4:54.199.183.220 +ip4:54.199.184.14 +ip4:54.199.210.117 +ip4:202.143.69.192/26 " "include:_spf.salesforce.com +ip4:18.182.142.199 +ip4:18.178.160.229 +ip4:

SoftFail とHardFail の使い分け

勝手なイメージとして日本企業はSofFail を使っているイメージが強い。海外企業はHardFailが多い。
日本だとドラスティックにHardfail を利用してメールが配送できないといった問題を回避するためのものなのだろうか?
詳細は把握していないのでご存じの方いれば共有頂きますと幸いです。

参考

https://www.nic.ad.jp/ja/basics/terms/spf.html
https://www.ietf.org/rfc/rfc4408.txt
https://salt.iajapan.org/wpmu/anti_spam/admin/tech/explanation/spf/
https://ja.wikipedia.org/wiki/Sender_Policy_Framework

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?