D. J. Bernstein
TCP/IP
ucspi-tcp

tcprules プログラム

tcprulestcpserver 用の規則をコンパイルします。

使い方

     tcprules cdb tmp

tcpserver では TCP 接続を許可するかどうかを決めるために規則が書けます。 例えば、

     18.23.0.32:deny
という規則は IP アドレス 18.23.0.32 からの接続を禁止します。

tcprules は標準入力から規則を読み、tcpserver が高速アクセスできるようなバイナリ形式で cdb に書き出します。

tcprulestcpserver が動作中でも使えます。 cdb がアトミックに更新されることを保証します。 まず始めに tmp に規則を書き、それから cdb として tmp を移動します。 tmp がすでに存在していたら、壊されます。 cdbtmp を含むディレクトリは tcprules にとって書き込み可能でなければなりません。 また同一ファイルシステム上になければなりません。

入力 や tmpに問題があれば、tcprules はメッセージを出し、cdb を変更せずに終了します。

バイナリ cdb 形式はマシン間で可搬性があります。

規則形式

規則は一行ずつ取り扱われます。 規則のファイルはコメントも含められます。 # で始まる行は無視されます。

各規則は余計なスペースを含めずに、アドレス、コロン、命令の一覧の順に書きます。 tcpserver がそのアドレスから接続されると、その命令に従います。

アドレス

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
$TCPREMOTEIP10.119.75.38 であれば、tcpserverthird の命令に従うでしょう。

$TCPREMOTEIP18.23.0.32 であれば、tcpserversecond の命令に従うでしょう。

$TCPREMOTEIP127.0.0.1 であり、$TCPREMOTEINFObill であれば、tcpserverfourth の命令に従うでしょう。

$TCPREMOTEIP127.0.0.1 であり、$TCPREMOTEINFOjoe であれば、tcpserverfirst の命令に従うでしょう。

tcprulescheck を使えば、tcpservercdb の規則をどのように解釈しているかわかります。

アドレス範囲

tcprules1.2.3.37-53:ins1.2.3.37:ins, 1.2.3.38:ins そして、1.2.3.53:ins までの規則の省略形として扱います。 同様に、10.2-3.:ins10.2.:ins10.3.:ins の省略形です。

命令

規則における命令は allowdeny のどちらかで始めなければなりません。 denytcpserver が何も起動せずに接続を切るように命令します。 例えば、規則
     :deny
は他のどの規則も適応されなかったアドレスからの接続を切るように tcpserver に命令します。

命令は var="x" という形式でいくつかの環境変数を設定して続けられます。 tcpserverx という値を持つ環境変数 $var を付け加えます。 例えば、

     10.0.:allow,RELAYCLIENT="@fix.me"
@fix.me という値を持った環境変数 $RELAYCLIENT を付け加えます。 ここで引用符は次のように繰り返される任意の文字で置き換えてかまいません。
     10.0.:allow,RELAYCLIENT=/@fix.me/
次のように変数は何個でも並べることができます:
     127.0.0.1:allow,RELAYCLIENT="",TCPLOCALHOST="movie.edu"

訳:滝澤 隆史
Last modified: Sun Nov 19 22:15:38 2000