IT pass HikiWiki - [Memo2014][ITPASS] tcpserver のインストールと設定 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

= tcpserver のインストールと設定

== inetd からの qmail 起動を停止

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

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

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

    # netstat -l | grep smtp

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

* パッチを取得し, 展開した.

    # 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 の実行ファイル群へパスを通した.


== 起動テスト

* 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 &

* メール受信テストのため, 他のホストから自分のメールアドレスに宛ててメールを送り, 受信できる事を確認した.

== 起動スクリプト作成

* 起動スクリプトを /etc/init.d/tcpserver に作成した. 中身は
((<URL:https://itpass.scitec.kobe-u.ac.jp/server/2012/tcpserver/tcpserver1>))
を参照して作成する.

    # 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.77:allow,RELAYCLIENT=""
   127.:allow,RELAYCLIENT=""

* 次に以下のコマンドを実行して, tcp.smtp.cdb を作った.

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

== ホスト制限確認

* /etc/init.d/tcpserver を修正された起動スクリプト
((<URL:https://itpass.scitec.kobe-u.ac.jp/server/2012/tcpserver/tcpserver2>))
に置き換えた(DEAMONUID, GIDを確認).

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

    # /etc/init.d/tcpserver restart

* 先ほど /usr/local/ucspi-tcp/etc/tcp.smtp に書いた IP アドレスを持つ計算機(joho07) から telnet でアクセスし, メールサーバ以外のホストへのメール送信を試みた(ただし, プロンプト入力時には, 左端に '>' を記してある).

    % 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)

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

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

* ~itpass/ftp/server/2012/tcpserver/ 以下に((<URL:https://itpass.scitec.kobe-u.ac.jp/server/2012/tcpserver/tcp_smtp_update.sh>)) が置かれているのでコピーした.

    # chmod u+x tcp_smtp_update.sh

* データベースファイルを更新し, tcpserver プロセスを再起動した.

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

* スクリプトを実行した.

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

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