SPF
送信元のドメインが、そのメールサーバからの送信を許可しているか調べる送信ドメイン認証方式である。受信側は接続元のIPアドレスを、DNSで公開された送信許可の情報と照合する。主にSMTPのMAIL FROMで示されるドメインを確認する。
イマシルちゃんの解説
メールには、画面に表示される差出人とは別に、SMTPのMAIL FROMで伝える配送用の差出人もあるんだ。
SPFは、この配送用の差出人のドメインを名乗ってよい送信元かを調べる認証方式だよ。
ドメインの管理者は、送信を許可するメールサーバの情報をDNSのTXTレコードとして公開しておくの。
受信側はその情報と、実際に接続してきたサーバのIPアドレスを照合するんだ。
これで許可されていない送信元を見つけられるけれど、画面に表示される差出人やメールの内容まで正しいと保証するわけではないよ。
この解説はわかりやすかったですか?
より深い解説
定義
SPF(Sender Policy Framework)は、RFC 7208で定められた送信ドメイン認証の技術である。メールの送信元のドメインの管理者が、そのドメインのメールを送信する正規のメールサーバのIPアドレスを、DNSのTXTレコード(SPFレコード)に記述して公開する。受信側のメールサーバは、メールを送ってきたサーバのIPアドレスが、そのリストに含まれているかを確認する。
仕組み
- 送信側のドメインの管理者が、DNSにSPFレコードを登録する
- メールを受信したサーバは、SMTPのMAIL FROMコマンドで示された送信者(エンベロープの送信者)のドメインを取り出す
- そのドメインのSPFレコードを、DNSに問い合わせる
- メールを送ってきたサーバ(SMTPの接続元)のIPアドレスが、SPFレコードに含まれているかを照合する
MAIL FROMが[email protected]なら、確認するドメインはexample.netである。本文中のメールアドレスや、画面に表示するヘッダーのFromから選ぶわけではない。
配送エラー通知などで配送用の差出人が空になる場合は、HELOまたはEHLOで示されたドメインを使って評価する。接続時に名乗るこのドメインを、通常の配送用の差出人とは別に検証することもできる。
SPFレコードの例
example.jp. IN TXT "v=spf1 ip4:192.0.2.10 include:_spf.mail.example.net -all"
| 記述 | 意味 |
|---|---|
| v=spf1 | SPFのバージョン |
| ip4:192.0.2.10 | このIPアドレスからの送信を認める |
| include:… | 指定したドメインのSPFレコードの内容も含める(外部のメール配信サービスを使う場合など) |
| -all | それ以外からの送信は認めない(fail) |
| ~all | それ以外は許可する根拠が弱いとするsoftfail。受信側が扱いを決める |
認証の結果
| 結果 | 意味 |
|---|---|
| pass | 正規のサーバから送られた |
| fail | 正規のサーバではない(なりすましの可能性が高い) |
| softfail | 正規のサーバではないが、厳密には判断しない |
| none | SPFレコードがない |
結果をどう扱うか(拒否、隔離、受信して印を付けるなど)は、受信側が決める。この扱いを送信側が指定できるようにしたのがDMARCである。
SPFの弱点
| 弱点 | 内容 |
|---|---|
| 転送に弱い | メールが転送されると、転送したサーバのIPアドレスから送られるため、認証に失敗する |
| ヘッダーの送信者は確認しない | SPFが確認するのはエンベロープの送信者で、利用者が画面で見るヘッダーのFromは確認しない |
| 改ざんは検出できない | 送信元のサーバを確認するだけで、メールの内容の改ざんは検出できない |
これらを補うため、DKIM(電子署名による認証)やDMARC(ヘッダーのFromとの整合の確認)と組み合わせて使う。
送信ドメイン認証の比較
| 技術 | 確認の方法 | 確認するドメイン |
|---|---|---|
| SPF | 送信元サーバのIPアドレス | エンベロープの送信者(MAIL FROM)、またはHELOの識別情報 |
| DKIM | 電子署名 | 署名に記載されたドメイン(d=) |
| DMARC | SPFとDKIMの結果と、ヘッダーのFromとの一致 | ヘッダーのFrom |