Sender Policy Framework
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/02/24 06:39 UTC 版)
実装
SPFの実装は2つの部分から成る。
ドメインが彼らを代表して電子メールを送信するために正式に認めたメールサーバを特定する。ドメインは彼らの既存のDNS情報へこの付加情報を追加する。配送先メールサーバはSPF情報を要求しそれを用いることができる。メールサーバは普段どおりのDNS問合せを使い、一般的にはDNSの性能向上のためにキャッシュされる。配送先メールサーバはSPFに記載された情報を解釈し、その結果に従い行動する。
このように、ドメインが設定し配送先メールサーバが用いる、新しいDNS情報の仕様がSPFの核心である。SPFレコードは下記のように標準的なDNS構文で設定される。example.jp. IN TXT "v=spf1 a mx -all"
「v=」は使用されたSPFのバージョンを定義する。以下の語は、あるドメインが電子メールを送信する資格があるかどうかを、決定するために用いる機構(Mechanism)を規定する。「a」および「mx」は、所定のドメインのために電子メールを送信することが許可されたコンピュータシステムを示す。SPFレコードの最後にある「-all」は、もしそれまでの機構が一致しなければ、メッセージは拒否されるべきということを示す。
機構
8つの機構が定義されている。
all | 常に真である。優先する機構に一致しない全てのIPアドレスのために、「-all」のように既定の結果として用いられる。 |
a | ドメイン名が、送信元メールサーバのIPアドレスに一致するAレコード(またはIPv6のためのAAAAレコード)を持っている場合に真となる(つまり電子メールは直接ドメイン名から届く)。 |
ip4 | 送信元メールサーバが所定のIPv4アドレス範囲にある場合に真となる。 |
ip6 | 送信元メールサーバが所定のIPv6アドレス範囲にある場合に真となる。 |
mx | 所定のドメイン名が、送信元メールサーバのIPアドレスに結び付けられるMXレコードを持っている場合に真となる(つまり電子メールはドメインのメールサーバの内のひとつから届く)。 |
ptr | 送信元メールサーバのIPアドレスに対する逆引きドメインを正引きした結果に(Forward Confirmed reverse DNS)、送信元メールサーバのIPアドレスが含まれること、及び逆引きドメインが所定のドメイン名で終わる場合に真となる。 |
exists | 所定のドメイン名で正引きを行い、Aレコードが存在する場合に(そのIPアドレスに関係なく)真となる。
これは、DNSBLのようにさらに複雑な照合に用いるSPFマクロ言語と一緒にしか、ほとんど使われない。 |
include | 所定の方針を取り込み、それがSPFの検証に合格する場合に真となる。これは複数のISPの方針を取り込むために標準的に使われる。 |
限定子
各々の機構は4つの限定子の内1つと結合させることができる。
- 「+」は検証の合格(Pass)を意味する。限定子を省略した場合の既定値として用いられ、「mx」は「+mx」と同等である。
- 「?」は検証の中立(Neutral)を意味する。方針が指定されていない場合(NONE)のように解釈される。
- 「~」は弱い失敗(SoftFail)を意味する。中立(Neutral)と失敗(Fail)の間をデバッグする助けとなる。
- 「-」は失敗(Fail)を意味する。電子メールは拒否されるべきである(下記参照)。
変更子
変更子はSPFの将来の拡張を考慮する。これまでのところ、RFC 7208で定められた2つの変更子については、広く展開された。
「exp=some.example.jp」は、DNSのTXTレコードにドメイン名を挙げる。それはSMTPエラーコードに加え失敗(Fail)の説明(一般的にはURL)を得るためにSPFのマクロ言語を用いて解釈される。この過度に装飾的な機能はほとんど使われない。
「redirect=some.example.jp」は、他ドメインのSPFレコードに「all」を結び付ける代わりに使うことができる。この変更子は幾らか類似した機構である「include」を理解するより簡単である。
エラー処理
SPF実装がSPFレコードの文法エラーを検出すると、直ちに恒久的エラー(PermError)として評価を中断しなければならない。誤っている機構を読み飛ばして続けると、その結果は予想できない。したがって「include:bad.example」や「redirect=bad.example」もまた「PermError」となる。
その他の安全策としては、DNSへ問合せる機構、すなわち「ip4」「ip6」「all」以外のあらゆる機構が、SPFレコード当たり最大10までに制限されている。SPF実装では、評価が長時間に渡る場合やDNSの問合せがタイムアウトとなった際に、一時的エラー(TempError)として評価の中断ができる。もしSPFが直接または間接的に10を超える問合せを必要とした場合は恒久的エラー(PermError)を返さなければならない。「redirect=」もまたこの処理制限に数えられる。
標準的なSPF宣言である「v=spf1 a -all」は、(1)TXTレコード、(2)SPFレコード、(3)AまたはAAAAレコードのように、DNS問合せが3回必要である。この最後のDNS問合せの数は、最初の機構から制限(10)に向かって合計された物であり、今回の例では「all」がDNS問合せを必要としないため、最初の機構が最後でもある。
- ^ 2008年10月、RFC 2822は、RFC 5322で置き換えられた。
- ^ “ドメイン認証規制”. 2009年9月11日閲覧。
- ^ “送信ドメイン認証SPFレコードについて”. 2009年9月11日閲覧。
- ^ “送信ドメイン認証(Sender ID/SPF)について”. 2009年9月11日閲覧。
- ^ “「かんたん設定」の導入とブロック機能拡張について”. 2009年9月11日閲覧。
- ^ “「Sender IDやSPFを逆手にとったスパムが増加」、米MX Logicの調査”. 日経BP (2005年7月16日). 2011年6月24日閲覧。
- ^ “迷惑メールへの対応の在り方に関する研究会 最終とりまとめ”. 2009年1月13日時点のオリジナルよりアーカイブ。2011年6月24日閲覧。
- Sender Policy Frameworkのページへのリンク