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 がインストールできない を参照して下さい)
設定ファイルをセットする
/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の該当行を書き換える。
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
配信状況をログで確認する。
sendmailからqmailにアップグレードする。
すでに動いているなら
# /etc/rc.d/init.d/sendmail stop
sendmailを削除する。
rpmパッケージならパッケージの削除
--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
qmail でメールサーバを構築する
Red Hat Linux 9 に qmail がインストールできない
qmail でSPAM対策する
qmail 情報源
qmail でメールサーバを構築する
i2i無料WEBパーツ