tcpserver
tcpserver はサーバ制御ツールで、 ucspi-tcp.tar.gz というパッケージの中に入っています。

用意するもの


ucspi-tcp のインストール

% mv ucspi-tcp-0.88.tar.gz /somewhere
% cd /somewhere
% tar zxvf ucspi-tcp-0.88.tar.gz
% cd ucspi-tcp-0.88
% make
% su
Password:
# make setup check

デフォルトでは、/usr/local/bin に tcpclient,tcpserver,tcprulesなどがinstallされます。

アクセス制限のデータベース

最初に、/var/qmail/control/rcpthosts の設定を確認しましょう。
/var/qmail/control/rcpthosts
localhost.domain
hostname.domain
これは、自分から発せられたメールしか中継しない設定になっています。 そこで、他のマシンから発せられたメールを、制限付きで許可する 設定をします。

smtp のアクセス制限をするデータべースファイルを作ります。 まず、ルールを書いたテキストファイルを /etc/tcp.smtp に用意します。 優先順位は上に書いたものが高くなります。
/etc/tcp.smtp
123.45.67.89:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""
:allow

123.45.67.89 と 127.*.*.* からのアクセスは環境変数 RELAYCLIENT をカラで設定します。 すると、/var/qmail/control/rcpthosts での制限が効かずに、 接続を許可します。 以上のどれにも当てはまらない場合は、 最後の :allow に行きすべて受け付けます。 あとは、/var/qmail/control/rcpthosts の制限に任せます。

ローカルホストとして smtpd と喋ることがあるので、 「127.」の行は必ず入れておいて下さい。 また、「:allow」 の行は入れておかないと、 外部からのメールが(正規なのも含めて)一切受け付けられなくなります。 さらに、メールサーバ自身からメールを送る場合には、 メールサーバの IP アドレスも含めておかなければ 「中継エラー」になります。

最後に、データベースファイル /etc/tcp.smtp.cdb を作成します。 コマンドは1行で打ちます。
# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
/etc/tcp.smtp を変更したら、/etc/tcp.smtp.cdb を作り直します。

/etc/inetd.conf

/etc/inetd.conf の smtp の行をコメントアウトします。
/etc/inetd.conf
# smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd (実際には1行です)

この後、リブートもしくは inted.conf に -HUP を送ります。。
# kill -HUP `cat /var/run/inetd.pid`

qmail を再起動する

/var/qmail/control 下のファイルが変更されている場合は、 qmail を再起動します。
# kill (qmail-send の pid)
# csh -cf '/var/qmail/rc &'

tcpserver から qmail-smtpd を起動する

次のコマンドを一行で打ちます。
# tcpserver -u 7791 -g 2108 -x /etc/tcp.smtp.cdb 0 smtp /var/qmail/bin/qmail-smtpd &

7791 は qmaild の UID で、2108 は nofiles の GID です。

参考サイト


qmail サーバのページ

FreeBSD の部屋


Apr. 1, 2000