用意するもの
% 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=""
:allow123.45.67.89 と 127.*.*.* からのアクセスは環境変数 RELAYCLIENT をカラで設定します。 すると、/var/qmail/control/rcpthosts での制限が効かずに、 接続を許可します。 以上のどれにも当てはまらない場合は、 最後の :allow に行きすべて受け付けます。 あとは、/var/qmail/control/rcpthosts の制限に任せます。
ローカルホストとして smtpd と喋ることがあるので、 「127.」の行は必ず入れておいて下さい。 また、「:allow」 の行は入れておかないと、 外部からのメールが(正規なのも含めて)一切受け付けられなくなります。 さらに、メールサーバ自身からメールを送る場合には、 メールサーバの IP アドレスも含めておかなければ 「中継エラー」になります。
最後に、データベースファイル /etc/tcp.smtp.cdb を作成します。 コマンドは1行で打ちます。
/etc/tcp.smtp を変更したら、/etc/tcp.smtp.cdb を作り直します。
# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
/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`
/var/qmail/control 下のファイルが変更されている場合は、 qmail を再起動します。
# kill (qmail-send の pid)
# csh -cf '/var/qmail/rc &'
次のコマンドを一行で打ちます。
# tcpserver -u 7791 -g 2108 -x /etc/tcp.smtp.cdb 0 smtp /var/qmail/bin/qmail-smtpd & 7791 は qmaild の UID で、2108 は nofiles の GID です。