qmailのインストールから初期設定

qmailというメールのパッケージをインストールします。今までは参考サイトをみてそのままインストールしていましたが、qmailの参考サイトがなくなってしまったのと、殆どのサイトがわかりづらかったりしたので、必要なところだけを書いています。なお、最終的にはバーチャルドメインで使えるようにqmail+vpopmail+qmailadminのようにしています。

参考サイト:http://www.geocities.jp/wakuwakustation/qmail.html

1.qmailインストール準備

qmailインストールに必要なユーザ、グループを作成する

[root@ns ~]# mkdir /var/qmail ← qmailインストールディレクトリ作成

[root@ns ~]# groupadd nofiles ← nofilesグループ作成

[root@ns ~]# useradd -g nofiles -s /sbin/nologin alias -m -d /var/qmail/alias -k /dev/null ← aliasユーザ作成

[root@ns ~]# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaild ← qmaildユーザ作成

[root@ns ~]# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaill ← qmaillユーザ作成

[root@ns ~]# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmailp ← qmailpユーザ作成

[root@ns ~]# groupadd qmail ← qmailグループ作成
[root@ns ~]# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailq ← qmailqユーザ作成

[root@ns ~]# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailr ← qmailrユーザ作成

[root@ns ~]# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmails ← qmailsユーザ作成

2.qmailインストール

準備ができたので実際にインストールをします。

[root@ns ~]# wget ftp://ftp.eu.uu.net/pub/unix/mail/qmail/qmail-1.03.tar.gz ← qmailダウンロード

[root@ns ~]# tar zxvf qmail-1.03.tar.gz ← qmail展開

[root@ns ~]# cd qmail-1.03 ← qmail展開先ディレクトリへ移動

[root@ns qmail-1.03]# wget http://www.filewatcher.com/m/qmail-date-localtime.patch.gz.741.0.0.html ← 日本標準時間対応パッチダウンロード

[root@ns qmail-1.03]# wget http://tomclegg.net/qmail/qmail-smtpd-auth-0.31.tar.gz ← SMTP-Auth対応パッチダウンロード

[root@ns qmail-1.03]# wget http://www.qmail.org/qmail-smtpd-relay-reject ← 不正中継拒否対応パッチダウンロード

[root@ns qmail-1.03]# tar zxvf qmail-smtpd-auth-0.31.tar.gz ← SMTP-Auth対応パッチ展開

[root@ns qmail-1.03]# /bin/mv qmail-smtpd-auth-0.31/* . ← SMTP-Auth対応パッチをqmail展開先ディレクトリへ移動

[root@ns qmail-1.03]# patch < qmail-date-localtime.patch ← 日本標準時間対応パッチ施行
patching file date822fmt.c

[root@ns qmail-1.03]# patch < auth.patch ← SMTP-Auth対応パッチ施行
patching file Makefile
patching file TARGETS
patching file qmail-smtpd.8
patching file qmail-smtpd.c

[root@ns qmail-1.03]# patch < qmail-smtpd-relay-reject ← 不正中継拒否対応パッチ施行
patching file qmail-smtpd.c
Hunk #1 succeeded at 56 (offset 3 lines).
Hunk #2 succeeded at 226 (offset 9 lines).
Hunk #3 succeeded at 277 (offset 11 lines).

[root@ns qmail-1.03]# vi error.h ← error.h編集
extern int errno;
↓
#include<errno.h> ← 変更
[root@ns qmail-1.03]# make setup check ← qmailインストール
・
・
・
./install
./instcheck

error.hを編集するのは、以下のエラーを防ぐためになります。

/lib/libc.so.6: could not read symbols: 不正な値です
collect2: ld はステータス 1 で終了しました
make: *** [auto-str] エラー 1

3.qmail初期設定

無事にインストールが終わったら、今度は初期設定をします。

[root@ns qmail-1.03]# ./config-fast `hostname` ← qmail初期設定
Your fully qualified host name is ns.colorbyte.co.jp.
Putting ns.wakuwakustation.com into control/me...
Putting wakuwakustation.com into control/defaultdomain...
Putting wakuwakustation.com into control/plusdomain...
Putting ns.wakuwakustation.com into control/locals...
Putting ns.wakuwakustation.com into control/rcpthosts...
Now qmail will refuse to accept SMTP messages except to ns.colorbyte.co.jp.
Make sure to change rcpthosts if you add hosts to locals or virtualdomains!

[root@ns qmail-1.03]# echo `hostname -d` >> /var/qmail/control/me ← 自ドメイン名を送信元ドメイン名にする

[root@ns qmail-1.03]# echo `hostname -d` >> /var/qmail/control/rcpthosts ← 自ドメイン名を受信ドメイン名として追加

[root@ns qmail-1.03]# echo `hostname -d` >> /var/qmail/control/locals ← 自ドメイン名をローカルドメイン名として追加

[root@ns qmail-1.03]# cd ← qmail展開先ディレクトリを抜ける

[root@ns ~]# echo "MANPATH /var/qmail/man" >> /etc/man.config ← manコマンドでqmailコマンドのマニュアルを参照できるようにする

[root@ns ~]# rm -rf qmail-1.03 ← qmail展開先ディレクトリ削除

[root@ns ~]# rm -f qmail-1.03.tar.gz ← ダウンロードしたqmail削除

4.checkpasswordのインストール

SMTP認証、POP認証に使用するcheckpasswordをインストール、そして設定します。

[root@ns ~]# wget http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz ← checkpasswordダウンロード

[root@ns ~]# tar zxvf checkpassword-0.90.tar.gz ← checkpassword展開

[root@ns ~]# cd checkpassword-0.90 ← checkpassword展開先ディレクトリへ移動

[root@ns checkpassword-0.90]# vi error.h ← error.h編集
extern int errno;
↓
#include<errno.h> ← 変更

[root@ns checkpassword-0.90]make && make setup check

以下のエラーがでてインストールの失敗をしないようにするためにerror.hを編集します

/lib/libc.so.6: could not read symbols: 不正な値です
collect2: ld はステータス 1 で終了しました
make: *** [auto-str] エラー 1

tcpserverインストール

qmailへのSMTP接続制御を行うため、tcpserverが含まれたucspi-tcpをインストールします。

[root@ns ~]# wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz ← tcpserverダウンロード

[root@ns ~]# tar zxvf ucspi-tcp-0.88.tar.gz ← ucspi-tcp展開

[root@ns ~]# cd ucspi-tcp-0.88 ← ucspi-tcp展開先ディレクトリへ移動

[root@ns ucspi-tcp-0.88]# vi error.h ← error.h編集
extern int errno;
↓
#include<errno.h> ← 変更

[root@ns ucspi-tcp-0.88]# make setup check ← ucspi-tcpインストール
・
・
・
./install
./instcheck

[root@ns ucspi-tcp-0.88]# cd ← ucspi-tcp展開先ディレクトリを抜ける

[root@ns ~]# rm -rf ucspi-tcp-0.88 ← ucspi-tcp展開先ディレクトリ削除

[root@ns ~]# rm -f ucspi-tcp-0.88.tar.gz ← ダウンロードしたucspi-tcp削除

[root@ns ~]# echo '127.:allow,RELAYCLIENT=""' > /etc/tcp.smtp ← 中継許可ホストに自ホストを登録

[root@ns ~]# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp ← /etc/tcp.smtpをcdb形式に変換

/lib/libc.so.6: could not read symbols: 不正な値です
collect2: ld はステータス 1 で終了しました
make: *** [auto-str] エラー 1

5.dot-forwardインストール

sendmail用ユーザ別メール転送設定ファイル(~/.forward)をqmailでも利用するのでインストールします。

[root@ns ~]# wget http://cr.yp.to/software/dot-forward-0.71.tar.gz ← dot-forwardダウンロード

[root@ns ~]# tar zxvf dot-forward-0.71.tar.gz ← dot-forward展開

[root@ns ~]# cd dot-forward-0.71 ← dot-forward展開先ディレクトリへ移動

[root@ns dot-forward-0.71]# vi error.h ← error.h編集
extern int errno;
↓
#include<errno.h> ← 変更

[root@ns dot-forward-0.71]# make setup check ← dot-forwardインストール
・
・
・
./instcheck

[root@ns dot-forward-0.71]# cd ← dot-forward展開先ディレクトリを抜ける

[root@ns ~]# rm -rf dot-forward-0.71 ← dot-forward展開先ディレクトリ削除

[root@ns ~]# rm -f dot-forward-0.71.tar.gz ← ダウンロードしたdot-forward削除

/lib/libc.so.6: could not read symbols: 不正な値です
collect2: ld はステータス 1 で終了しました
make: *** [auto-str] エラー 1

6.fastforwardインストール

sendmail用システム共通メール転送設定ファイル(/etc/aliases)をqmailで利用するのに必要なfastforwardをインストールします

[root@ns ~]# wget http://cr.yp.to/software/fastforward-0.51.tar.gz ← fastforwardダウンロード

[root@ns ~]# tar zxvf fastforward-0.51.tar.gz ← fastforward展開

[root@ns ~]# cd fastforward-0.51 ← fastforward展開先ディレクトリへ移動

[root@ns fastforward-0.51]# vi error.h ← error.h編集
extern int errno;
↓
#include<errno.h> ← 変更

[root@ns fastforward-0.51]# make setup check ← fastforwardインストール
・
・
・
./instcheck

[root@ns fastforward-0.51]# cd ← fastforward展開先ディレクトリを抜ける

[root@ns ~]# rm -rf fastforward-0.51 ← fastforward展開先ディレクトリ削除

[root@ns ~]# rm -f fastforward-0.51.tar.gz ← ダウンロードしたfastforward削除

[root@ns ~]# chmod 0 /usr/bin/newaliases ← 旧newaliasesコマンド無効化→なかった

[root@ns ~]# mv /usr/bin/newaliases /usr/bin/newaliases.bak ← 旧newaliasesコマンドをリネーム→やってない

[root@ns ~]# ln -s /var/qmail/bin/newaliases /usr/bin/newaliases ← newaliasesコマンドをfastforwardに置換え

[root@ns ~]# newaliases ← /etc/aliasesのcdb形式データベース作成

[root@ns ~]# ll /etc/aliases.cdb ← /etc/aliasesのcdb形式データベース作成確認
-rw-r--r-- 1 root root 5093 11月 10 22:52 /etc/aliases.cdb

[root@ns ~]# echo "|/var/qmail/bin/fastforward -p -d /etc/aliases.cdb" > /var/qmail/alias/.qmail-default ← /etc/aliases.cdbをqmailが参照するように設定

/lib/libc.so.6: could not read symbols: 不正な値です
collect2: ld はステータス 1 で終了しました
make: *** [auto-str] エラー 1

8.qmail設定

インストールが終わったのでqmailの設定をしていきます。

[root@ns ~]# echo "10485760" > /var/qmail/control/databytes ← 送受信可能メールサイズを10MB=10*1024*1024に制限
※制限を超えた場合、送信元へエラー通知される

[root@ns ~]# touch /var/qmail/control/doublebounceto ← ダブルバウンスメール※は破棄する
※ダブルバウンスメールとは、送信者・受信者ともに存在しないメールのこと

9.Maildir形式のメールボックス作成

デフォルトでインストールされているsendmailのメール格納形式は共有ディレクトリ形式(「/var/spool/mail/ユーザ名」というファイルに全てのメールが蓄積されていく形式)だが、アクセス性能改善及びセキュリティ強化の観点からqmailデフォルトのMaildir形式へ移行します。

新規ユーザ追加時に自動でホームディレクトリにMaildir形式のメールボックスが作成されるようにする

[root@ns ~]# rm -rf /etc/skel/Maildir

[root@ns ~]# /var/qmail/bin/maildirmake /etc/skel/Maildir

記事は新規でqmailをインストールするのと、Postfix、Sedmailからの移行ではないため、既存ユーザーのメールデータなどの移行は載せておりません。

10.qmail起動

CGI等でメール通知に利用するsendmailコマンドをqmailに置換えます。

[root@ns ~]# chmod 0 /usr/lib/sendmail ← 旧sendmailコマンド無効化

[root@ns ~]# chmod 0 /usr/sbin/sendmail ← 旧sendmailコマンド無効化

[root@ns ~]# mv /usr/lib/sendmail /usr/lib/sendmail.bak ← 旧sendmailコマンドをリネーム

[root@ns ~]# mv /usr/sbin/sendmail /usr/sbin/sendmail.bak ← 旧sendmailコマンドをリネーム

[root@ns ~]# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail ← sendmailコマンドをqmailに置換え

[root@ns ~]# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail ← sendmailコマンドをqmailに置換え

11.qmail起動スクリプト作成

[root@ns ~]# cp /var/qmail/boot/home+df /var/qmail/rc
 ← qmail起動コマンドサンプルを所定の場所へコピー※dot-forward利用する場合

[root@ns ~]# cp /var/qmail/boot/home /var/qmail/rc
 ← qmail起動コマンドサンプルを所定の場所へコピー※dot-forward利用しない場合

[root@ns ~]# sed -i 's/Mailbox/Maildir\//g' /var/qmail/rc ← メールボックス形式をMaildirに変更

[root@ns ~]# yum -y install tcsh ← cシェルインストール

[root@ns ~]# vi /etc/rc.d/init.d/qmail ← 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

[root@ns ~]# chmod +x /etc/rc.d/init.d/qmail ← qmail起動スクリプトへ実行権限付加

12.qmail起動

qmailの起動ををします

[root@ns ~]# /etc/rc.d/init.d/qmail start ← qmail起動
Starting qmail

[root@ns ~]# chkconfig qmail --add ← qmailをchkconfigへ追加

[root@ns ~]# chkconfig qmail on ← qmail自動起動設定

[root@ns ~]# chkconfig --list qmail ← qmail自動起動設定確認
qmail           0:off   1:off   2:on    3:on    4:on    5:on    6:off ← ランレベル2~5のonを確認

これで設定は終了になります。受信メールサーバーがPOP3なため、IMAPに関する設定は省いています。