tcpserver は D.J.Bernstein 氏作のサーバ制御ツールで ucspi-tcp というパッケージに入っています。
UCSPI とは DJB 氏が提案している UNIX Client-Server Program Interface という TCP/IP のクライアント・サーバ通信ツールの
インターフェースの仕様です。また、接続制御のために同氏作のデータベースファイル(cdb) を用います。
cdbを用いてユーザ名、IPアドレス、ドメイン名を元にメールの転送、受信の制御を行うことができます。通常qmailを利用する場合は、
このtcpserver経由で動作させます。
構文 |
tcpserver [option] [host] [port] [program]
|
オプション |
-1
|
受信準備が完了した後に標準出力にローカルポート番号を出力する。
|
-p
|
ホスト名を調べた後、逆引きを問い合わせ、IPアドレスが一致しない場合、$TCPREMOTEHOSTを設定しない
|
-P
|
ホスト名を調べた後、逆引きを問い合わせない
|
-h
|
接続元のホスト名をDNSに問い合わせて、結果を $TCPREMOTEHOST に格納する
|
-H
|
接続元のホストをDNSに問い合わせない
|
-r
|
接続元ホストから $TCPREMOTEINFO を取得する
|
-R
|
接続元ホストから $TCPREMOTEINFO を取得しない
|
-q
|
エラーメッセージを出力しない
|
-Q
|
エラーメッセージを出力する
|
-v
|
エラーメッセージとステータスメッセージを出力する
|
-c
|
同時に起動できる接続数の上限を指定
|
-x
|
cdb ファイルに指定されたルールに従う
|
-B
|
接続時にバナーを出力する
|
-g
|
ポートを受け付けるグループID
|
-u
|
ポートを受け付けるユーザID
|
-b
|
TCP SYNのバックログを許可する。SYN cookies をサポートしているシステムでは、バックログは無意味。
|
-l
|
DNSでローカルホスト名を調べない。環境変数 $TCPLOCALHOST には localname を使用
|
-t
|
指定した秒後に、$TCPREMOTEINFO 接続を停止する(デフォルトは26秒)
|
tcpserverをダウンロードします(ダウンロード時バージョン0.88)
ダウンロードしたファイルを解凍します
# tar zxvf ucspi-tcp-0.88.tar.gz
|
解凍してできたフォルダに移動します
error.hの4行目を編集します
# vi error.h 4行目の extern int errno; →#include <errno.h>に変更
|
インストールします
接続制限をする為に使用されるcdbファイルの基になるファイルを作成します
# vi /etc/tcp.smtp
192.168.1.:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""
|
作成した/etc/tcp.smtpを基にcdbファイルを作成します
# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
|
tcpserverを利用してqmailを起動するスクリプトを作成します
# cd /etc/init.d
# touch qmail
# chmod 755 qmail
# vi qmail
|
作成した/etc/init.d/qmailの内容 (※-uには[qmaildのUID]、-gには[nofilesのGID]を指定します。今回はそれぞれ505、511として設定しています)
#!/bin/sh
#
# chkconfig: 345 99 01
# description: qmail is a Mail Transport Agent,which is the program
# that moves mail from one machine to another.
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
[ -f /var/qmail/rc ] || exit 0
case "$1" in
start)
# Start daemons.
echo "Starting qmail."
csh -cf '/var/qmail/rc &'
tcpserver -v -u 505 -g 511 -x /etc/tcp.smtp.cdb \
0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
echo
touch /var/lock/qmail
;;
stop)
# Stop daemons.
echo "Shutting down qmail."
PID=`/bin/ps -aefw | grep qmail | awk '{print $2}'`
if [ ! -z "$PID" ] ; then
/bin/kill ${PID} 1> /dev/null 2>&1
fi
echo
rm -f /var/lock/qmail
;;
*)
echo "Usage: S99qmail {start|stop}"
exit 1
esac
exit 0
|
OS起動時に自動起動するように設定します
# chkconfig --add qmail
# chkconfig --level 345 qmail on
|
起動方法
# /etc/init.d/qmail start
|
停止方法
|