2000/10/07
UNIX の TcpWrapper は UNIX をインターネットにさらす場合の必需品である。TcpWrapper は TCPポートへの外部からのアクセスを制御する事に徹したシンプルなプログラムであり、そのシンプルさ故にバグをいつまでも残す事はないであろう。
Plan9 には UNIX の TcpWrapper に相当するソフトウェアツールは存在しない。その代わり、Plan9 に備えつけのツールだけを使って遥かに強力な制御ができる。
FTP ポート(TCP21)を例に解説しよう。
このアクセスの口は
/bin/service/tcp21に存在する。tcp21 は単にシェルスクリプトである。
この中で
(1). TCP21 にアクセスしてきたリモートホストの IP とポート番号
(2). TCP21 コールを受け取ったローカルホストの IP とポート番号
を受け取る事が可能で、その下で匿名アクセス者に許すアクセス空間を指定できる。
#!/bin/rc ifs0=$ifs ifs=! r=`{cat $3/remote} ifs=! l=`{cat $3/local} ifs=$ifs0 switch($l(1)){ case 202.250.160.122 sysname=plan9 switch($r(1)){ case 192.168.[6-9].* 202.16.124.* 202.250.165.* exec /bin/ip/ftpd -a -n/lib/namespace.ftp.plan9.local $* case * exec /bin/ip/ftpd -a -n/lib/namespace.ftp.plan9 $* } case 202.250.160.40 sysname=ar exec /bin/ip/ftpd -a -n/lib/namespace.ftp.ar $* }
$3 には例えば
/net/tcp/90のような情報が渡される。最後の 90 はコネクション番号である。従って
cat $3/remoteの内容は
cat /net/tcp/90/remoteで得られる
164.46.240.3!18617と同じものである。
# bootes' root mount -a #s/boot / # this cuts off everything not mounted below /usr/web bind /usr/arisawa/netlib /usr/none # this cuts off everything not mounted below /usr/none bind /usr/none /