tcpserver(ucspi-tcp) の使い方についてのメモ

メモ一覧ページに戻る

説明と環境

tcpserver は、D.J.Bernstein によって作成されたサーバ制御ツールで、同様のツールに、inetd などがあります。tcpserver は、ucspi-tcp というパッケージに含まれています。

このページでは、特に、tcpserver と ucspi-tcp に含まれているツールについてまとめてみました。

このメモは、RedHat Linux 7.2の環境で作成しました。ソースからインストールしていますので、他の Unix系のシステムでも同様に設定できると思います。

一応、間違いがないように努力しているつもりですが、間違いや不明な点などがありましたら、メールで連絡して下さい。

目次


tcpserver について

tcpserver の特徴

目次へ戻る

インストール

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リモートホストのドメイン名。取得できない場合はセットされない。任意の文字列を含むことに注意
TCPREMOTEINFOIDENT によって取得されるリモートホストの情報。得られない場合は変数はセットされない

目次へ戻る

起動例

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 &

目次へ戻る

接続制御データベース(cdb)について

作成方法

次のような書式のファイルを作成します。

[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="" )を設定
--------------------------------

作成したファイルを cdb 形式に変換

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 について

書式

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

目次へ戻る

ucspi-tcp パッケージについて

含まれるパッケージ(一部)

tcpserverUNIX の inetd を置き換えるプログラム。リモートクライアントからTCP接続を受取り、コマンドラインパラメータで指定されているアプリケーションに渡す。
tcpclientリモートサーバとネットワークを確立し、接続をアプリケーションに渡すためのプログラム
tcprulesアプリケーションプログラムへの接続を制限するルールを作成する
tcpruleschecktcprules で作成したルールをチェックする
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 | メモ一覧ページへ戻る