qmailの標準インストール

ソースの入手

以下のURLから最新のソースを入手してください。
http://cr.yp.to/qmail.html
今回はqmail-1.03をダウンロードしました。
ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz

また、qmailには便利にしてくれるパッチがいくつか公開されています。
ついでにこれもダウンロードしておきましょう。

(1) qmail-date-localtime.patch
日本国内で使用する場合にはローカルなタイムスタンプであるJSTを使用するためのパッチです。
ftp://ftp.nlc.net.au/pub/unix/mail/qmail/qmail-date-localtime.patch
(2) qmail-smtpd-relay-reject
'%'等を含むアカウントへのメール受信を禁止し、不正利用の対応パッチです。
http://www.qmail.org/qmail-smtpd-relay-reject
(3) qmail-103.patch
DNSに関するUDPパケットが512バイトを超えると処理できなくなる問題の修正パッチです。
http://www.ckdhr.com/ckd/qmail-103.patch

インストール

(1) インストールディレクトリの作成(/var/qmail)
まずは、インストールを行う前にインストールディレクトリを作成します。

# mkdir /var/qmail

(2) 専用ユーザの作成
qmail動作するために必要なユーザを作成します。私はシステムのユーザはUIDを100番以内に設定したいとうポリシーから以下の用に作成しています。利用しているシステムに応じてUIDを変更してください。

# groupadd -g 70 nofiles
# useradd -u 70 -g nofiles -d /var/qmail/alias -s /bin/false alias
# useradd -u 71 -g nofiles -d /var/qmail -s /bin/false qmaild
# useradd -u 72 -g nofiles -d /var/qmail -s /bin/false qmaill
# useradd -u 73 -g nofiles -d /var/qmail -s /bin/false qmailp
# groupadd -g 71 qmail
# useradd -u 74 -g qmail -d /var/qmail -s /bin/false qmailq
# useradd -u 75 -g qmail -d /var/qmail -s /bin/false qmailr
# useradd -u 76 -g qmail -d /var/qmail -s /bin/false qmails

(3) コンパイル・インストール
準備が出来たらパッチの適用及びインストール作業を行います。

$ tar xvfz qmail-1.03.tar.gz
$ cd qmail-1.03
$ patch -p1 < ../qmail-date-localtime.patch     <- patchの適用
$ patch -p1 < ../qmail-smtpd-relay-reject       <- patchの適用
$ patch -p1 < ../qmail-103.patch                <- patchの適用
$ make
$ su
# make setup
# make check

これで/var/qmailにインストールされているはずです。

qmailの設定ファイルの作成

qmailの設定は基本的に/var/qmail/controlファイルの設定で動きます。
/var/qmail/control以下のファイルを直接編集してもよいですが簡単に作成できるスクリプトがありますのでそれを利用しましょう。

(1) 自動で設定する方法

# ./config

(2) 手動で設定する方法
. /config-fastの後に利用するメールのドメイン名を入力します。

# ./config-fast hoge.example.com 

すると/var/qmail/control以下に下記のファイルが生成されます。
me : qmailが動作するマシンのホスト名(FQDN)
locals : ローカル配送とする宛先のアドレスのドメイン名
rcpthosts : 受信を許可する宛先のアドレス名

起動前の準備

自動スクリプトの準備をします。

# cp /var/qmail/boot/home /var/qmail/rc

qmailはデフォルトではsendmailで利用されているmbox形式のメールボックスを使用するようになっています。せっかくqmailを利用しますので、信頼性の高いmaildir形式にしましょう。
/var/qmail/rcを編集します。

#!/bin/sh

# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to ~/Mailbox by default.

exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/ splogger qmail          <- ./Maildir/に変更

起動スクリプトをMaildirに変更してもユーザがMailboxしか受け付けられない状態になっています。
利用するユーザのホームディレクトリにMaildirを受け取るためのディレクトリを作成します。
ユーザ hoge の場合

# cd /home/hoge
# /var/qmail/bin/maildirmake Maildir

いちいちユーザごとに作るのは大変なのでskelファイルに追加するとよいでしょう。
これでuseraddコマンドで自動的に作成されますね。

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

qmailにエリアスを設定します。
/var/qmail/alias以下に".qmail-***"というファイルを作成し、ファイル内に転送したいアドレスを&に続けて記入するだけです。
最低限以下のユーザは作成しましょう。
postmaster, mailer-daemon, root

# cd /var/qmail/alias
# echo "&hoge@example.com" > .qmail-postmaster
# echo "&hoge@example.com" > .qmail-mailer-daemon
# echo "&hoge@example.com" > .qmail-root

上記は、hoge@examle.comに転送する設定になりました。

動作確認

ローカル配送の確認をします。
起動スクリプトを動かしましょう。(バックグラウンドで動作)

# /var/qmail/rc &

qmail-injectをつかって送信テストを行います。

# /var/qmail/bin/qmail-inject
To: hoge
Subject: testmail

testmail.

Ctrl + Dで終了してください。
実際にユーザhogeにメールが届いているか確認しましょう。

# cat ~hoge/Maildir/new/*
--------------------------------------------------------------------
Return-Path: <root@hoge.example.com>
Delivered-To: hoge@hoge.example.com
Received: (qmail 30035 invoked by uid 0); 26 Mar 2004 12:56:47 +0900
Date: 26 Mar 2004 12:56:47 +0900
Message-ID: <20040326035647.30034.qmail@hoge.example.com>
From: root@hoge.example.com
To: hoge@hoge.example.com
Subject: testmail

testmail
--------------------------------------------------------------------

このようにメールがはいていれば動作に問題ありません。
完了したらpsコマンドで動作プロセスを探しkillしておきましょう。

tcpserverの設定

qmailをインストールしただけでは、メールリレー(SMTP),POPを行うことができません。
そこで、SMTP,POPを制御するためにtcpserverをインストールします。

インストール方法は tcpserverのインストール を参照して下さい。

POPサーバの設定

qmailのPOPサーバにはパスワード認証をおこなうためにcheckpasswordが必要になります。

(2) ソースの入手
以下のURLからソースを入手します。
http://cr.yp.to/checkpwd.html
今回はcheckpassword-0.90.tar.gzをダウンロードしました。
http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz

(2) インストール
ここでは、checkpassword-0.90.tar.gzをダウンロードしたものとして説明します。

$ tar xvfz checkpassword-0.90.tar.gz
$ cd checkpassword-0.90
$ su
# make setup check

/binディレクトリ以下にインストールされるはずです。

(3) 起動方法
以下のように起動します。

# /usr/local/bin/tcpserver -v -R -H 0 pop3 \
 /var/qmail/bin/qmail-popup hoge.example.com \
 /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>&1 \
 | /var/qmail/bin/splogger pop3d 3 &

tcpserverの-Hは接続ホスト情報をしらべないようにし、-Rでは接続先のホスト情報をしらべないようにするものです。ドメイン名の "hoge.example.com" は利用のシステムによって変更してください。
また、ログをsyslogへ出力するようにsploggerを利用しています。

これで、popが出来るようになっているはずです。お使いのメーラ等で動作確認をしましょう。
先ほど、テストで送ったメールが受信できます。

2004年9月7日追加
ローカルIPでのテスト環境の場合、自分自身のホストをホスト名を逆引きしようとするらしく結果、応答が悪くなるケースがあります。その際はtcpserverのオプションに
-l0(ハイフンエルゼロ)
をつける事で解消されます。

SMTPサーバの設定

SMTPは外部から容易に利用できてはSPAMの温床となりかねません。
まずは、利用できるIPを制限して利用するため、アクセスデータベースの作成をしましょう。

(1) アクセスデータベース作成
まず、データベースを作成するに当たり、以下のように/etc/tcp.smtpを作成します。

127.:allow,RELAYCLIENT=""
:allow

許可するIPに応じてallowを追加します。
続いて、cdb形式のデータベースへ変換します。

# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

/etc/tcp.smtp.cdbというファイルが出来ていれば問題ありません。

(2) 起動方法
tcpserverを利用して次のように起動します。

# /usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb \ 
 -R -H -u 71 -g 70 0 smtp /var/qmail/bin/qmail-smtpd 2>&1
 | /var/qmail/bin/splogger smtp 3 &

-xでアクセスデータベースをしてします。ここでの71はqmaildのUID,70はnofilesのGIDです。
構築の環境に応じて変更してください。popと同様にsplogerを使ってsyslogへログを出力するようにしています。

これで、SMTPが出来るようになっているはずです。お使いのメーラ等で動作確認をしましょう。
アクセスデータベースから許可されているIPからだと送信ができるようになっています。

自動起動スクリプトの作成 (2004/5/29追加)

qmailの自動起動スクリプトを作成しました。よろしければご利用ください。
/etc/rc.d/init.d/qmailとでも保存してください。
stopでtcpserver経由のプロセスをkillしていますのでqmail以外でtcpserverを利用している場合は注意が必要です。

#!/bin/sh
# chkconfig: 345 85 15
# description: Dynamic Relay Authorization Control
# processname: qmail
#
# 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."

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

        # POP3
        tcpserver -v -R -H 0 pop3 qmail-popup \
        `/bin/cat /var/qmail/control/me` /bin/checkpassword \
        qmail-pop3d Maildir 2>&1 | splogger pop3d 3 &

        # SMTP
        tcpserver -v -x /etc/tcp.smtp.cdb -R -H \
        -u `/usr/bin/id -u qmaild` -g `/usr/bin/id -g qmaild` \
        0 smtp qmail-smtpd 2>&1 | splogger smtp 3 &

        echo
        touch /var/lock/subsys/qmail
        ;;
  stop)
        # Stop daemons.
        echo "Shutting down qmail."
        kill $(/sbin/pidof tcpserver)
        kill $(/sbin/pidof qmail-send)
        echo
        rm -f /var/lock/subsys/qmail
        ;;
   *)
        echo "Usage: S99qmail {start|stop}"
        exit 1
esac

exit 0

これでqmailによる標準インストールは完了です。

marronおすすめの参考書 by Amazon
Q-Mail Q-Mail
Oreilly & Associates Inc / John R. Levine, Russell Nelson
¥ 3,965
The Qmail Handbook The Qmail Handbook
Apress / Dave Sill
¥ 5,021
Running Qmail (Sams White Book Series) Running Qmail (Sams White Book Series)
Sams / Richard Blum

Copyright(C) 2004-2006 マロンくん.NET ~サーバ管理者への道~ All Rights. Reserved.