1. 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形式に変換する。
1.1. 使いかた
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 バイナリ形式はマシン間でポータブルである。
1.2. ルールの表現形式
一行に一つのルールを書く。
- ルールを書いたファイルにはコメントも入れられる。すなわち、行頭に #のある行は無視される。
各ルールにはひとつのaddress、一つの ":"(コロン)、そして、一連の instructions の順に書く。
- 余分の空白を含めてはならない。
当該 addressからの接続要求を受けとると tcpserver は instructionsに書かれてことに従う。
1.3. Addresses(アドレス)
tcpserverは以下の形のアドレスを順にルール中に探す:
- $TCPREMOTEINFO@$TCPREMOTEIP ($TCPREMOTEINFOが設定されているとき)
- $TCPREMOTEINFO@=$TCPREMOTEHOST ($TCPREMOTEINFO と $TCPREMOTEHOST が設定されているとき)
- $TCPREMOTEIP
- =$TCPREMOTEHOST ($TCPREMOTEHOST が設定されているとき)
- 長い方から順に短い方向へドットで終わる $TCPREMOTEIPのプレフィックス(接頭子)
- 長い順にドットで始まる$TCPREMOTEHOSTのサフィックス(接尾子)を探す
- ただし、=が先頭にあるもの。 ($TCPREMOTEHOST が設定されているとき)
- = ($TCPREMOTEHOST が設定されているとき)
- 空文字列
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のルールをどう解釈するかを 確認できる。
1.4. アドレスの範囲指定
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 の省略形である。
1.5. 指示(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 2021-05-04 02:23:01