## page was renamed from DJB/tools/ucspi-tcp = DJB/tools/ucspi-tcp/tcprules = http://cr.yp.to/ucspi-tcp/tcprules.html <> {{{ D. J. Bernstein [Translated into Japanese by MAENO Toshinori] TCP/IP ucspi-tcp tcprulesプログラム }}} tcprules は tcpserverのための ルールをcdb形式に変換する。 == 使いかた == {{{ tcprules cdb tmp }}} tcpserver では TCP 接続を受けいれるかどうかを決定するためのルールを指定できる。 例えば以下のルールでは IP アドレス 18.23.0.32 からの接続を禁止する。 {{{ 18.23.0.32:deny }}} tcprules は標準入力からルールを読みこみ、 tcpserverが高速アクセスするのに適したバイナリ形式に変換してcdbに書きだす。 tcprules は tcpserver が実行中に使ってもかまわない。 cdb がアトミックに更新されることを保証している。 その方法はこうである。 まず、ルールを tmp に書く。 そして、tmp を cdbに moveして置き換える。 もしtmp が既に存在していたなら、破棄される。 cdb と tmp が存在するディレクトリは tcprulesが書きこみ可能でなければならない; これらは同一ファイルシステム上になければならない。 入力もしくは tmpに問題があった場合、 tcprules は警告を出力し、cdb は変更されないい。 cdb バイナリ形式はマシン間でポータブルである。 == ルールの表現形式 == 一行に一つのルールを書く。 ルールを書いたファイルにはコメントも入れられる。すなわち、行頭に #のある行は無視される。 各ルールにはひとつのaddress、一つの ":"(コロン)、そして、一連の instructions の順に書く。 余分の空白を含めてはならない。 当該 addressからの接続要求を受けとると tcpserver は instructionsに書かれてことに従う。 == Addresses(アドレス) == tcpserverは以下の形のアドレスを順にルール中に探す: 1. $TCPREMOTEINFO@$TCPREMOTEIP ($TCPREMOTEINFOが設定されているとき) 2. $TCPREMOTEINFO@=$TCPREMOTEHOST ($TCPREMOTEINFO と $TCPREMOTEHOST が設定されているとき) 3. $TCPREMOTEIP 4. =$TCPREMOTEHOST ($TCPREMOTEHOST が設定されているとき) 5. 長い方から順に短い方向へドットで終わる $TCPREMOTEIPのプレフィックス(接頭子) 6. 長い順にドットで始まる$TCPREMOTEHOSTのサフィックス(接尾子)を探す ただし、=が先頭にあるもの。 ($TCPREMOTEHOST が設定されているとき) 7. = ($TCPREMOTEHOST が設定されているとき) 8. 空文字列 tcpserver は最初に見つかったルールを採用する。 $TCPREMOTEHOSTを使う場合には tcpserverの -p オプションを指定すべきである。 以下のようなルールを例に説明する: {{{ joe@127.0.0.1:first 18.23.0.32:second :third 127.:fourth }}} * $TCPREMOTEIP が 10.119.75.38 であれば、 tcpserver は 3番 thirdの指示に従う。 * $TCPREMOTEIP が 18.23.0.32 であれば、 tcpserver は 2番 secondの指示に従う。 * $TCPREMOTEIP が 127.0.0.1 であり、 $TCPREMOTEINFO が bill であるなら、 tcpserver は 4番 fourth の指示に従う。 * $TCPREMOTEIP が 127.0.0.1 であり、 $TCPREMOTEINFO が joe であるなら、 tcpserver は 1番 first の指示に従う。 tcprulescheckを使えば、 tcpserverが cdbのルールをどう解釈するかを 確認できる。 == アドレスの範囲指定 == tcprulesは 1.2.3.37-53:ins を以下の複数のルールの省略形とみなす。 1.2.3.37:ins, 1.2.3.38:ins, そして、 1.2.3.53:insまでのものすべて。 同様に 10.2-3.:ins は 10.2.:insと 10.3.:ins の省略形である。 == 指示(Instructions) == ルールに書く指令は allow または denyで始める。 deny は tcpserver に対して、 なにも実行することなく接続を切断することを指示する。 例えば、以下のルール {{{ :deny }}} は より限定された別のルールにあてはまらない接続に対し、 tcpserver に切断するよう指示する。 指令にはコンマで区切って環境変数の設定(var="x") を続けることができる。 これは環境変数 $var に x という値を設定する。 例えば、 {{{ 10.0.:allow,RELAYCLIENT="@fix.me" }}} というルールは@fix.meという値をもった環境変数 $RELAYCLIENT を付けくわえる。 ダブルクオートの対は他の文字の対でも構わない: 10.0.:allow,RELAYCLIENT=/@fix.me/ 環境変数は複数あってもよい: 127.0.0.1:allow,RELAYCLIENT="",TCPLOCALHOST="movie.edu" ---- 2000-11-15 訳 前野年紀 publicfile djbdns moin向け整形 -- ToshinoriMaeno <>