SPF
Sender Policy Framework (SPF) はドメインを使ってメールを送信する許可を得ているサーバーを識別するためのプロトコルです。レコードで説明している DNS TXT レコードとバリデータで説明している検証メールフィルターから成ります。SPF を使用するとメールの転送に問題が発生します。解決方法は下の Sender Rewrite Scheme (SRS) セクションを見てください。
目次
レコード
レコードは v=spf1 ip4:192.0.2.0/24 ip4:198.51.100.123 a -all
のようにすることができ、メールを送信するドメインの TXT レコードとして入力します。
以下のタグを使うことができます:
タグ名 | 説明 |
---|---|
ALL | 全てにマッチします。-all のようにして先に記述したタグにマッチしない IP を指定するために使われます。 |
A | ドメインの A と AAAA レコードにマッチします。 |
IP4 | 特定の IPv4 アドレスまたはアドレスの範囲にマッチします。 |
IP6 | 特定の IPv6 アドレスまたはアドレスの範囲にマッチします。 |
MX | ドメインの MX レコードにマッチします。 |
PTR | PTR レコードにマッチします。もはやこのタグは使われていません。 |
EXISTS | アドレスと無関係に、ドメインが存在するかどうかにマッチします。使用されることは稀です。SPF のマクロ言語と一緒に使うことで DNSBL クエリのような複雑なマッチを行うことができます。 |
INCLUDE | 特定のドメインの SPF レコードをインクルードします。 |
さらに以下の記号を使うことができます:
記号 | 説明 |
---|---|
+ | PASS (通過)。記号は省略できます: +mx は mx と同じです。 |
? | NEUTRAL は NONE と同じように解釈されます (ポリシーなし)。 |
~ | SOFTFAIL。NEUTRAL と FAIL の中間でデバッグ用に使われます。SOFTFAIL を返したメッセージは承認されますがタグが付きます。 |
- | FAIL。メールは送られません (下を参照)。 |
バリデータ
以下は Postfix における設定です。
インストール
SPF バリデータは複数の実装が存在しますが [1]、公式リポジトリからインストールできるのは perl-mail-spf と perl-mail-spf-query です。以下では python-postfix-policyd-spfAUR と postfix メールサーバーを組み合わせています。
設定
適当に /etc/python-policyd-spf/policyd-spf.conf
を編集してください。コメントが豊富に付いているファイルが /etc/python-policyd-spf/policyd-spf.conf.commented
に存在します。HELO チェックポリシーにはよく注意してください。標準設定では HELO の失敗を厳格にリジェクトしています。
Postfix の統合
main.cf
に policyd のタイムアウトを追加してください:
/etc/postfix/main.cf
policy-spf_time_limit = 3600s
さらにトランスポートを追加してください:
/etc/postfix/master.cf
policy-spf unix - n n - 0 spawn user=nobody argv=/usr/bin/policyd-spf
最後に smtpd_recipient_restrictions
に policyd を追加してください。負担を最小限にするために制限の一番下に記述してください:
/etc/postfix/main.cf
smtpd_recipient_restrictions= ... permit_sasl_authenticated permit_mynetworks reject_unauth_destination check_policy_service unix:private/policy-spf
テスト
以下のコマンドでセットアップをテストできます:
/etc/python-policyd-spf/policyd-spf.conf
defaultSeedOnly = 0
Sender Rewrite Scheme (SRS)
メールを転送したときに SPF のチェックが行われないように、SRS はドメインの ENVELOPE-FROM フィールドを書き換えて受信者のサーバーで SPF テストを通過させるスキームを提供しています。オープンなリレーを作成してしまったり返ってきたメールを受け取らないようにするため、しばしばサーバーだけが知っている暗号とオリジナルのアドレスから作られたハッシュがバウンスメールを検証するのに使われます。postfix の場合 postsrsdAUR をインストールして以下のように設定してください:
/etc/postsrsd/postsrsd
SRS_DOMAIN=yourdomain.tld SRS_EXCLUDE_DOMAINS=yourotherdomain.tld,yet.anotherdomain.tld SRS_SEPARATOR== SRS_SECRET=/etc/postsrsd/postsrsd.secret SRS_FORWARD_PORT=10001 SRS_REVERSE_PORT=10002 RUN_AS=postsrsd CHROOT=/usr/lib/postsrsd
デーモンを起動・有効化して、再起動しても動作することを確認してください。その後、以下の行を変更して Postfix を設定してください:
/etc/postfix/main.cf
sender_canonical_maps = tcp:localhost:10001 sender_canonical_classes = envelope_sender recipient_canonical_maps = tcp:localhost:10002 recipient_canonical_classes= envelope_recipient,header_recipient
Postfix を再起動してメールを転送してみてください。
備考
SPF はメールを送信しないドメインでも有用です。v=spfv -all
のようにポリシーを発布することであなたのドメイン名を騙ってメールが送信されることを防ぎます。
既知の問題
メールプロバイダの中には FROM フィールドのメールアドレスを使用して送信者を改変してメールを送信してしまう業者がいます。悪い習慣ですがまだ蔓延っており、厳格な SPF ポリシーによってメールは拒否されます (v=spf1 a -all
)。