SPF

提供: ArchWiki
ナビゲーションに移動 検索に移動

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-spfperl-mail-spf-query です。以下では python-postfix-policyd-spfAURpostfix メールサーバーを組み合わせています。

設定

適当に /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)。

参照