IT pass HikiWiki - [EPA2008]tcpserverのインストールと設定 Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
{{toc}}
[((<EPAサーバ構築ドキュメント>)) へ戻る]
smtp サービスを提供する上で, tcpserver 越しに qmail-smtpd を動かすため,
tcpserver をインストールする.
tcpserver はデータベースを持っており, 大規模, 複雑な接続制御が高速に行える.
参考: ((<URL:http://www.emaillab.org/djb/tcpserver/whatis.html>))
== inetd からの qmail 起動を停止
テストのために記述していた /etc/inetd.conf の smtp
で始まる行をコメントアウトする.
そして, inetdを再起動.
# /etc/init.d/openbsd-inetd restart
smtp ポートを listen しているプログラムがないことを確認する.
# netstat -l
== ソースの取得と展開, パッチ当てと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://cr.yp.to/ucspi-tcp/ucspi-tsp-0.88.tar.gz
(1 つ目がつながりにくい場合は2 つ目でする.)
# 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
== インストールした実行ファイルへのパスの設定
インストールされた tcpserver の実行ファイル群へパスを通す.
((<[EPA2008]パスの設定>)) の((* <一般ユーザ用コマンドのパス> *))
に ((*/usr/local/ucspi-tcp/bin*)) を追加する.
(システム用コマンドも一般ユーザ用コマンドと同じ場所に
インストールされているため, システム用コマンド用の設定を
別途行う必要は無い).
== 起動テスト
使いかたは
# tcpserver
とすると出力される. 詳しくは
((<URL:http://cr.yp.to/ucspi-tcp/tcpserver.html>))
に書いてある.
qmaildのUID, nofilesのGIDを確認.
$ id qmaild
uid=111(qmaild) gid=200(nofiles) groups=200(nofiles)
以下を実行し, tcpserverを起動.
# tcpserver -u xxxx -g yyyy 0 smtp /var/qmail/bin/qmail-smtpd &
ここで, xxxx は qmaild の UID, yyyy は nofiles の GID である.
メール受信テストを ((<[EPA2008]qmailのインストールと設定#smtp(仮)>))
のところでやったようにやってみる.
すなわち, 他のホストから自分のメールアドレスに宛ててメールを送ってみる.
== 起動スクリプト作成
起動スクリプトを /etc/init.d/tcpserver に作成する.
中身は ((<tcpserver 起動スクリプト|URL:../epa/tcpserver/tcpserver1>))
を参照のこと.
# cd /etc/init.d/
# touch tcpserver
# chown root:root tcpserver
# chmod 755 tcpserver
# vi tcpserver
編集後, 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 ディレクトリを作成し, その
中にこれらのファイルを作成する.
# mkdir /usr/local/ucspi-tcp/etc
# cd /usr/local/ucspi-tcp/etc
tcp.smtp を書く. 例えば, 133.30.109.XX という IP アドレスのホスト
からの smtp 中継を許可するためには, この 1 行目のように書く. 2 行目の
127. はローカルホストを指す. これは常に書くこと.
133.30.109.XX:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""
1 行目の 133.30.109.XX は後で設定確認するための作業用である.
作業者がアカウントを持つ他のマシンの IP アドレスを記入する.
次に以下のコマンドを実行する. tcp.smtp を元に tcp.smtp.cdb ができる.
# tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp
tcpserver 起動スクリプト /etc/init.d/tcpserver の起動行は以下のように
編集しなおす (複数行で表示されるかもしれないが, 1 行で書くこと).
/usr/local/bin/tcpserver -v -x /usr/local/ucspi-tcp/etc/tcp.smtp.cdb -u xxxx -g yyyy 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
xxxx は qmaild の UID. yyyy は nofiles の GID である.
修正された起動スクリプトは
((<tcpserver 起動スクリプト修正版|URL:../epa/tcpserver/tcpserver2>))
においてある
追加された部分を説明すると -x /usr/local/ucspi-tcp/etc/tcp.smtp.cdb はデー
タベースファイル /usr/local/ucspi-tcp/etc/tcp.smtp.cdb を参照させるための
設定である. また, 接続の記録を取るために -v オプションと splogger へ
の受け渡しが記述されている.
== ホスト制限確認
tcpserver プロセスを再起動する.
# /etc/init.d/tcpserver restart
先ほど /usr/local/ucspi-tcp/etc/tcp.smtp に書いた IP アドレス
(ここでは, 133.30.109.XX) を持つパソコンから telnet でアクセスし,
メールサーバ以外のホストへのメール送信を試みる.
(下記のコマンドについては
((<URL:http://man.qmail.jp/jinstall/test.receive.html>)) を参照).
プロンプト入力時には, 左端に '>' を記してある. 実際には表示されない.
% telnet ika.ahs.scitec.kobe-u.ac.jp 25
Trying 133.30.109.XX...
Connected to ika.ahs.scitec.kobe-u.ac.jp.
Escape character is '^]'.
220 ika.ahs.scitec.kobe-u.ac.jp ESMTP
> helo dude
250 domain
> mail <mondo@ahs.scitec.kobe-u.ac.jp>
250 ok
> rcpt <hogehoge@gfd-dennou.org> # <- 実在のアドレスへ
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 に記述されていない他のホストから同様
の作業を行う. この際には rcpt <hogehoge_at_gfd-dennou.org> を入力した段階で
553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)
というエラーメッセージが返り, メールの送信を拒絶されるはずである. そう
ならない場合, ホスト制限がうまく動作していないことになるため,
((<URL:#ホスト制限設定>)) から作業をやり直し, ホスト制限
が行われていることを確認すること.
先程, 作業用に使用していた設定 (tcp.smtp の 1 行目)
はもう不要なので削除する.
構成員がこのサーバを SMTP サーバーとして使用する場合は,
接続を許可する IP のリストを書き加えること.
もう一度以下のコマンドを実行して. tcp.smtp.cdb を書き換える.
# tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp
先程までメールを送れたマシン (IP: 133.30.109.XX) からメールが送れなくなっていることを確認.
== ホスト制御データベース更新スクリプト作成
tcprules などのコマンドを覚えておくのは面倒なので,
/usr/local/ucspi-tcp/etc/ 以下に更新スクリプト を置いてある.
tcprules を覚えているというのであれば, 以下は必要ない.
/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.
更新したデータベースの内容に応じて正しくメールが送れていることを確認できたら OK.
[((<EPAサーバ構築ドキュメント>)) へ戻る]
[((<EPAサーバ構築ドキュメント>)) へ戻る]
smtp サービスを提供する上で, tcpserver 越しに qmail-smtpd を動かすため,
tcpserver をインストールする.
tcpserver はデータベースを持っており, 大規模, 複雑な接続制御が高速に行える.
参考: ((<URL:http://www.emaillab.org/djb/tcpserver/whatis.html>))
== inetd からの qmail 起動を停止
テストのために記述していた /etc/inetd.conf の smtp
で始まる行をコメントアウトする.
そして, inetdを再起動.
# /etc/init.d/openbsd-inetd restart
smtp ポートを listen しているプログラムがないことを確認する.
# netstat -l
== ソースの取得と展開, パッチ当てと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://cr.yp.to/ucspi-tcp/ucspi-tsp-0.88.tar.gz
(1 つ目がつながりにくい場合は2 つ目でする.)
# 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
== インストールした実行ファイルへのパスの設定
インストールされた tcpserver の実行ファイル群へパスを通す.
((<[EPA2008]パスの設定>)) の((* <一般ユーザ用コマンドのパス> *))
に ((*/usr/local/ucspi-tcp/bin*)) を追加する.
(システム用コマンドも一般ユーザ用コマンドと同じ場所に
インストールされているため, システム用コマンド用の設定を
別途行う必要は無い).
== 起動テスト
使いかたは
# tcpserver
とすると出力される. 詳しくは
((<URL:http://cr.yp.to/ucspi-tcp/tcpserver.html>))
に書いてある.
qmaildのUID, nofilesのGIDを確認.
$ id qmaild
uid=111(qmaild) gid=200(nofiles) groups=200(nofiles)
以下を実行し, tcpserverを起動.
# tcpserver -u xxxx -g yyyy 0 smtp /var/qmail/bin/qmail-smtpd &
ここで, xxxx は qmaild の UID, yyyy は nofiles の GID である.
メール受信テストを ((<[EPA2008]qmailのインストールと設定#smtp(仮)>))
のところでやったようにやってみる.
すなわち, 他のホストから自分のメールアドレスに宛ててメールを送ってみる.
== 起動スクリプト作成
起動スクリプトを /etc/init.d/tcpserver に作成する.
中身は ((<tcpserver 起動スクリプト|URL:../epa/tcpserver/tcpserver1>))
を参照のこと.
# cd /etc/init.d/
# touch tcpserver
# chown root:root tcpserver
# chmod 755 tcpserver
# vi tcpserver
編集後, 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 ディレクトリを作成し, その
中にこれらのファイルを作成する.
# mkdir /usr/local/ucspi-tcp/etc
# cd /usr/local/ucspi-tcp/etc
tcp.smtp を書く. 例えば, 133.30.109.XX という IP アドレスのホスト
からの smtp 中継を許可するためには, この 1 行目のように書く. 2 行目の
127. はローカルホストを指す. これは常に書くこと.
133.30.109.XX:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""
1 行目の 133.30.109.XX は後で設定確認するための作業用である.
作業者がアカウントを持つ他のマシンの IP アドレスを記入する.
次に以下のコマンドを実行する. tcp.smtp を元に tcp.smtp.cdb ができる.
# tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp
tcpserver 起動スクリプト /etc/init.d/tcpserver の起動行は以下のように
編集しなおす (複数行で表示されるかもしれないが, 1 行で書くこと).
/usr/local/bin/tcpserver -v -x /usr/local/ucspi-tcp/etc/tcp.smtp.cdb -u xxxx -g yyyy 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
xxxx は qmaild の UID. yyyy は nofiles の GID である.
修正された起動スクリプトは
((<tcpserver 起動スクリプト修正版|URL:../epa/tcpserver/tcpserver2>))
においてある
追加された部分を説明すると -x /usr/local/ucspi-tcp/etc/tcp.smtp.cdb はデー
タベースファイル /usr/local/ucspi-tcp/etc/tcp.smtp.cdb を参照させるための
設定である. また, 接続の記録を取るために -v オプションと splogger へ
の受け渡しが記述されている.
== ホスト制限確認
tcpserver プロセスを再起動する.
# /etc/init.d/tcpserver restart
先ほど /usr/local/ucspi-tcp/etc/tcp.smtp に書いた IP アドレス
(ここでは, 133.30.109.XX) を持つパソコンから telnet でアクセスし,
メールサーバ以外のホストへのメール送信を試みる.
(下記のコマンドについては
((<URL:http://man.qmail.jp/jinstall/test.receive.html>)) を参照).
プロンプト入力時には, 左端に '>' を記してある. 実際には表示されない.
% telnet ika.ahs.scitec.kobe-u.ac.jp 25
Trying 133.30.109.XX...
Connected to ika.ahs.scitec.kobe-u.ac.jp.
Escape character is '^]'.
220 ika.ahs.scitec.kobe-u.ac.jp ESMTP
> helo dude
250 domain
> mail <mondo@ahs.scitec.kobe-u.ac.jp>
250 ok
> rcpt <hogehoge@gfd-dennou.org> # <- 実在のアドレスへ
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 に記述されていない他のホストから同様
の作業を行う. この際には rcpt <hogehoge_at_gfd-dennou.org> を入力した段階で
553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)
というエラーメッセージが返り, メールの送信を拒絶されるはずである. そう
ならない場合, ホスト制限がうまく動作していないことになるため,
((<URL:#ホスト制限設定>)) から作業をやり直し, ホスト制限
が行われていることを確認すること.
先程, 作業用に使用していた設定 (tcp.smtp の 1 行目)
はもう不要なので削除する.
構成員がこのサーバを SMTP サーバーとして使用する場合は,
接続を許可する IP のリストを書き加えること.
もう一度以下のコマンドを実行して. tcp.smtp.cdb を書き換える.
# tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp
先程までメールを送れたマシン (IP: 133.30.109.XX) からメールが送れなくなっていることを確認.
== ホスト制御データベース更新スクリプト作成
tcprules などのコマンドを覚えておくのは面倒なので,
/usr/local/ucspi-tcp/etc/ 以下に更新スクリプト を置いてある.
tcprules を覚えているというのであれば, 以下は必要ない.
/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.
更新したデータベースの内容に応じて正しくメールが送れていることを確認できたら OK.
[((<EPAサーバ構築ドキュメント>)) へ戻る]