NNIPFの話題も出たので、SPFについても書く事にします。

SPFって何?

Weblioはこう答えてくれました。

SPF とは (Sender Policy Framework) エスピーエフ, えすぴーえふ
SPFとは、電子メールの送信元ドメインを認証する方式のひとつである。SMTPの拡張仕様であり、RFC 4408として定義されている。

ここまでの説明は合ってます。が、以下の下りは完璧に間違っています。

SPFでは、あるドメインに対して電子メールを送ることのできるアドレスを、メールサーバーの側であらかじめ送信者のIPアドレスとして管理している。管理よって認証されたアドレスがメールサーバーの保有している情報と整合した場合に限り、そのメールが正当なものとして送信される。

詳しくはRFC 4408またはhttp://www.openspf.org/を見ていただくとして、ここではSPFの大まかな流れを説明します。

  1. spam@exmaple.comからmailを受け取ったとします。
  2. この時、受信側がSPFに対応していたら、example.comTXTレコードをDNSで引きます。
  3. もしTXTレコードが存在していなければ、SPFはそのmailをneutral、中立として扱います。
  4. もしレコードが存在していたら、それがv=spfではじまっているかを確認します。これがSPFレコードです。こんな感じの内容です。
    "v=spf1 +a:mail.example.com ?all"
    ここではこれの意味は解釈しません。でもご安心を。The SPF Setup Wizardでわかりやすい解釈をしてくれます。
  5. このSPFレコードを受信サーバーが解釈した上で、そのmailの扱いを決めます。捨ててしまうとは限りません。通常Received-SPF:というヘッダーがmailに追加され、そこに判定結果が反映されます。

SPFのポイント

ここで重要なポイントをいくつか挙げておきます

SPFレコードを持っているのはDNS

これが一番の特徴です。これにより、送信側がSPFに対応するのに必要な措置は、DNSのTXTレコードを一つ追加するだけなのです。SPF未対応の受信サーバーに迷惑を可能性は全くありません

SPFをどう使うかは、受信サーバーにまかされている

上述のとおり、SPFはただのDNSレコード(正確には「サブ」レコード)です。それを利用するかどうか、SPF未対応の発信元をどう扱うか、そしてSPFレコードを解釈した結果の扱いは、すべて受信サーバーにまかされています。

SPF対応 -- 発信者側

上述のとおり、これは実に簡単です。DNSにTXTレコードを追加するだけなのですから。具体的な方法は、http://www.openspf.org/をご覧下さい。The SPF Setup Wizardを使ってもいいでしょう。

SPFの仕組みというのは、From:を詐称するのはSMTPのセッションでいくらでも可能なのに対し、DNSのレコードは、正当なドメイン保持者でない限り難しいという点を利用しています。最も効果があるのはよってドメイン詐称です。本当は別のSPAMサーバーから送られているのに、アドレスを見るとyahoo.co.jpとなっているSPAMを多く見かけませんか?SPFはこの手のSPAMに対しすこぶる有効です。

受信側で対応しなくてもいいから、DNSにSPFのTXTレコードは登録しておいて欲しいというのが、一日に30万件のSMTP Connectionを受けている私の切実な願いです。

SPF対応 -- 受信者側

私の場合はqpsmtpdを利用しているので、SPF対応はMail::SPF::Queryモジュールをインストールしてから、pluginsの設定でsender_permitted_fromをアンコメントしただけで対応が完了してしまいましたが、導入の難易度はお使いの環境によって変ってくるでしょう。

見ての通り、受信者側の対応は送信側の対応より難しいのですが、この仕組みからすれば、実はMTAレベルでなくMUAレベルでもSPFを使う事ができるのです。Fromを見てSPFのQueryを行えばいいので、フィルタープログラムを書けば、サーバー単位ではなくユーザー単位での対応も可能なわけです。

まとめ

SPFは手軽な割に強力なSPAM対策です。とくに発信者側の対応は、DNSの管理者であれば1分とたたずにできてしまいます。まだやっていない方はすぐにでもやってみてください。少なくともあなたのサイトのメールがSPAM判定される確率は格段に減ります。

受信者側の設定も、とりあえず最初はヘッダーを書き換えるだけにして、実際のSPAM判定はそれを元にMUAでやってもらうようにすれば、段階的に導入を進める事ができます。そうしてSPFが普及して行けば、From詐称は格段に減るはずです。

Dan the Antispammer

付録:日本における対応状況

ここではAlexaの日本語Top 100に対して本entry現在の対応状況を見ています。赤が未対応、緑が対応済みです。ただし、googleのように、mailは別ドメインで扱っている例もあるのでこの対応表は即そのドメイン保有者がSPFを無視していることを意味するものではありません。

  1. yahoo.co.jp
  2. google.co.jp
  3. mixi.jp
  4. fc2.com
  5. rakuten.co.jp
  6. livedoor.com
  7. goo.ne.jp
  8. infoseek.co.jp
  9. dell.com
  10. amazon.co.jp
  11. geocities.jp
  12. nifty.com
  13. 2ch.net
  14. sakura.ne.jp
  15. biglobe.ne.jp
  16. hatena.ne.jp
  17. symantec.com
  18. ameblo.jp
  19. ocn.ne.jp
  20. seesaa.net
  21. dmm.co.jp
  22. excite.co.jp
  23. msn.co.jp
  24. jugem.jp
  25. exblog.jp
  26. xrea.com
  27. mainichi-msn.co.jp
  28. hangame.co.jp
  29. ucom.ne.jp
  30. nikkei.co.jp
  31. dion.ne.jp
  32. impress.co.jp
  33. so-net.ne.jp
  34. im.tv
  35. dtiblog.com
  36. yaplog.jp
  37. fc2web.com
  38. itmedia.co.jp
  39. iij4u.or.jp
  40. kakaku.com
  41. plala.or.jp
  42. xmbs.jp
  43. yomiuri.co.jp
  44. teacup.com
  45. sytes.net
  46. nikkeibp.co.jp
  47. asahi.com
  48. gyao.jp
  49. nikkansports.com
  50. apserver.net
  51. ameba.jp
  52. shinobi.jp
  53. 99bb.com
  54. geocities.co.jp
  55. sub.jp
  56. allabout.co.jp
  57. gnavi.co.jp
  58. tbs.co.jp
  59. punyu.com
  60. x0.com
  61. nicovideo.jp
  62. home.ne.jp
  63. cgiboy.com
  64. vector.co.jp
  65. cool.ne.jp
  66. artemisweb.jp
  67. oricon.co.jp
  68. rakuten.ne.jp
  69. zombie.jp
  70. tosp.co.jp
  71. kir.jp
  72. sanspo.com
  73. atwiki.jp
  74. a8.net
  75. with2.net
  76. ddo.jp
  77. ime.nu
  78. fm-p.jp
  79. zakzak.co.jp
  80. peps.jp
  81. sponichi.co.jp
  82. nhk.or.jp
  83. cpz.to
  84. jp-sex.com
  85. jword.jp
  86. carview.co.jp
  87. japanpost.jp
  88. caribbeancom.com
  89. mapion.co.jp
  90. mycom.co.jp
  91. drecom.jp
  92. bidders.co.jp
  93. alc.co.jp
  94. mag2.com
  95. sony.co.jp
  96. tokyo.jp
  97. www.ne.jp
  98. lolipop.jp
  99. nttdocomo.co.jp
  100. bbspink.com