読者です 読者をやめる 読者になる 読者になる

woshidan's blog

そんなことよりコードにダイブ。

SPFってなんですか?

お仕事でSPFについて確認したのでブログにもメモを置きます。

参考: http://salt.iajapan.org/wpmu/anti_spam/admin/tech/explanation/spf/

SPFについて

  • メールの送信元の詐称を防ぐための認証技術

SPFでメールを認証するとは

SMTPでメールを送信するときはメールの送信元に関する下記の3つのドメイン(あるいはドメインのIP)はすべて違っても良いそうです。

  • a1. SMTPでメールサーバに接続してメールを送るという意味で、メール(SMTPが動いてるサーバ?)を送り出すサーバのIP cf. example.jp は 192.0.2.1
  • a2. SMTPMAIL FROMコマンドの引数となる送信者のメールアドレスのドメイン(エンベローブに入ってるらしい) cf. MAIL FROM:<sender@exmaple.org>
  • a3. 電子メールのヘッダ cf. FROM: user1@exmaple.com

そうなると、なんだか電子メールのヘッダをちょこちょこといじってメール送信元詐称が簡単にできそうですね。

SPFではメールを受信したサーバが a2 のメールアドレスのドメインSPFレコードのIPアドレスを見て、a1のサーバから送り出されたメールかどうか確認(認証)します。

SPFでメールを認証する手順

  • b1. a2ドメインで利用している権威DNSに、a2ドメインでメールを送り出すときに使うサーバのIPはこれです、とa1のメールサーバのIPアドレスを登録する(SPFレコードの登録)
  • b2. a2ドメインのアドレスがエンベローブのFROMには入っているメールを受け取ったメールサーバは、ドメインを見て、DNSexample.orgSPFレコードを問い合わせる
  • b3. b2の問い合わせの結果に、メールの送信元のサーバのIPが含まれていたら認証成功

認証に失敗したらどうなるの?

  • SPFレコードの登録がなくて失敗した ... 認証結果: None
    • 受け取り拒否にならず、迷惑メールフィルタでフィルタリングされるのに任せる場合が多いが、途中で受け取り拒否になる可能性もある
  • SPFレコードの登録があって失敗した ... 認証結果: Fail
    • RFCにおいてはこの結果に従って通信中のSMTPセッションにおいて該当メールの受信拒否を行う場合、550番エラーの利用を勧めているとあるので受け取り拒否になる可能性高そう

他にもありますが、参考元をご確認ください。

SPFでメールを送れなくなる理由

メールを送信するメールサーバのIPアドレスが、SMTPMAIL FROMコマンドの引数となる送信者のメールアドレスのドメインSPFレコードに入っていない?