qmail でメールサーバを構築する


高い信頼性と性能を追求したメール配信プログラム qmail でメールシステムを構築する方法を説明する。

Red Hat Linux 6.2J 〜 9 で構築したときの記録だが、qmail に大幅な変更はないので、ほとんどの記録が今でも通用する。この安定感こそが qmail の魅力の一つといってもいいだろう。一度構築したら、まず手を入れることはない。

  • アーカイブをダウンロードする。
    qmail-1.03.tar.gz

  • アーカイブを解凍する。
    $ tar xvzf qmail-1.03.tar.gz
    

    もしローカルタイム表示用のパッチを適用するなら、 qmail-date-localtime.patchをダウンロードし当てる。
    $ cd qmail-1.03
    $ patch -p1 < /path/to/qmail-date-localtime.patch
    

  • qmailのホームディレクトリを作成する。
    $ su -
    # mkdir /var/qmail
    

  • qmail用のユーザとグループを作成する。(Linuxの場合、他のOSならINSTALL.idsを参照)
    # groupadd -g 10000 nofiles
    # useradd -M -g nofiles -u 10000 -d /var/qmail/alias alias
    # useradd -M -g nofiles -u 10002 -d /var/qmail qmaild
    # useradd -M -g nofiles -u 10003 -d /var/qmail qmaill
    # useradd -M -g nofiles -u 10004 -d /var/qmail qmailp
    # groupadd -g 10001 qmail
    # useradd -M -g qmail -u 10005 -d /var/qmail qmailq
    # useradd -M -g qmail -u 10006 -d /var/qmail qmailr
    # useradd -M -g qmail -u 10007 -d /var/qmail qmails
    

    -M を付けることで、dot-filesを作成させないことができる。

  • コンパイルする。(解凍したフォルダqmail-1.03に戻って)
    (Red Hat Linux 9 の場合、Red Hat Linux 9 に qmail がインストールできないを参照して下さい)
    # make setup check

  • 設定ファイルをセットする
    # ./config
    
    /var/qmail/control以下の設定ファイルに設定される。
    configはlocal IP addressesもDNS検索して、メイルを受け取るホストを決定します。
    # ./config-fast [itnavi.comのようにFQDN]
    
    のように明示的にFQDNを指定することもできる。

  • 必要最低限のエイリアスを作成する。
    # (cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root)
    # chmod 644 ~alias/.qmail*
    
    このエイリアスには、転送したいアドレスを入れておきます。
    例えば、
    # echo hoge@itnavi.com > /var/qmail/alias/.qmail-postmaster
    # echo hoge@itnavi.com > /var/qmail/alias/.qmail-mailer-daemon
    # echo hoge@itnavi.com > /var/qmail/alias/.qmail-root
    
    これにより、postmaster,mailer-daemon,root宛のメールが、hoge@itnavi.comに転送されます。
    ※2002/5/24 追記

  • 起動スクリプトを作成する。

    # cp /var/qmail/boot/home /var/qmail/rc
    
    のように/var/qmail/rcを作成する。
    qmail的にはMaildir形式を推奨するが使えるpopperに依存する。

    Maildir形式を採用する場合、下記のようにrcの該当行を書き換える。
    # vi /var/qmail/rc
    

    qmail-start ./Maildir/ splogger qmail
    
    のように

    Maildir形式を採用する場合、各ユーザのホームディレクトリに格納用フォルダを作成する。

    $ /var/qmail/bin/maildirmake $HOME/Maildir
    $ echo ./Maildir/ > ~/.qmail
    

    新規にアカウントを作ったときに自動的にMaildir形式のメールボックスを作成するには、スケルトンを作成しておく。
    # /var/qmail/bin/maildirmake /etc/skel/Maildir
    # echo ./Maildir/ > /etc/skel/.qmail
    
    とします。
    ※.qmailの作成方法が誤っていましたので修正しました。2002/5/23

  • qmailを起動してみる。
    # csh -cf '/var/qmail/rc &'
    

  • 存在しないはずのhogeユーザ宛にメールを送りテストしてみる。
    # echo to: hoge | /var/qmail/bin/qmail-inject

  • 配信状況をログで確認する。
    # tail /var/log/maillog

  • sendmailからqmailにアップグレードする。 すでに動いているなら
    # /etc/rc.d/init.d/sendmail stop

    sendmailを削除する。
    rpmパッケージならパッケージの削除
    # rpm -e sendmail
    --nodeps は最後の手段で、通常は依存関係のあるパッケージを同時に削除すればよい。 例えば、rpm -e sendmail fetchmail mutt のように

    sendmailコマンドのラッパーを設定する。
    # ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
    # ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
    

  • 自動起動させるには、rc.localに下記の記述をするだけでも良いが
    if [-f /var/qmail/rc ]
    then
    /bin/csh -cf /var/qmail/rc &
    fi
    

    今回はランレベルに起動スクリプトを作成する。
    /etc/rc.d/init.d/qmail
    #!/bin/sh
    #
    # qmail This shell script takes care
    # of starting and stopping qmail.
    #
    # chkconfig: 2345 80 30
    # description: Starts and stops qmail.
    
    # Source function library.
    . /etc/rc.d/init.d/functions
    
    # Source networking configuration.
    . /etc/sysconfig/network
    
    # Check that networking is up.
    [ ${NETWORKING} = "no" ] && exit 0
    
    # See how we were called.
    case "$1" in
    start)
        echo -n "Starting qmail: "
    
        # Using splogger to send the log through syslog.
        exec env - PATH="/var/qmail/bin:$PATH" \
        qmail-start ./Maildir/ splogger qmail &
    
        echo
        touch /var/lock/subsys/qmail
        ;;
    stop)
        echo -n "Shutting down qmail: "
        killproc qmail-send
        echo
        rm -f /var/lock/subsys/qmail
        echo ""
        ;;
    restart)
        echo -n "Restarting qmail: "
        $0 stop
        $0 start
        echo "done."
        ;;
    status)
        status qmail
        ;;
    flush_queue)
        echo -n "Flush mail queue: "
        killall -ALRM qmail-send
        ;;
    *)
        echo "Usage: qmail {start|stop|restart|status|flush_queue}"
        exit 1
    esac
    
    exit 0
    
    
    上記スクリプトは、chmod 700 しておきます。

    qmailのランレベルを設定する。
    # chkconfig --add qmail
    # chkconfig --list qmail
    qmail           0:off   1:off   2:on    3:on    4:on    5:on    6:off
    

  • inetdでもメールを受けることができるが、tcpserverを推奨する。
    またPOPのために、checkpasswordをインストールする。
    ucspi-tcpをダウンロードする。
    checkpasswordをダウンロードする。
    $ tar xvzf ucspi-tcp-0.88.tar.gz
    $ cd ucspi-tcp-0.88
    $ make
    $ su
    # make setup check
    # exit
    
    $ cd ..
    $ tar xvzf checkpassword-0.90.tar.gz
    $ cd checkpassword-0.90
    $ make
    $ su
    # make setup check
    # exit
    

  • rcphostsに記述された宛先以外にメールを送れるように、自サイト内からリレーを許可する設定をする。
    # cd /var/qmail/control/
    # vi tcprules.txt
    127.0.0.1:allow,RELAYCLIENT=""
    192.168.0.:allow,RELAYCLIENT=""
    
    # tcprules tcprules.dat tcprules.tmp < tcprules.txt
    

  • /etc/rc.d/init.d/qmailにtcpserverとpopperの起動の設定を追加する。
    #!/bin/sh
    #
    # qmail This shell script takes care
    # of starting and stopping qmail.
    #
    # chkconfig: 2345 80 30
    # description: Starts and stops qmail.
    
    # Source function library.
    . /etc/rc.d/init.d/functions
    
    # Source networking configuration.
    . /etc/sysconfig/network
    
    # Check that networking is up.
    [ ${NETWORKING} = "no" ] && exit 0
    
    # See how we were called.
    case "$1" in
    start)
        echo -n "Starting qmail: "
    
        # Using splogger to send the log through syslog.
        exec env - PATH="/var/qmail/bin:$PATH" \
        qmail-start ./Maildir/ splogger qmail &
    
        # Start smtpd
        /usr/local/bin/tcpserver -x /var/qmail/control/tcprules.dat \
        -v -u [qmaildのUID] -g [nofilesのGID] 0 smtp /var/qmail/bin/qmail-smtpd \
        2>&1 | /var/qmail/bin/splogger smtpd 3 &
    
        # Start pop3d
        /usr/local/bin/tcpserver 0 110 \
        /var/qmail/bin/qmail-popup [itnavi.comのようにFQDN] \
        /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &
    
        echo
        touch /var/lock/subsys/qmail
        ;;
    stop)
        echo -n "Shutting down qmail: "
        killproc qmail-send
        killproc tcpserver
        echo
        rm -f /var/lock/subsys/qmail
        echo ""
        ;;
    restart)
        echo -n "Restarting qmail: "
        $0 stop
        $0 start
        echo "done."
        ;;
    status)
        status qmail
        ;;
    flush_queue)
        echo -n "Flush mail queue: "
        killall -ALRM qmail-send
        ;;
    *)
        echo "Usage: qmail {start|stop|restart|status|flush_queue}"
        exit 1
    esac
    
    exit 0
    

    送受信に時間がかかる場合は、tcpserverのR、Hオプションを検討する。
    tcpserver - options

  • POPの場合、パスワードが平文で流れてしまうのでAPOPを使う
    checkpwをダウンロードする。
    $ tar xvzf checkpw-0.60.tar.gz
    $ cd checkpw-0.60
    $ su
    # make setup check
    

    /etc/rc.d/init.d/qmailをcheckapoppwを使うよう書き換える。
        # Start pop3d
        /usr/local/bin/tcpserver 0 110 \
        /var/qmail/bin/qmail-popup [itnavi.comのようにFQDN] \
        /bin/checkapoppw /var/qmail/bin/qmail-pop3d Maildir &
    

  • パスワードhogeでパスワードファイルを作成してみる。
    $ cd ~/Maildir/
    $ echo 'hoge' > .password
    $ chmod 600 .password
    


    不正中継を拒否する設定になっているか確認します。
    SMTP relay configuration checker


    1. qmail でメールサーバを構築する
    2. Red Hat Linux 9 に qmail がインストールできない
    3. qmail でSPAM対策する
    4. qmail 情報源




    qmail でメールサーバを構築する


  • ウイルス対策ソフト メニュー

    ESET Smart Security

    シマンテック ノートン

    ウイルスバスター

    マカフィー

    NOD32

    ウイルスセキュリティZERO

    Copyright(c) 1999-2017 ITNAVI.com サイト運営者情報