土曜日, 7月 21, 2007

ルール3に関する説明を訂正

 S25Rの一般規則のルール3の正規表現は次のとおりである。

/^([^.]+\.)?[0-9][^.]*\.[^.]+\..+\.[a-z]/

これについて、論文に次のような説明を書いていた。

 正規表現の末尾にある「\.[a-z]」は、トップレベルドメイン名の先頭にマッチする。これは、逆引きが失敗した時にIPアドレスのドット付き十進表記を引っかけないために必要である。逆引き名を持たないクライアントをこの規則で引っかけるよりも、Postfixが「cannot find your hostname(ホスト名が見つからない)」というメッセージをメールログに残すのに任せた方がよい。

これは正確な説明でなかった。次のように修正した。

 正規表現の末尾にある「\.[a-z]」は、トップレベルドメイン名の先頭にマッチする。これは、あらゆるIPアドレスのドット付き十進表記を引っかけないために必須である。これがないと、デフォルトで許可されるべきあらゆるクライアントを引っかけてしまう。

 どういうことかというと、以下のとおりである。
 Postfixは、check_client_access指定によってクライアントアドレスを正規表現のファイルと照合する時、まず逆引きFQDN(逆引きが失敗したら「unknown」)で上から順にサーチし、どれともマッチしなければ次にIPアドレスのドット付き十進表記で上から順にサーチする。
 もしルール3の正規表現に「\.[a-z]」がないと、あらゆるIPアドレスのドット付き十進表記がマッチしてしまう。だから、逆引きできてFQDNがS25Rの一般規則にもブラックリストにもマッチしない(すなわちデフォルトで許可されるべき)ホストは、IPアドレスのドット付き十進表記でサーチした時にここで引っかかって蹴られてしまうのである。「『\.[a-z]』を抜いても、逆引きできないホストがここで引っかかるだけで、支障はない」のではなく、「抜いてはならない」のである。
 上述のようなサーチ順序を知ったのは、ドキュメントからではない。逆引きFQDNが一般規則に引っかかるホストの許可条件をIPアドレスの十進表記で記述しても許可されないことがわかったからである。まず逆引きFQDNでクライアント制限設定ファイルを上から順にサーチするので、IPアドレスの十進表記が許可条件にマッチする前にFQDNが拒否条件にマッチしてしまうのだと気付いた。
 このことは、論文を発表した時点では知らなかった。発表後にわかったのである。それに基づいて論文の記述は修正していたのだが、前述の不正確な説明がまだ残っていたことに今日まで気付かなかった。

0 件のコメント: