Files
wiki/infrastructure/mail/security/spf.md
T
2026-09-22 16:11:58 +02:00

55 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SPF(Sender Policy Framework)
SPFSender Policy Framework)は、送信ドメインがDNSのTXTレコードでメールの送信を許可するIPアドレスを公開し、受信側のSMTPサーバが送信元IPアドレスの正当性を検証する仕組み
## 検証の流れ
1. **メールの送信** ... 送信側のSMTPサーバが、受信側のSMTPサーバにメールを送信
2. **送信元ドメインの取得** ... 受信側のSMTPサーバが、エンベロープFrom(MAIL FROM)から送信元ドメインを取得
3. **SPFレコードの取得** ... 送信元ドメインのDNSに問い合わせ、SPFレコード(TXTレコード)を取得
4. **IPアドレスの照合** ... 実際に接続してきた送信側SMTPサーバのIPアドレスが、SPFレコードで許可されているかを確認
5. **検証結果の判定** ... 照合結果に応じて、pass(認証成功)やfail(認証失敗)などの結果を返す
## SPFレコードの設定例
特定のIPv4アドレスのみ許可する:
```
v=spf1 ip4:192.0.2.1 -all
```
- IPアドレスで指定する場合、`ip4:`もしくは`ip6:`をプレフィックスに用いる
複数のIPv4アドレスを許可する:
```
v=spf1 ip4:192.0.2.1 ip4:192:.0.0.2 -all
```
Aレコードに登録されたIPアドレスを許可する:
```
v=spf1 a -all
v=spf1 a:mail.example.com -all
```
MXレコードが指すIPアドレスを許可する:
```
v=spf1 mx -all
```
外部のメール送信サービスを利用する場合:
```
v=spf1 include:_spf.example.com -all
```
## 補足:SPFレコードの識別
素朴な疑問:
> SPFレコードってただのTXTレコードだから、複数のTXTレコードがあっても大丈夫なのだろうか
複数のTXTレコードが登録されている場合:
```
example.com. IN TXT "v=spf1 ip4:192.0.2.1 -all"
example.com. IN TXT "google-site-verification=xxxxxxxx"
example.com. IN TXT "example-verification=yyyyyyyy"
```
- `v=spf1`で始まるレコードがSPFレコードとして識別される
- SPFレコードが複数存在する場合はNG