第1回 qmailによるSMTPサーバの構築

鶴長 鎮一
2001/9/4

tcpserverによる起動の設定

 これまでに紹介していた起動方法は、qmailの動作を確認するための便宜上のものです。実際のメールサーバ運用でinetdを使うのは、サービスに求められる堅牢さとセキュリティを考えるとお勧めできません。TCP_Wrapperを併用したり、xinetdを使うのも1つの方法ですが、ここではqmailの作者であるD. J. Bernstein氏が提供しているtcpserverを使う方法を紹介します。

tcpserverとは

 tcpserverはucspi-tcpパッケージの一部として提供されているもので、qmailの特徴を紹介する際にはtcpserverが提供する機能を含めていることがほとんどです。そうした点からも、qmailをtcpserverと切り離して動作させることは極めてまれと考えた方がいいでしょう。tcpserverには、inetdなどの従来のサービス起動プロセスと比べて次のようなメリットがあります。

  • DoS攻撃にも対応できるように、同時接続に対する制限がかけられる

  • ユーザー名・IPアドレス・ドメイン名を基に接続制限がかけられる

  • qmailが動作しているホストに複数のIPアドレスを割り振っている場合(複数のLANインターフェイスを持っているなど)、特定のIPアドレスでのみサービスを受け付けるように設定できる。「アドレスAはSMTP用、アドレスBはPOPサーバ用」などの使い分けが可能

  • 上記の要求を制御する設定ファイルはハッシュを用いた独自のデータベースファイル(cdb)を使用しているため、設定がきめ細かくなったり、数百行に及んでも高速な処理が可能。また設定の変更にサービスの再起動は必要ない

tcpserverのインストールとcdbの作成

 tcpserverのインストールは、qmail同様極めて簡単です。

ftp://ftp.jp.qmail.org/qmail/ucspi-tcp-0.88.tar.gz

をダウンロードして、

# tar xvfz ../ucspi-tcp-0.88.tar.gz
# cd ucspi-tcp-0.88/
# make setup check

を実行すれば/usr/local/binにtcpserverをはじめとするucspi-tcpパッケージがインストールされます。

 次に設定ですが、まずcdbの基になるファイルを準備します。ここでは/etcディレクトリにtcp.smtpファイルとして作成します。

# vi /etc/tcp.smtp

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

 tcpserverは、動作に必要なホスト名やIPアドレスなどの情報を環境変数から取り出します。例えば、1行目の設定は「192.168.0.*からの接続は環境変数RELAYCLIENTに設定し、接続を許可する」となります。大きなサブネットで許可したくないという場合は、

192.168.0.0-31:allow,RELAYCLIENT=""

などのようにしてアドレスの範囲を指定します。これで192.168.0.0から192.168.0.31までが対象になります。逆に、接続を拒否したい場合は次のようになります。

192.168.0.:deny

 では、cdbファイルを作成します。cdbファイルは以下のコマンドを実行することで作成できます。

# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

tcpserverによるqmailの起動

 準備が整ったところで、tcpserver経由でqmailを起動します。前半で記述したinetd.confの記述を削除するかコメントアウトし、inetdを再起動します。

 次に下記のコマンドを実行します(qmaildのUIDやnofilesのGIDはid qmaildコマンドで確認できます)。

# tcpserver -v -u[qmaildのUID] -g[nofilesのGID]-x /etc/tcp.smtp.cdb 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &

 tcpserverの代表的なオプションには次のようなものがあります。

-v すべてのメッセージを出す
-u uid ユーザーIDをuidに切り替える
-g gid グループIDをgidに切り替える
-H 逆引きをしない(リモートホスト名を調べない)
-R ident(接続したサーバのユーザー情報について、付加的な情報を返す)しない
-x /etc/tcp.cdb cdbデータベース(/etc/tcp.cdb)で制御する
-c limit 最大同時接続数をlimitに設定する(デフォルトは40)
-P 逆引き、正引きで相手の正当性を調査する

 これで完了です。前半で行った送信テストに加えて、tcp.smtpで加えた接続が許可されているクライアントからも送信のテストを行ってみましょう(メールクライアントの設定でsmtpサーバの項目があれば、今回インストールしたqmailサーバに変更します)。

 サーバ起動のたびに上記のコマンドを打ち込むのは面倒なので、起動スクリプトを用意します。下記の内容で/etc/rc.d/init.dディレクトリに「qmail」として保存します。また、ダウンロード用のファイルも用意しました。

#!/bin/sh
#
# qmail: /var/qmail
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin

[ -f /var/qmail/rc ] || exit 0

case "$1" in
  start)
        # Start daemons.
        echo "Starting qmail."
        csh -cf '/var/qmail/rc &'
        tcpserver -v -u [qmaildのUID] -g [nofilesのGID]-x /etc/tcp.smtp.cdb \
       0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
        echo
        touch /var/lock/qmail
        ;;
  stop)
        # Stop daemons.
        echo "Shutting down qmail."
        PID=`/bin/ps -aefw | grep qmail | awk '{print $2}'`
        if [ ! -z "$PID" ] ;  then
            /bin/kill ${PID} 1> /dev/null 2>&1
        fi
        echo
        rm -f /var/lock/qmail
        ;;
   *)
        echo "Usage: S99qmail {start|stop}"
        exit 1
esac

exit 0

 それぞれのランレベルで起動されるように、起動スクリプトとリンクを張ります。

# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc2.d/S99qmail
# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc3.d/S99qmail
# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc5.d/S99qmail

 以上でqmailをメールサーバとして動作させることが可能となりました。実際の運用に移るためには、まだまだ種々の制限やユーザーが使いやすいような拡張を施す必要があります。先立ってはPOPの実装が最低限必要だと思います。シェルでメールの読み書きをしているというユーザーはいまや少なくなり、UNIXをデスクトップマシンとして使っている方でさえ、POP3やIMAPでメールを取り込むことが多くなってきていると思います。次回はPOP3をはじめ、POP before SMTPやAPOP、IMAPなどのメール受信機能の実装を紹介します。

3/3

Index
実用qmailサーバ運用・管理術
  Page 1
sendmailからqmailへ
 qmailの仕組み
  Page 2
qmailのインストールと設定
 qmailのインストール
 コントロールファイルの編集
 sendmailの停止とラッパー
 qmailの動作確認
 Maildirへの移行
  Page 3
tcpserverによる起動の設定

 tcpserverとは
 tcpserverのインストールとcdbの作成
 tcpserverによるqmailの起動

連載 実用qmailサーバ運用・管理術


 Linux Squareフォーラム サーバ構築・運用関連記事
連載:Heartbeatでかんたんクラスタリング(連載中)
オープンソースソフトウェアの「Heartbeat」を使ってHAクラスタを実現し、サービスを「落とさない」仕組みを実現します
特集:Apache 2.2でWebサイトをパフォーマンスアップ!
最新安定版Apache 2.2は、何が変わったのか? 最新のApacheを新機能の使い方とともに解説する
連載:実用 Apache 2.0運用・管理術(全8回)
本連載では、Apache 2.0の運用や管理方法を解説する。まず必須設定と基本的なセキュリティ対策を行い今後の運用に備える
連載:実用 BIND 9で作るDNSサーバ(全15回)
本連載では、BIND 9の構築/運用方法を解説していく。実際に役立つことを目的に、セキュリティや大規模運用などのテーマを取り上げていく
連載:実用qmailサーバ運用・管理術(全14回)
本連載を通して、qmailによるメールサーバの高度な構築・運用・管理術を紹介。SPAM対策やML管理からサーバでのウイルスチェックなどまで
特集:Samba 3.0の全貌 改訂版
Samba 3.0リリースから8カ月。ここであらためて、Samba 3.0系列の新機能、インストール方法、国際化の現状を解説する

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します

TechTargetジャパン

Linux Square フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ



- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH