SPF : Sender Policy Framework
目次 †
SPFとは †
SPFで記述するホスト情報は、限定子(qualifier)と機構(mechanism)
限定子(qualifier)
qualifier | | 解説 |
+ | Pass | 認証成功 |
- | Fail | 認証失敗。この定義にマッチするホストからはメールが送信されることはない |
~ | SoftFail? | 認証情報を公開しているが、場合によっては認証できないメールも存在する |
? | Neutral | 認証情報を公開しない |
機構(mechanism)
mechanism | 記述文法 | 解説 |
all | all | すべてのホストにマッチする。All以降に記述されたほかのメカニズムやredirectモディファイヤは無視される。 SPFレコードの末尾に置かれ、else的な役割を持つ |
include | include:ドメインスペック | ドメインスペックに指定されたドメインのSPFレコードを読み出しチェックを実施する |
a | a:ドメインスペック | ドメインスペックに指定されたホスト名のAレコードにマッチする |
mx | mx:ドメインスペック | 指定されたドメインスペックのMXレコードにリストされているホストのAレコードと比較する |
ptr | PTR:ドメインスペック | 該当接続の接続元IPアドレスをリバースルックアップして得たホスト名が ドメインスペックに指定されたドメインに属しているかチェックする |
ipv4 | ip4:ネットワークアドレス またはIPアドレス | 接続元のIPアドレスが指定されたネットワークに含まれているか、またはIPアドレスにマッチするかチェックする。 ネットワークの指定にはCIDR表記が可能 |
ipv6 | ip6:ネットワークアドレス またはIPアドレス | 接続元のIPアドレスが指定されたネットワークに含まれているか、またはIPアドレスにマッチするかチェック。 ただしIPv6のアドレス |
exists | exists:ドメインスペック | ドメイン名またはホスト名に指定された表記でAレコードルックアップを実施し、該当のAレコードが存在すればマッチする |
修飾子(modifier)
modifier | 記述文法 | 解説 |
redirect | redirect=ドメインスペック | ドメインスペックに指定されたドメインでのチェックへ転送する。 include:と比較すると、同じ管理化にあるドメインへ定義を集約する場合に使う |
exp | exp=ドメインスペック | ドメインスペックに指定されたドメインのTXTレコードに、認証できなかった場合の理由の 説明として扱われる文字列が含まれている |
送信側の設定 †
SPFを利用するためには送信側でも設定を行わなければならない。送信側ではDNSとしてSPFレコードを追加する必要がある。SPFの説明で記述したコードに従い記述していく。
記述内容は簡単で、単にDNSのテキストレコードに記述するだけでよい。
BINDであれば記述するのは簡単なのだが、DJBDNSで記述しようとするとコロン(:)をそのまま記述できないためかなり悩みました。
とりあえず、例として「example.jp」というドメインで、メールサーバのIPアドレスが「192.168.0.254」というシステムにおけるのSPFレコードを記述してみることとします。
BIND
example.jp. IN TXT "v=spf1 mx:192.168.0.254 ~all"
DJBDNS
'example.jp:v=spf1 mx mx\072192.168.0.254:3600
DJBDNSの場合にはエスケープシーケンスを記述しなければコロンを記述できません。エスケープシーケンスは「\072」です。この後にIPであったり、ホスト名を記述すれば問題ありません。
受信側の設定 †
Postfixを用いたSPFの設定
CPAN
# perl -MCPAN -e shell
cpan> install Mail::SPF::Query
cpan> quit
参考ページ †
SPF Project
CPAN Mail-SPF-Query