tcpserver は、D.J.Bernstein によって作成されたサーバ制御ツールで、同様のツールに、inetd などがあります。tcpserver は、ucspi-tcp というパッケージに含まれています。
このページでは、特に、tcpserver と ucspi-tcp に含まれているツールについてまとめてみました。
このメモは、RedHat Linux 7.2の環境で作成しました。ソースからインストールしていますので、他の Unix系のシステムでも同様に設定できると思います。
一応、間違いがないように努力しているつもりですが、間違いや不明な点などがありましたら、メールで連絡して下さい。
tcpserver は ucspi-tcp に含まれているため、ucspi-tcp をインストールします。
$ wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz $ tar zxvf ucspi-tcp-0.88.tar.gz $ cd ucspi-tcp-0.88 $ su $ make # make setup check
tcpserver [オプション] [ホスト名または、IPアドレス] [ポート番号] [サービスを行うプログラム]
[ -1pPhHrRoOdDqQv ] [ -c limit ] [ -x rules.cdb ] [ -B banner ] [ -g gid ] [ -u uid ] [ -b backlog ] [ -l localname ] [ -t timeout ]
-1 | 受信準備が完了した後にに標準出力にローカルポート番号を出力する。 |
---|---|
-p | ホスト名を調べた後、逆引きを問い合わせ、IPアドレスが一致しない場合、 $TCPREMOTEHOST を設定しない |
-P | ホスト名を調べた後、逆引きを問い合わせない(デフォルト) |
-h | 接続元のホスト名をDNSに問い合わせて、結果を $TCPREMOTEHOST に格納する(デフォルト) |
-H | 接続元のホストをDNSに問い合わせない |
-r | 接続元ホストから $TCPREMOTEINFO を取得する(デフォルト) |
-R | 接続元ホストから $TCPREMOTEINFO を取得しない |
-q | エラーメッセージを出力しない |
-Q | エラーメッセージを出力する(デフォルト) |
-v | エラーメッセージとステータスメッセージを出力する |
-c | [接続数] 同時に起動できる接続数の上限を指定 |
-x | [cdb ファイル] cdb ファイルに指定されたルールに従う |
-B | [バナー] 接続時にバナーを出力する |
-g | [GID] ポートを受け付けるグループID |
-u | [UID] ポートを受け付けるユーザID |
-b | [バックログ数] TCP SYNのバックログを許可する。SYN cookies をサポートしているシステムでは、バックログは無意味。 |
-l | [localname] DNSでローカルホスト名を調べない。環境変数 $TCPLOCALHOST には localname を使用 |
-t | [秒数] 指定した秒後に、$TCPREMOTEINFO 接続を停止する(デフォルトは26秒) |
PROTO | 使用するプロトコル(デフォルト:TCP) |
TCPLOCALIP | ローカルホストのIPアドレス |
TCPLOCALPORT | ローカルホストのTCPポート番号 |
TCPLOCALHOST | ローカルホストのドメイン名。取得できない場合はセットされない。任意の文字列を含むことに注意 |
TCPREMOTEIP | リモートホストのIPアドレス |
TCPREMOTEPORT | リモートホストのTCPポート番号 |
TCPREMOTEHOST | リモートホストのドメイン名。取得できない場合はセットされない。任意の文字列を含むことに注意 |
TCPREMOTEINFO | IDENT によって取得されるリモートホストの情報。得られない場合は変数はセットされない |
tcpserver に cdb ファイルを指定して qmail を起動 ( /etc/tcp.smtp.cdb が存在して、qmail が /var/qmail にインストールされていて、qmaildのUID: 1001, nofiles のGID: 1001 の場合 )
# /usr/local/bin/tcpserver -HR -x /etc/tcp.smtp.cdb -u 1001 -g 1001 0 smtp /var/qmail/bin/qmail-smtpd &
上記の設定で接続ログを残す場合(オプションの H や R などは必要に応じて変更する必要があります)
# /usr/local/bin/tcpserver -vHR -x /etc/tcp.smtp.cdb -u 1001 -g 1001 0 smtp /var/qmail/bin/qmail-smtpd \ 2>&1 | /var/qmail/bin/splogger smtpd &
次のような書式のファイルを作成します。
[IPアドレス]:[制御]
例 1: 特定のユーザ(ftpuser)、ホスト(192.168.1.1)から FTP を許可し、192.168.2.1 または、192.168.0.* からはすべて許可する場合
# vi /etc/tcp.ftp
/etc/tcp.ftp ---------------------------- ftpuser@192.168.1.1:allow ← 192.168.1.1 の ftpuser からのアクセスを許可 192.168.2.1:allow ← 192.168.2.1 からのアクセスを許可 192.168.0.:allow ← 192.168.0.* からのアクセスを許可 :deny ← 上記以外のホストからのアクセスを拒否 ----------------------------
例 2: 特定のホスト(192.168.0.* および、ローカルホスト)からの SMTP 接続に対して環境変数(RELAYCLIENT="")を設定して接続を許可する場合
# vi /etc/tcp.smtp
/etc/tcp.smtp -------------------------------- 192.168.0.:allow,RELAYCLIENT="" ← 192.168.0.* からのアクセスを許可し環境変数( RELAYCLIENT="" )を設定 127.:allow,RELAYCLIENT="" ← 127.*(ローカルホスト) からのアクセスを許可し環境変数( RELAYCLIENT="" )を設定 --------------------------------
tcprules を使用します(ucspi-tcp に含まれています)。
# /usr/local/bin/tcprules /etc/tcp.ftp.cdb /etc/tcp.ftp.tmp < /etc/tcp.ftp # /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
tcprules [作成する cdb ファイル] [作成時の一時ファイル]
# /usr/local/bin/tcprules /etc/tcp.ftp.cdb /etc/tcp.ftp
注意:
# /usr/local/bin/tcprules /etc/tcp.ftp.cdb /etc/tcp.ftp.tmp < /etc/tcp.ftp
tcpserver | UNIX の inetd を置き換えるプログラム。リモートクライアントからTCP接続を受取り、コマンドラインパラメータで指定されているアプリケーションに渡す。 |
tcpclient | リモートサーバとネットワークを確立し、接続をアプリケーションに渡すためのプログラム |
tcprules | アプリケーションプログラムへの接続を制限するルールを作成する |
tcprulescheck | tcprules で作成したルールをチェックする |
rblsmtpd | スパムメールの問題に対応するために使用されるプログラム |
mconnect | リモートメールサーバと対話型のSMTP接続を確立するためのプログラム |
addcr | テキストにキャリッジリターンを追加する |
delcr | テキストのキャリッジリターンを削除する |
date@ | tcpclient を使用してリモートホストの daytime ポートに接続し、日時を取得する |
finger@ | tcpclient を使用してリモートホストの finger ポートに接続し、ローカルユーザの情報を取得する |
http@ | tcpclient、addcr、delcr を使用してリモートホストの HTTP に接続し、HTMLページを取得する |
who@ | tcpclient、delcr を使用してリモートホストの who ポートに接続し、ログインユーザの一覧を取得する |
そのほかにも、ucspi-tcp パッケージにはいくつかのプログラムが含まれています。
注意:
LastUpdate: 2002/05/06 | メモ一覧ページへ戻る