最近SPFについていろいろ調べているのですが、各ISPのSPFレコードをいろいろ調べてみると面白い。
それぞれ特徴、ポリシーみたいなものが見えるし、扱っているIPレンジの広さが垣間見える。
その中で au one net に統合された DION のSPFレコードを見ていたら、あらら~な状態になっていました。
# dig dion.ne.jp txt
dion.ne.jp. 3600 IN TXT "v=spf1 ip4:61.200.164.32/28 ip4:61.117.3.48/28 ip4:203.181.105.160/27 ip4:203.181.105.64/27 ip4:210.174.120.144/28 ip4:210.155.124.128/26 ip4:61.200.160.128/26 ip4:211.5.2.64/26 ip4:61.117.3.64/26 ip4:210.196.14.64/26 ip4:219.125.112.0/26 ip4:219.125.112." "128/25 ip4:210.251.0.0/25 ip4:61.117.18.96/27 ip4:61.117.18.192/26 ip4:211.5.1.64/26 ip4:210.196.2.160/27 ip4:219.125.149.119/32 ~all"
なんか変だぞと思ったら途中で途切れちゃってる。
ちょうど ip4:219.125.112." "128/25 のところ。
空白" "が入ってる。
でも入力ミスには見えないので文字数を数えてみると、TXTレコードの中身の256文字目に空白が入っている感じ。
これはクライアント側の処理の問題かな?
nslookupで見ても同じように表示されるなぁ。
RFCを見ると RFC-4408 の「3.1.3. 単一のDNSレコード中の複数行」「3.1.4. レコードのサイズ」にサイズついて書かれている。
http://www.iajapan.org/anti_spam/portal/Tech/RFC/RFC4408_11.html
またau自身のページにも「■SPF公開の注意事項」としてSPFレコードが255文字に収めるようにと書いてあるw
http://www.au.kddi.com/notice/manner/jyushin_policy/spf_record.html
DIONのネームサーバで、1レコードに255文字以上で登録してしまっているのかな?
450文字には収まっていますが、400文字近くありますね。
分割して include すればいいのに。その方が見易いし。とにかくDNS参照回数を減らしたかったのかな?
ちなみに、auone-net.jpのサブドメインも同じようなことになってしまっている:-(
# dig ab.auone-net.jp txt
ab.auone-net.jp. 3600 IN TXT "v=spf1 ip4:61.117.3.48/28 ip4:210.155.124.128/26 ip4:61.200.160.128/26 ip4:211.5.2.64/26 ip4:61.117.3.64/26 ip4:210.196.14.64/26 ip4:219.125.112.0/26 ip4:210.251.0.0/25 ip4:61.117.18.96/27 ip4:61.117.18.128/25 ip4:211.5.1.64/26 ip4:222.3.140.128/26 ip4:21" "0.141.108.0/24 ~all"
これってau one net のユーザのメールアドレスに使われているサブドメインでは?
ついでにこれも。レンジはみんなちょっとずつ違うみたいだね。
# dig ma.neweb.ne.jp txt
ma.neweb.ne.jp. 86400 IN TXT "v=spf1 ip4:61.117.3.48/28 ip4:210.155.124.128/26 ip4:61.200.160.128/26 ip4:211.5.2.64/26 ip4:61.117.3.64/26 ip4:210.196.14.64/26 ip4:219.125.112.0/26 ip4:210.251.0.0/25 ip4:61.117.18.96/27 ip4:61.117.18.128/25 ip4:211.5.1.64/26 ip4:203.140.129.5 ip4:222.3" ".140.128/26 ip4:210.141.108.176/27 ~all"
bind9なら起動時にエラー出るんじゃないかな?
http://bonz.squares.net/~dais/misc/migration.html#txt
試して無いけれど;-P
これって、メールを受信した側でSPFを実装していた場合、下手すると認証できないのじゃないかな?
大丈夫なのかな?
libspf2 にバンドルされている spfquery を使ってテストしてみると認証は上手く行くようです。
ちょうど空白が挟まって表示されたIPでクエリしてみると、
# spfquery -ip=219.125.112.129 -sender=user@dion.ne.jp -helo=dion.ne.jp
pass
spfquery: domain of dion.ne.jp designates 219.125.112.129 as permitted sender
Received-SPF: pass (spfquery: domain of dion.ne.jp designates 219.125.112.129 as permitted sender) client-ip=219.125.112.129; envelope-from=user@dion.ne.jp; helo=dion.ne.jp;
pass する。
空白のあとのレンジ、一番最後に記載されているIPでクエリしてみると、
# spfquery -ip=219.125.149.119 -sender=user@dion.ne.jp -helo=dion.ne.jp
pass
spfquery: domain of dion.ne.jp designates 219.125.149.119 as permitted sender
Received-SPF: pass (spfquery: domain of dion.ne.jp designates 219.125.149.119 as permitted sender) client-ip=219.125.149.119; envelope-from=user@dion.ne.jp; helo=dion.ne.jp;
やっぱり pass になる(送信ドメイン認証成功)。
動くみたいですね。
少なくとも libspf2 を使っている sendmail の spfmilter や exim の spf は動きそうかな。
■参考
・RFC-1035 DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION 日本語訳
・KDDIのニュース・リリース
KDDIの全ドメイン(DIONを含む)への送信ドメイン認証技術の導入開始について
http://www.kddi.com/corporate/news_release/2005/1206/index.html
