qmailのインストール

SMTPサーバー・POPサーバーのインストールです。

SMTPサーバーの導入に当たって、SPAMメールを回避する為にPOP before SMTPの設定を行います。
また、POPサーバーでは、インターネットから接続した際にユーザー・パスワードが盗聴されるのを防ぐ為、 APOPによる認証を行えるようにします。

これからメールサーバー構築を検討していて、仮想ユーザーの作成やAPOPの使用を検討している場合には qmail+vpopmailの組み合わせて環境を構築します。qmail/vpopmailのインストールを参照して下さい。
qmailのみでメールサーバーを構築する場合は本ページ参考にして下さい。

インストールの流れは次のようになります。
作業は全てrootで行います。
  1. ソースコードのダウンロード
  2. qmailサービス用ユーザー作成
  3. make及びインストール
  4. 設定ファイルの編集
  5. mailbox用ディレクトリ(Maildir)作成
  6. tcpserverのインストール
  7. POP認証の設定
  8. 起動スクリプトの作成
  9. POP before SMTPの設定
  10. APOP認証の設定
  11. 仮想ドメイン(virtual domain)・ユーザー(virtual user)の作成
  1. ソースコードのダウンロード
    今回必要になるものの一覧です。
    作業を開始する前に全て用意し、/usr/local/srcディレクトリにおいておいてください。
    これ以降の説明は、/usr/local/srcに全てのアーカイブがダウンロードされているとして話を進めます。
    No アーカイブ ダウンロードURL 備考
    1 qmail-1.03.tar.gz http://www.qmail.org/ qmailのソースコードです。
    2 qmail-date-localtime.patch ftp://ftp.nlc.net.au/pub/unix/mail/qmail qmailを日本時間にする為のパッチです。
    3 checkpassword-0.90.tar.gz http://cr.yp.to/checkpwd/install.html POP認証で使用します。
    4 ucspi-tcp-0.88.tar.gz ftp://ftp.jp.qmail.org/qmail tcpserverです。xinetdの代替です。
    5 relay-ctrl-3.1.1.tar.gz http://untroubled.org/relay-ctrl/ POP before SMTPで使用します。
    6 daemontools-0.76.tar.gz http://cr.yp.to/daemontools.html POP before SMTPで使用します。
    7 checkpw-1.00.tar.gz http://checkpw.sourceforge.net/checkpw/ APOP認証で使用します。

  2. qmailサービス用ユーザー作成
    qmailを起動する為のユーザーを作成します。
    qmailでは数多くのデーモンが起動する為、ユーザーもたくさん作ります。
    [root root]# mkdir /var/qmail
    [root root]# groupadd -g 710 nofiles
    [root root]# useradd -M -u 710 -g nofiles -s /bin/false -d /var/qmail/alias alias
    [root root]# useradd -M -u 711 -g nofiles -s /bin/false -d /var/qmail qmaild
    [root root]# useradd -M -u 712 -g nofiles -s /bin/false -d /var/qmail qmaill
    [root root]# useradd -M -u 713 -g nofiles -s /bin/false -d /var/qmail qmailp
    [root root]# groupadd -g 711 qmail
    [root root]# useradd -M -u 714 -g qmail -s /bin/false -d /var/qmail qmailq
    [root root]# useradd -M -u 715 -g qmail -s /bin/false -d /var/qmail qmailr
    [root root]# useradd -M -u 716 -g qmail -s /bin/false -d /var/qmail qmails
    ここで作成したユーザーは実際にログインや、コマンドを実行する事がないので、シェルに/bin/falseを指定します。
    ここで指定しているグループIDやユーザーIDは重複さえしなければ何でもよいです。/etc/passwdや/etc/groupを参照して重複しない値を指定して下さい。
  3. make及びインストール

    [root src]# tar zxvf qmail-1.03.tar.gz
    [
    root src]# cd qmail-1.03
    日本時間対応のパッチをあてます。
    [
    root qmail-1.03]# patch -p1 < ../qmail-date-localtime.patch
    [root qmail-1.03]# make setup check
    [root qmail-1.03]# ./config-fast smtp.ryouto.jp 
    <-- サーバー名を指定します。

  4. 設定ファイルの編集
    /var/qmail/control/localsを編集します。
    [root qmail-1.03]# cd /var/qmail/
    [
    root qmail]# vi control/locals
    localhost
              localhostとサーバー名とドメイン名を指定します。
    smtp.ryouto.jp
    ryouto.jp
    /var/qmail/control/rcpthostsを編集します。
    [root qmail]# vi control/rcpthosts
    localhost          localhostとサーバー名とドメイン名を指定します。
    smtp.ryouto.jp
    ryouto.jp
    次にaliasの設定です。これは、postmaster、mailer-deamon、rootへのメールに対する設定です。
    [root qmail]# cd ~alias
    [
    root alias]# touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
    [
    root alias]# chmod 644 .qmail*

  5. mailbox用ディレクトリ(Maildir)作成
    各ユーザーにメール配信用のディレクトリを作成します。
    今回はMailBoxではなく、Maildirを選択します。
    何故ならqmailはこっちを勧めているからです。
    [root alias]# /var/qmail/bin/maildirmake Maildir
    [
    root alias]# chown -R alias:nofiles Maildir
    既存ユーザー用にMaildirを作成します。(ユーザーhogeのMaildirを作成します。)
    全ユーザー分だけ行う必要があります。
    [root alias]# su - hoge
    [
    hoge hoge]$ /var/qmail/bin/maildirmake ~/Maildir
    [hoge hoge]$ echo ./Maildir/ > ~/.qmail
    今後ユーザーを追加した際に自動的にMaildirが作成されるようにスケルトンを作成します。
    /etc/skelの下に作成しておくと今後ユーザーを作成するたびに自動的に作成されるようです。
    [root alias]# /var/qmail/bin/maildirmake Maildir
    [root alias]# /var/qmail/bin/maildirmake /etc/skel/Maildir
    また、sendmailコマンドのラッパーを設定します。
    [root alias]# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
    [root alias]# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail

  6. tcpserverのインストール
    tcpserverはinetd+tcpwrapperの機能を提供するようです。
    また、セキュリティー面でも優れているようです。
    qmailはこのtcpserverを使って起動する事とします。
    では、tcpserverをインストールします。
    [root qmail]# cd /usr/local/src
    [
    root src]# tar zxvf ucspi-tcp-0.88.tar.gz
    [
    root src]# cd ucspi-tcp-0.88
    [
    root ucspi-tcp-0.88]# make setup check
    続いてtcpserverの設定ファイルを作成します。
    設定ファイルは〜cdbというファイルになります。
    [root ucspi-tcp-0.88]# vi /etc/tcp.smtp
    192.168.0.:allow,RELAYCLIENT=""            
    <-- tcp.smtpにはこの2行を書き込みます。
    127.:allow,RELAYCLIENT=""                    
    <--
    [
    root ucspi-tcp-0.88]# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

  7. POP認証の設定
    POP認証用のツールをインストールします。
    [root ucspi-tcp-0.88]# cd /usr/local/src
    [
    root src]# tar zxvf checkpassword-0.90.tar.gz
    [root src]# cd checkpassword-0.90
    [
    root checkpassword-0.90]# vi conf-home <-- インストール先を変更します。
    /                  

     ↓                
    <-- conf-homeの先頭行を/から/var/qmailに変更します。
    /var/qmail
    [root checkpassword-0.90]# make setup check
    [root checkpassword-0.90]# cd /var/qmail

  8. 起動スクリプトの作成
    ここまでの、起動スクリプトを作成します。
    [root qmail]# cp /var/qmail/boot/home /var/qmail/rc
    [root qmail]# vi rc
    qmail-start ./Mailbox splogger qmail  
    <--この行のMailboxをMaildir/に変更する。
       
                                                                     最後の/を忘れずに
    qmail-start ./Maildir/ splogger qmail
    次に/etc/rc.d/init.d/qmailの作成
    #!/bin/sh

    [ -f /var/qmail/rc ] || exit 0
    PATH=$PATH:/var/qmail/bin:/usr/local/bin

    case "$1" in
        start)
            echo -n "Starting... qmail"

            csh -cf '/var/qmail/rc &'
            /usr/local/bin/tcpserver -v -u 711 -g 710 -x /etc/tcp.smtp.cdb 0 smtp \
            /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &

            /usr/local/bin/tcpserver 0 pop3 /var/qmail/bin/qmail-popup pop.ryouto.jp \
            /var/qmail/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &
            touch /var/lock/qmail
            ;;
        stop)
            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
            rm -f /var/lock/qmail
            ;;
        *)
            echo "Usage: "$0" {start|stop}"
        exit 1
    esac
    exit 0
    runlevelの設定をします。
    [root init.d]# chmod +x qmail
    [
    root init.d]# cd ../rc3.d/
    [
    root rc3.d]# ln -s ../init.d/qmail S84qmail
    [
    root rc3.d]# cd ../rc5.d/
    [
    root rc5.d]# ln -s ../init.d/qmail S84qmail
    [
    root rc5.d]# cd ../rc0.d/
    [
    root rc0.d]# ln -s ../init.d/qmail K06qmail
    [
    root rc0.d]# cd ../rc6.d/
    [
    root rc6.d]# ln -s ../init.d/qmail K06qmail

    これで、メール環境はひとまず完成です。家庭内のみの環境で使用する場合はこれでOKです。
    もし、インターネットからメールを使いたい場合は、POP before SMTPの機能を実装する必要があります。
    「とりあえず動いたからPOP before SMTPは後ででいいや!などと思っては行けない!」
    僕のサーバーではSMTPサーバーを公開した日の夜中、いきなりSPAMメールの踏み台にされそうになった。
    幸い僕の場合はPOP before SMTPの設定をしていたので問題なかったが...。

  9. POP before SMTPの設定
    POP before SMTPの設定を行います。
    これを導入する事のより、POP認証しないとSMTPサーバーが使用できなくります。(メール送信が出来なくなります。)従って、SMAPメールの踏み台にされないですむのです。
    ここでインストールするツールは二つあります。
    relay-ctrlがPOPbeforeSMTPを実現します。daemontoolsはrelay-ctrlが使用するツールなのでインストールする必要があるのです。
    まずは、daemontoolsからインストールします。
    [root src]# mkdir -p /package
    [root src]# chmod 755 /package
    [root src]# chmod +t /package
    [root src]# cd /package/
    [
    root /package]# tar zxvf /usr/local/src/daemontools-0.76.tar.gz
    [root /package]# cd admin/daemontools-0.76
    [
    root daemontools-0.76]# package/install
    続いてrelay-ctrlをインストールします。
    [root src]# tar -zxvf relay-ctrl-3.1.1.tar.gz
    [root src]# cd relay-ctrl-3.1.1
    [
    root relay-ctrl-3.1.1]# make
    [root relay-ctrl-3.1.1]# ./installer 
    これを実行しても、何も表示されず、かつ一瞬で終わります。/usr/local/bin/relay〜のファイルが作成されていれば成功しています。ご心配なく。
    設定を行います。
    [root relay-ctrl-3.1.1]# cd /var/qmail/
    POP認証したクライアント情報を一時的に保存するディレクトリを作成します。
    [
    root qmail]# mkdir -p /var/qmail/relay-ctrl/allow
    [root qmail]# chmod 700 /var/qmail/relay-ctrl
    [root qmail]# chmod 777 /var/qmail/relay-ctrl/allow
    relay-ctrlの設定をファイルを作成します。
    [root qmail]# mkdir /etc/relay-ctrl
    RELAY_CTRL_DIRファイルには認証した情報を何処に保存するかを、RELAY_CTRL_EXPIRYには認証後、何秒間の間SMTPの使用を許可するかを指定します。
    [root qmail]# echo "/var/qmail/relay-ctrl/allow " > /etc/relay-ctrl/RELAY_CTRL_DIR
    [root qmail]# echo "60" > /etc/relay-ctrl/RELAY_CTRL_EXPIRY
    relay-ctrolはPOP認証を行ったクライアントのIPAddressのファイルをRELAY_CTRL_EXPIRYで指定されたディレクトリに作成します。
    SMTPにアクセスしたクライアントに対してはそのクライアントのIPAddressがRELAY_CTRL_EXPIRYで指定されたディレクトリにあるかチェックし、あればSMTPサーバーの使用をを許可します。
    ここで作成されるIPAddressのファイルは定期的に消去する必要があります。
    僕の環境では認証後60秒しかSMTPの使用を許可しないので、1分おきに消去確認を行います。
    消去の確認は、relay-ctrl-ageが行います。指定時間(ここでは60秒)をすぎたファイルが消去の対象です。
    クーロンに1分ごとにrelay-ctrl-ageを起動するように指定します。
    [root qmail]# crontab -e
    * * * * * /usr/local/bin/envdir /etc/relay-ctrl /usr/local/bin/relay-ctrl-age
    この様にcronに登録するとsyslog(/var/log/message)に1分おきにログが出力され見づらくなってしまいます。
    それを回避する為、/etc/syslog.confを次の通り編集してください。
    # Log anything (except mail) of level info or higher.
    # Don't log private authentication messages!
    *.info;mail.none;authpriv.none;cron.none /var/log/messages 
    <-- cron.noneを追加

    # cron log                             
    <-- この2行を追加
    cron.* /var/log/cron                
    <-- cronのログはこのファイルに書き出されます。


    relay-ctrlを利用するように起動スクリプトを書き換える必要があります。
    /etc/rc.d/init.d/qmailの編集
    #!/bin/sh

    [ -f /var/qmail/rc ] || exit 0
    PATH=$PATH:/var/qmail/bin:/usr/local/bin

    case "$1" in
        start)
            echo -n "Starting... qmail"
            csh -cf '/var/qmail/rc &'

            envdir /etc/relay-ctrl relay-ctrl-chdir \
            tcpserver -v -u 711 -g 710 0 smtp \
            relay-ctrl-check qmail-smtpd 2>&1 | splogger smtpd 3 &

            envdir /etc/relay-ctrl relay-ctrl-chdir \
            tcpserver -v 0 pop3 qmail-popup smtp.ryouto.jp \
            checkpassword relay-ctrl-allow qmail-pop3d Maildir 2>&1 | splogger pop3d 3&
            touch /var/lock/qmail
            ;;
        stop)
            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
            rm -f /var/lock/qmail
            ;;
        *)
            echo "Usage: "$0" {start|stop}"
            exit 1
    esac
    exit 0

  10. APOP認証の設定
    僕もPOPサーバーの運用を始めた段階ではAPOPは設定しませんでした。
    何故なら、使用できるメーラーが限られてしまうし(僕が利用しているBeckeyではAPOPは出来るが、嫁ちゃんが使っているOutlook Expressでは使用できない。)、パスワード盗む人もいないだろうと思ってたから。
    しかし、僕のSMTPサーバーにSPAMメールの踏み台にしようとした痕跡などがあったりして、やっぱりインターネットは怖い!何がおきるか分からない。
    そんなわけで、APOPの設定を行います。
    が、必ずAPOPが出来るメーラーを使える環境からアクセスできるとは限らないので、POPも出来るようにしておきます。
    [root src]# tar zxvf checkpw-1.00.tar.gz
    [root src]# cd checkpw-1.00
    インストール先を変更します。
    何となく、qmail関係は/var/qmail/binにまとめたいだけです。深い意味はありません。

    [
    root checkpw-1.00]# vi conf-home
    /
     ↓                <-- conf-homeの先頭行を/から/var/qmailに変更します。
    /var/qmail
    [root checkpw-1.00]# make setup check
    次にqmailにパッチをあてます。
    これはPOPとAPOPを同時に使用する場合に必要です。
    従って、全ユーザーがAPOPしか利用しないのであればこのパッチは必要ないです。
    qmailのソースコードにパッチをあて、makeし直します。
    [root checkpw-1.00]# cd /usr/local/src/qmail-1.03
    [
    root qmail-1.03]# patch -p1 < ../checkpw-1.00/qmail-popup-auth.patch
    [root qmail-1.03]# /etc/rc.d/init.d/qmail stop
    [root qmail-1.03]# make setup check
    再び、/etc/rc.d/init.d/qmailの編集が必要です。
    checkpwを使用するように書き換えます。
    #!/bin/sh

    [ -f /var/qmail/rc ] || exit 0
    PATH=$PATH:/var/qmail/bin:/usr/local/bin

    case "$1" in
        start)
            echo -n "Starting... qmail"

            csh -cf '/var/qmail/rc &'

            envdir /etc/relay-ctrl relay-ctrl-chdir \
            tcpserver -v -u 711 -g 710 0 smtp \
            relay-ctrl-check qmail-smtpd 2>&1 | splogger smtpd 3 &

            envdir /etc/relay-ctrl relay-ctrl-chdir \
            tcpserver -v 0 pop3 qmail-popup smtp.ryouto.jp \
            selectcheckpw relay-ctrl-allow qmail-pop3d Maildir 2>&1 | splogger pop3d 3&
            touch /var/lock/qmail
            ;;
        stop)
            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
            rm -f /var/lock/qmail
            ;;
        *)
            echo "Usage: "$0" {start|stop}"
            exit 1
    esac
    exit 0

    selectcheckpwを使った場合、POP,APOPともに認証パスワードはシステムのパスワードではなく、
    パスワードファイルで設定します。
    では、早速既存ユーザーのパスワードを設定します。
    [root init.d]# su - hoge
    [
    hoge hoge]$ echo "hoge" > ~/Maildir/.password
    [
    hoge hoge]$ chmod 600 ~/Maildir/.password

  11. 仮想ドメイン(virtual domain)・ユーザー(virtual user)の作成
    システムアカウントを作成せずに、ユーザーアカウントを作成する場合には仮想ドメインを作成し、その中で仮想ユーザーを作成する必要があります。
    僕はvpopmailをインストールしました。
    インストールと、設定はここを参照して下さい。
最後に、qmailのサービスを立ち上げて終了です。


お問い合わせはwebmaster@ryouto.jpまで。
Copyright (C)2003 ryouto.jp. All Rights Reserved.