[Memo2012][ITPASS]tcpserverのインストールと設定

tcpserver のインストールと設定

inetd からの qmail 起動を停止

テストのために記述していた /etc/inetd.conf の smtpで始まる行をコメントアウトした. そして, inetdを再起動した.

# /etc/init.d/openbsd-inetd restart

smtp ポートを listen しているプログラムがないことを netstat -l で確認した.

# netstat -l | grep smtp

listen しているプログラムがある場合は以下のように表示される.

tcp        0      0 *:smtp                  *:*                     LISTEN

ソース・パッチの取得と展開, パッチ当てとmake

参考: <URL:http://cyberam.dip.jp/linux_server/mail/qmail_main.html>

# wget http://tools.qmail.jp/ucspi-tcp/ucspi-tcp-0.88.tar.gz
# wget http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/ucspi-tcp-0.88.errno.patch
# tar xfz ucspi-tcp-0.88.tar.gz
# cd ucspi-tcp-0.88
# patch  -p1 < ../ucspi-tcp-0.88.errno.patch

インストール先を /usr/local/ucspi-tcp に変更する. すなわち, conf-home の一行目を /usr/local/ucspi-tcp に書き換える.

# make
# make setup check

インストール先を /usr/local/ucspi-tcp に変更せずに make コマンドを実行してしまった. conf-home の記述から /usr/local/bin がインストール先であることがわかった. ディレクトリ内には今回インストールされたファイル以外が存在しないことが ika-itpass との比較や, ディレクトリ内のファイルの更新日時から判断できたので, ディレクトリ内のファイルを全て削除した.

ちなみにここで削除したファイルは以下の通りである.

# ls -la /usr/local/bin
合計 252
drwxr-sr-x  2 root staff  4096 2012-10-19 16:44 .
drwxr-sr-x 12 root staff  4096 2012-10-13 20:16 ..
-rwxr-xr-x  1 root staff  5144 2012-10-19 16:44 addcr
-rwxr-xr-x  1 root staff  9940 2012-10-19 16:44 argv0
-rwxr-xr-x  1 root staff   157 2012-10-19 16:44 date@
-rwxr-xr-x  1 root staff  5368 2012-10-19 16:44 delcr
-rwxr-xr-x  1 root staff   203 2012-10-19 16:44 finger@
-rwxr-xr-x  1 root staff 13124 2012-10-19 16:44 fixcrio
-rwxr-xr-x  1 root staff   287 2012-10-19 16:44 http@
-rwxr-xr-x  1 root staff   149 2012-10-19 16:44 mconnect
-rwxr-xr-x  1 root staff  9976 2012-10-19 16:44 mconnect-io
-rwxr-xr-x  1 root staff 30708 2012-10-19 16:44 rblsmtpd
-rwxr-xr-x  1 root staff 14124 2012-10-19 16:44 recordio
-rwxr-xr-x  1 root staff   143 2012-10-19 16:44 tcpcat
-rwxr-xr-x  1 root staff 34664 2012-10-19 16:44 tcpclient
-rwxr-xr-x  1 root staff 18204 2012-10-19 16:44 tcprules
-rwxr-xr-x  1 root staff 14080 2012-10-19 16:44 tcprulescheck
-rwxr-xr-x  1 root staff 42920 2012-10-19 16:44 tcpserver
-rwxr-xr-x  1 root staff   157 2012-10-19 16:44 who@

この後, インストール先を /usr/local/ucspi-tcp に変更した. すなわち, conf-home の一行目を /usr/local/ucspi-tcp に書き換えた.

再び, ここで

# make
# make setup check

を実行した.

インストールした qmail の実行ファイル群へパスを通した.

ここで [ITPASS2011a]パスの設定 <一般ユーザ用コマンドのパス> /usr/local/ucspi-tcp/bin を追加した. (システム用コマンドも一般ユーザ用コマンドと同じ場所にインストールされているため, システム用コマンド用の設定を別途行う必要は無い).

起動テスト

使い方は

# tcpserver

とすると出力された. 詳しくは<URL:http://cr.yp.to/ucspi-tcp/tcpserver.html>に書いてある.

qmaildのUID, nofilesのGIDを確認した.

$ id qmaild

uid=116(qmaild) gid=200(nofiles) groups=200(nofiles)

以下を実行し, tcpserverを起動した.

# tcpserver -u 116 -g 200 0 smtp /var/qmail/bin/qmail-smtpd &

ここで, 116 は qmaild の UID, 200 は nofiles の GID である.

メール受信テストを [ITPASS2011a]qmailのインストールと設定#とりあえず用の smtp の設定 を参考にやってみる. すなわち, 他のホストから自分のメールアドレスに宛ててメールを送り, 受信できる事を確認した.

起動スクリプト作成

起動スクリプトを /etc/init.d/tcpserver に作成した. 中身は tcpserver 起動スクリプト を参照に作成した.

# cd /etc/init.d/
# touch tcpserver
# chown root:root tcpserver
# chmod 755 tcpserver
# vi tcpserver

さらに, vi などで /etc/init.d/tcpserver の NAME=tcpserver の上に以下を追記した.

### BEGIN INIT INFO
# Provides: tcpserver
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Should-Start: $network $syslog
# Should-Stop: $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start and stop tcpserver
# Description: tcpserver is tcpserver
### END INIT INFO

確認後, update-rc.d スクリプトでランレベルごとの設定を行った.

# update-rc.d tcpserver defaults

ホスト制限設定

smtp 中継を許可するホストを指定する. <URL:http://man.qmail.jp/faq/faq5.html#5.4.>を参考に ホストリストファイル tcp.smtp を作成し, そのファイルを元に CDB データ ベースファイルを作成した.

/usr/local/ucspi-tcp/etc を作成し, その下に tcp.smtp を作成し, 以下を書いた.

133.30.109.80:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""

1 行目の 133.30.109.80 は後で設定確認するための作業用である. 作業者がアカウントを持つ他のマシンの IP アドレスを記入する. 次に以下のコマンドを実行して, tcp.smtp.cdb を作った.

# tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp

ホスト制限確認

/etc/init.d/tcpserver を修正された起動スクリプト tcpserver 起動スクリプト修正版 に置き換えた.

tcpserver プロセスを再起動した.

# /etc/init.d/tcpserver restart

このときに, 以下のようなレスポンスが返ってきた.

Restarting tcpserver
Stopping smtp server: tcpserver
start-stop-daemon: warning: failed to kill 17014: No such process
1 pids were not killed
No process in pidfile `/var/run/tcpserver.pid' found running; none  killed.
Starting smtp server: tcpserver

先ほど /usr/local/ucspi-tcp/etc/tcp.smtp に書いた IP アドレス(ここでは, 133.30.109.22) を持つ計算機 (ika) から telnet でアクセスし, メールサーバ以外のホストへのメール送信を試みた. (下記のコマンドについては <URL:http://man.qmail.jp/jinstall /test.receive.html> 参照). プロン プト入力時には, 左端に '>' を記してある. 実際には表示されなかった.

% telnet tako-itpass.scitec.kobe-u.ac.jp 25
Trying 133.30.109.21...
Connected to tako-itapss.scitec.kobe-u.ac.jp.
Escape character is '^]'.
220 tako-itpass.scitec.kobe-u.ac.jp ESMTP
> helo dude
250 domain
> mail <hoge1_at_stu.kobe-u.ac.jp>
250 ok
> rcpt <hoge2_at_stu.kobe-u.ac.jp>   # <- 実在のアドレスへ
(アドレスを, <>で囲むのを忘れずに)
250 ok
> data
354 go ahead
> Subject: testing
> 
> This is a test.
> .
250 ok 812345679 qp 12345
> quit
221 domain
Connection closed by foreign host.
%

このメールが届くことを確認した.

次に, /usr/local/ucspi-tcp/etc/tcp.smtp から 133.30.110.XX:allow,RELAYCLIENT="" を削除して tcprules コマンドを実行し, tcpserver を restart した後に同様の作業を行った.

この際には rcpt <hogehoge_at_stu.kobe-u.ac.jp> を入力した段階で

553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)

というエラーメッセージが返り, メールの送信を拒絶することを確認した.

ホスト制御データベース更新スクリプト

tcprules などのコマンドを覚えておくのは面倒なので, /usr/local/ucspi-tcp/etc/ 以下に更新スクリプトを置いてある. ika からコピーしてきた.

# chmod u+x tcp_smtp_update.sh 

tcprules を覚えているというのであれば, 以下は必要ない.

/usr/local/ucspi-tcp/etc/tcp.smtp を更新後は

$ /usr/local/ucspi-tcp/etc/tcp_smtp_update.sh update

でデータベースファイルが更新され, tcpserver プロセスが再起動する.

ここで, 以下のようなレスポンスが返ってくる場合がある.

/bin/bash^M: bad interpreter: そのようなファイルやディレクトリはありません

これは、Window sマシンでシェルスクリプトを書いて Linux サーバにそのままアップロードして利用しようとすると発生してしまう. 原因は、Windows の改行コードと Linux の改行コードが異なることにあるので, 改行コードを変更する.

上のスクリプトを実行した.

# /usr/local/ucspi-tcp/etc/tcp_smtp_update.sh update

以下のように表示されれば成功である.

Updating /usr/local/ucspi-tcp/etc/tcp.smtp.cdb using /usr/local/ucspi-tcp/etc/tcp.smtp
/usr/local/ucspi-tcp/bin/tcprules /usr/local/ucspi-tcp/etc/tcp.smtp.cdb /usr/local/ucspi-tcp/etc/tcp.smtp.tmp
/etc/init.d/tcpserver restart
Restarting tcpserver
Stopping smtp server: tcpserver
Starting smtp server: tcpserver

Update is successful.

更新したデータベースの内容に応じて正しくメールが送れていることを確認できた.

参考資料

[ITPASSサーバ構築・運用ドキュメント へ戻る]

Last modified:2012/11/06 18:40:30
Keyword(s):
References:[[ITPASS2012]2012年度サーバ構築ログ]