□SPFレコードのチェックについて
□SPFレコードのチェックについて
MyDNS.JPでTXTレコードを任意に追加させるために方法を考えていたのだが、簡単に現状のレコードに追加させるには(DNSクエリは増えるが)、別途指定する任意のTXTレコードをincludeさせるのが手っ取り早いと考えた。
でも、そのTXTレコードはみんな追記するわけではないので、というかほとんどの人は「何ですかそれ?」として追記しないので、includeしようとするTXTレコードがないという場合が99.9%だけど、まぁそれでもSPFの動作的にOKなのかどうかを調べてみた。(正確な仕様がわからないのでごめんなさいごめんなさいごめんなさい)
テスト方法
example.co.jpのTXTレコードを設定、そこに include:_spf.example.co.jp と記述することで別のTXTレコードを読み込むようにするが、_spf.example.co.jpにはTXTレコードは記述しない。
http://www.sendmail.co.jp/sa/spfcheck.html?ih=er
→PASS
http://www.microsoft.com/mscorp/safety/content/technologies/senderid/wizard/
→PASS
http://web.fpso.jp/article.php/20080712212656433
→PASS
http://www.kitterman.com/spf/validate.html
→ERROR
include先がないとどうなるかというと
http://dnsops.jp/bof/20080709/dnsops-bof-log-20080709.html
とか
http://salt.iajapan.org/wpmu/anti_spam/admin/operation/information/spf_i01/
とか
http://ja.wikipedia.org/wiki/Sender_Policy_Framework
をみると、エラーとしなければいけないようなのだけど、あのsendmailやMicrosoftののチェックサイトがPASSを返すことを考えると、これはどうしたものかと思うのだよね。
Wikipediaだから怪しいというのはおいといて、
「SPF実装がSPFレコードの文法エラーを検出すると、直ちに恒久的エラー(PermError)として評価を中断しなければならない。誤っている機構を読み飛ばして続けると、その結果は予想できない。したがって「include:bad.example」や「redirect=bad.example」もまた「PermError」となる。」
と明記されているのになぁ、確かに「_spf.example.co.jp」(のTXTレコード、というかSPFレコード)が存在しないなら、その時点でエラーであるべきなんだが、どうも上記のPASSしてしまっているチェックサイトはcheck_host();の結果の判定か、もしくはcheck_host();の実装そのものがおかしいのではないかという気がする。
いずれにしても、PASSとERRORのサイトが混在する以上、この方法は使えないか…