[Memo2015][ITPASS]tcpserver のインストールと設定
[ITPASSサーバ構築・運用ドキュメント へ戻る]
tcpserver のインストールと設定
inetd からの qmail 起動を停止
テストのために記述していた /etc/inetd.conf の smtpで始まる行をコメントアウトした. そして, inetdを再起動した.
# /etc/init.d/openbsd-inetd restart
smtp ポートを listen しているプログラムがないことを netstat -l で確認した.
# netstat -l | grep smtp
ソース・パッチの取得と展開, パッチ当てと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
を実行した.
インストールした qmail の実行ファイル群へパスを通した.
ここで [ITPASS2014]パスの設定 の <一般ユーザ用コマンドのパス> に /usr/local/ucspi-tcp/bin を追加した.
起動テスト
qmaildのUID, nofilesのGIDを確認した.
$ id qmaild
uid=119(qmaild) gid=200(nofiles) groups=200(nofiles)
以下を実行し, tcpserverを起動した.
# tcpserver -u 119 -g 200 0 smtp /var/qmail/bin/qmail-smtpd &
メール受信テストを [ITPASS2014] qmail のインストールと設定#とりあえず用の smtp の設定 を参考にやってみる. すなわち, 他のホストから自分のメールアドレスに宛ててメールを送り, 受信できる事を確認する.
起動スクリプト作成
起動スクリプトを /etc/init.d/tcpserver に作成した. 中身は tcpserver 起動スクリプト を参照に作成した.
# cd /etc/init.d/ # touch tcpserver # chown root:root tcpserver # chmod 755 tcpserver # vi tcpserver
さらに, /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.78:allow,RELAYCLIENT="" 127.:allow,RELAYCLIENT=""
1 行目の 133.30.109.78 は後で設定確認するための作業用である. 作業者がアカウントを持つ他のマシンの IP アドレスを記入した. 次に以下のコマンドを実行して, tcp.smtp.cdb を作った.
# tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp
ホスト制限確認
/etc/init.d/tcpserver を修正された起動スクリプト tcpserver 起動スクリプト修正版 に置き換えた.
tcpserver プロセスを起動する.
# /etc/init.d/tcpserver start
先ほど /usr/local/ucspi-tcp/etc/tcp.smtp に書いた IP アドレスを持つ計算機から 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.10.9XX: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)
というエラーメッセージが返り, メールの送信を拒絶することを確認した.
ホスト制御データベース更新スクリプト
~itpass/ftp/server/2014/tcpserver/ 以下に置いてある 更新スクリプト をコピーした.
# chmod u+x tcp_smtp_update.sh
/usr/local/ucspi-tcp/etc/tcp.smtp を更新後は
# /usr/local/ucspi-tcp/etc/tcp_smtp_update.sh update
でデータベースファイルが更新され, tcpserver プロセスが再起動する.
上のスクリプトを実行した.
# /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サーバ構築・運用ドキュメント へ戻る]
Keyword(s):
References:[[ITPASS2015]2015年度サーバ構築ログ]