qmail

Sendmail に代わる次世代の MTA と言われる qmail を導入してみましょう。qmail は sendmail ほどポピュラーではないため、資料なども少ないのですが、マニュアルを読めば何とかなりそうではあります。日本語のホームページもあります。

1.ソースファイルのダウンロードと展開

まず、qmail用のホームディレクトリを作ります。

# mkdir /var/qmail

そして、qmail 用の group と users を作ります。

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

最新のソースファイル(2001年8月現在1.03)をダウンロードして、適当なディレクトリ(/usr/local/srcなど)に置いて展開します。また、ローカルタイム表示用のpatchもダウンロードしておきます。そしてソースディレクトリにpatchを移動してpatchを当てます。同時に .frowardをそのまま使うためのdot-forwardもダウンロードしてしておきましょう。

# cd /usr/local/src
# tar zxvf qmail-1.03.tar.gz
# cp qmail-date-localtime.patch ./qmail-1.03
# cd qmail-1.03
# patch -s -p1 < qmail-date-localtime.patch

そして、make

# make setup check
# ./config

さらに次のコマンドを入力します。

# cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
# chmod 644 ~alias/.qmail*

sendmail を削除します。

# rpm -e --nodeps sendmail

mailはデフォルトでは、~/Mailbox に貯まります。そこで、いままでのPOP3と互換性を保つために、リンクを張ります。

例:
# ln -s /home/masao/Mailbox /var/spool/mail/masao

これで今までと同じメーラーからPOP3としてメールを受けることができます。また、ホスト名を省略した、ユーザー名@ドメイン名で受信できるように、localsとrcpthostsファイルにドメイン名を書き加えます。

# vi /var/qmail/control/locals
-----
.
.
.
fujie.org
-----
# cp /var/qmail/control/locals /var/qmail/control/rcpthosts

2.Mail directory

qmail はデフォルトでは、メール形式は従来のMailbox形式で配送されます。しかし、作者も書いているようにセキュリティの面からもMaildir形式が推奨されています。これだとメールが一通毎のファイルになりより安全です。Maildir形式に変えるには2つの方法があります。まず、起動ファイル(後述)を変更する方法で例えば、

# vi /var/qmail/boot/home として
-----
qmail-start ./Mailbox splogger qmail を
qmail-start ./Maildir/ splogger qmail に変更する。
これを、後述のように、/var/qmail/rc にコピーする。
-----
# cp /var/qmail/boot/home /var/qmail/rc

もうひとつの方法としては、ホームディレクトリに次のような配送ファイルを置きます。

$ cd ~
$ vi .qmail
-----
./Maildir/

いずれにせよ、ホームディレクトリにMaildir(他の名前でも構いません)を置かなくてはなりません。maildirmakeコマンドを利用します。

$ cd ~
$ /var/qmail/bin/maildirmake Maildir

これで、~/Maildir/new にメールが貯まります。

3.Relayの制御
このままだと、host以外から、メールを出そうとすると、reject されてしまいます。そこで、tcpserver を使って、Relayを制御してみます。もちろん、/var/qmail/control/rcpthosts を消去すればどこからでも送信できるようになりますが、spam の踏み台にされてしまい、ORBS にも登録されてしまいます。tcpserverはqmailの作者と同じ人が作ったソフトで、inetdに代わるべきものと言われています。確かにinetdより速く安全のようです。詳しくは http://cr.yp.to/ucspi-tcp.html を参照してください。まずucspi-tcpをダウンロードして、/usr/local/src/に起きます。そしてmakeします。

# cd /usr/local/src
# tar zxvf ucspi-tcp-0.88.tar.gz
# cd ucspi-tcp-0.88
# make
# make setup check

これで、/usr/local/binにtcp*がインストールされます。次に、smtpのアクセスをコントロールする /etc/tcp.smtp.cdb を作成します。最初にルールを/etc/tcp.smtpに記述します。

# cd /etc
# vi tcp.smtp
-----
192.168.:allow,RELAYCLIENT=""
210.250.4.:allow,RELAYCLIENT=""
127.0.0.:allow,RELAYCLIENT=""
=.wind.ne.jp:allow,RELAYCLIENT=""
=.uncle.or.jp:allow,RELAYCLIENT=""
=.fujie.org:allow,RELAYCLIENT=""
:allow

これは、192.168.*.* と 210.250.4.* さらに、*.wind.ne.jp、*.uncle.or.jp、*.fujie.org からのみ Relay を受け入れるという意味です。これでclientからのメールも受け付けるはずです。さらに、

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

として /etc/tcp.smtp.cdb を作成します。/etc/tcp.smtpを変更したときは、必ずこのコマンドを実行して、/etc/tcp.smtp.cdbを作り直す必要があります。次に、inetd.conf のsmtpに関する行をコメントアウトします(行頭に#を付けて無効にする)。これは、RedHat Linux 7.1J では不要です(ファイルがない)。最後にtcserverでqmail-smtpを起動できるように、次のような起動スクリプトを /etc/rc.d/rc などに記載します。

# vi /etc/rc.d/rc
-----
# tcpserver smtp
/usr/local/bin/tcpserver -hp -u 503 -g 502 -x /etc/tcp.smtp.cdb 0 smtp /var/qmail/bin/qmail-smtpd &
-----

この場合、503 と 502 は qmaild の UID と GID です。これで次回起動時から有効になります。

4.qmail-pop3d
sendmail + qpopper で動かしていた pop3d も qmail-pop3d に変更し、Maildir に対応させます。まず、checkpassword をインストールします。ここからソースをダウンロードして展開して make します。

# cd /usr/local/src
# tar zxvf checkpassword-0.90.tar.gz
# cd checkpassword-0.90
# make
# make setup check

tcpserver で qmail-pop3d を起動するために、inetd.conf の pop3dの部分をコメントアウトして(なければ不要)、次のようなスクリプトを起動ファイル( /etc/rc.d/rc など)に追加します。

# tcpserver qmail-pop3d
/usr/local/bin/tcpserver 0 110 /var/qmail/bin/qmail-popup ns.fujie.org /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &

5.起動スクリプト

次に、/var/qmail/boot/home (procmail と dot-forward を併用するなら proc+df)を /var/qmail/rc にコピーします。

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

次に起動スクリプト(RHLなら/etc/rc.d/rc)に次の1行を加えます。

# vi /etc/rc.d/rc
-----
csh -cf '/var/qmail/rc &'
-----

これで reboot すれば起動されているはずです。ps ax コマンドで確かめられます。

TOP PAGE