qmailのインストールと設定方法

  • 投稿日:
  • by ライブラリ編集局

この記事ではqmailのインストールと設定方法について解説します。

OSはCentOS6.3です。

1.qmailのダウンロードとインストール

初めにqmailのダウンロードを行います。

2014年8月26日現在、以下の場所からダウンロード出来ます。

# wget http://qmail.teraren.com/qmail-1.03.tar.gz

また、ヘッダに記録される日付と時間情報を日本標準時に合わせるためのパッチをダウンロードします。

# wget http://www.itheart.com/phpgw/qmail-date-localtime.patch

次に、qmailのインストール先の作成と、qmailで使用するユーザーとグループの作成を行いましょう。

/var/qmail をインストール先として作成します。

# mkdir /var/qmail

グループとユーザーは以下の様に作成してください。

# groupadd nofiles
# useradd -g nofiles -d /var/qmail/alias -s /bin/false alias
# useradd -g nofiles -d /var/qmail -s /bin/false qmaild
# useradd -g nofiles -d /var/qmail -s /bin/false qmaill
# useradd -g nofiles -d /var/qmail -s /bin/false qmailp
# groupadd qmail
# useradd -g qmail -d /var/qmail -s /bin/false qmailq
# useradd -g qmail -d /var/qmail -s /bin/false qmailr
# useradd -g qmail -d /var/qmail -s /bin/false qmails

それではqmailのインストールに移ります。

ダウンロードしたqmail-1.03.tar.gzを展開します。

# tar zxvf qmail-1.03.tar.gz

ダウンロードしたパッチをqmail-1.03ディレクトリに移します。

# mv qmail-date-localtime.patch qmail-1.03

qmail-1.03ディレクトリに移動し、パッチを適用します。

# cd qmail-1.03

# patch < qmail-date-localtime.patch

以下の様に表示されれば成功です。

patching file date822fmt.c

次に、コンパイルを行う際に make: * [auto-str] エラー 1 というエラーが出る場合があるので qmail-1.03ディレクトリ以下のerror.hファイルを編集する事でこのエラーが出ないようにします。

# vi error.h

4行目の
extern int errno;
部分を
#include<errno.h>
に変更してください。

error.hファイルの編集が終われば、コンパイルを行います。

# make setup check

実行後、行末に

./install
./instcheck

が表示されれば成功です。

最後に

# ./config-fast example.com

を実行し、ホストの登録を行って初期設定は終了です。(example.comの部分は自身のホスト名にして下さい。)

2.qmail実行前の準備

qmail実行前にsendmailまたはpostfixが動作している場合はそれを止め、次回から起動しないようにする必要があります。

まずsendmailを停止します。

# /etc/rc.d/init.d/sendmail stop

続いて自動起動しないようにします。

# chkconfig sendmail off

最後に、実際に自動起動の設定がオフになっているか確認します。

# chkconfig --list sendmail

以下の様に表示されれば自動起動はオフになっています。

sendmail 0:off 1:off 2:off 3:off 4:off 5:off 6:off

postfixを使っている方はsendmailの部分をpostfixに変更して実行して下さい。

次にメールの保存形式を変更します。

sendmailではMailboxという全てのユーザーの全てのメッセージをひとつのファイルに保存する形式をとっています。 このままでは利便性、セキュリティ両方の面で問題があるのでqmailのメール保存形式であるMaildir形式に変更します。

# /var/qmail/bin/maildirmake ~alias/Maildir
# chown -R alias /var/qmail/alias/Maildir

上記のコマンドを実行することで実行ユーザのMaildirが作成され、利用することが出来るようになります。

また、新規ユーザが作成される度に上記のコマンドを実行する必要がないよう、新規ユーザが作成されると自動的にそのユーザのMaildirディレクトリが作成されるように設定しておきます。

# /var/qmail/bin/maildirmake /etc/skel/Maildir

上記のように/etc/skelディレクトリにMaildirの基を置いておくと自動的に作成されるようになります。

続いてqmailスクリプトを動かす為にucspi-tcpをインストールします。

# wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz

解凍します。

# tar zxvf ucspi-tcp-0.88.tar.gz

解凍したディレクトリに移動します。

# cd ucspi-tcp-0.88

qmailインストール時と同様にエラー対策としてerror.hを編集します。

# vi error.h

4行目の
extern int errno;
部分を
#include<errno.h>
に変更してください。

編集後、インストールを行います。

# make setup check

行末に

./install
./instcheck

が表示されれば成功です。

自ホストからの接続が出来るように設定します。

/etcディレクトリにtcp.smtpファイルを作成し、以下の内容を記述します。

127.:allow,RELAYCLIENT=""

# vi /etc/tcp.smtp
127.:allow,RELAYCLIENT=""

3.起動スクリプトの設定

最後に、qmailの起動スクリプトを作成します。

まず初めに/var/qmail/boot/homeを/var/qmail/rcとしてコピーします。

続いて、Maildir形式で運用する為に/var/qmail/rcを編集します。

# vi /var/qmail/rc
qmail-start ./Mailbox splogger qmail
↓
qmail-start ./Maildir/ splogger qmail

スクリプトを動かす準備が出来たのでスクリプトを作成します。

# vi /etc/rc.d/init.d/qmail

#!/bin/bash
#
# qmail
#
# chkconfig: 2345 80 30
# description: qmail start/stop script

# Source function library.
. /etc/rc.d/init.d/functions

PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin

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

start() {
    # Start daemons.
    if [ -z $(/sbin/pidof qmail-send) ];  then
        echo -n "Starting qmail"

        # qmail
        csh -cf '/var/qmail/rc &' 2>&1 > /dev/null

        # SMTP
        tcpserver -qv -l0 -HR -u `id -u qmaild` -g `id -g qmaild` \
        -x /etc/tcp.smtp.cdb 0 smtp \
        qmail-smtpd `hostname` /bin/checkpassword /bin/true 2>&1|\
        splogger smtp &

        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch /var/lock/subsys/qmail
        return $RETVAL
    else
        echo "qmail is already started"
    fi
}

stop() {
    # Stop daemons.
    if [ ! -z $(/sbin/pidof qmail-send) ];  then
        echo -n "Shutting down qmail"
        /bin/kill $(/sbin/pidof tcpserver)
        /bin/kill $(/sbin/pidof qmail-send)
        until [ -z $(/sbin/pidof qmail-send) ] && [ -z $(/sbin/pidof tcpserver) ]; do :; done
        echo
        rm -f /var/lock/subsys/qmail
    else
        echo "qmail is not running"
    fi
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        stop
        start
        ;;
  status)
        if [ ! -z $(/sbin/pidof qmail-send) ] ;  then
            echo -n "qmail (pid"
            echo -n " `/sbin/pidof qmail-send`"
            echo -n " `/sbin/pidof tcpserver`"
            echo ") is running..."
        else
            echo "qmail is stopped"
        fi
        ;;
   *)
        echo "Usage: qmail {start|stop|restart|status}"
        exit 1
esac

exit 0

作成後、作成したスクリプトに実行権限を付与します。

# chmod +x /etc/rc.d/init.d/qmail

4.自動起動設定と送受信テスト

全ての準備が出来たので、qmailを起動します。

# /etc/rc.d/init.d/qmail start

実行後、Starting qmailと表示されたら、続いて自動起動設定を行います。

# chkconfig qmail --add

# chkconfig qmail on

# chkconfig --list qmail

上記コマンドを実行後

qmail 0:off 1:off 2:on 3:on 4:on 5:on 6:off

と表示されれば自動起動設定が出来ています。

以上で設定は全て完了です。

最後に配送テストを行ってみましょう。

mailコマンドで同一ネットワーク宛てのメールを作成し、相手側でメールが受信できれば成功です。 また、同一ネットワーク内からメールを送信し、受信できるか確認しましょう。

届いたメールはホームディレクトリ下のMaildir/newに届きます。 該当ディレクトリにメールが届いていれば成功です。

届かない場合は25番ポートが開いているか確認してみて下さい。