2000/9/13
バージョン qmail 1.03
OS RedHat 6.2J (Linux 2.2.14-5.0)
ホームページ http://www.qmail.org/ (公式ページ)
http://www.jp.qmail.org/ (日本語ページ)
ダウンロード http://cr.yp.to/qmail.html (qmail) 
http://cr.yp.to/ucspi-tcp.html (ucspi-tcp) 
http://cr.yp.to/checkpwd.html (checkpassword)
http://www.geocities.co.jp/SiliconValley/4777/qmail/checkpw/ (checkpw) 

複雑で性能が低くセキュリティホールがなくならないsendmailの代替として使用できるMTAです。シンプル軽量かつ非常に高性能です。

周辺ソフトのインストール

ucspi-tcpをインストールします。

$ tar xvfz ucspi-tcp-0.88.tar.gz

$ cd ucspi-tcp-0.88
$ make

$ su

# make setup check

# exit

checkpasswordをインストールします。

$ tar xvfz checkpassword-0.81.tar.gz

$ cd checkpassword-0.81
$ make

$ su

# make setup check

# exit

qmailのインストール

$ tar xvfz qmail-1.03.tar.gz

$ cd qmail
$ su -

インストールディレクトリを作成します。

# mkdir /var/qmail

INSTALL.idsに従ってアカウントを設定します。

# 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

コンパイル・インストールします。

# make setup check

configを実行して設定ファイルをセットします。

# ./config

上のコマンドでうまくいかない場合は以下のように./config-fastコマンドを使用して明示的にFQDNを指定します。

# ./config-fast ark.bitarts.co.jp

qmailでは/etc/aliasesを使いません。
qmail用に最低限のエイリアスを設定します。

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

こうやって作ったエイリアスファイルに転送先などを書いておきます。転送の場合は頭に&をつけて、&miyamaeなどと書きます。

/var/qmail/boot/homeを/var/qmail/rcにコピーします。

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

/var/qmail/control/localsにはローカルに配信するドメイン名/ホスト名を記述します。configコマンドでは、メールサーバのホスト名が登録されているので(ここではark.bitarts.co.jp)、必要なものを追加します。(ここではbitarts.co.jpを追加)/var/qmail/control/rcphostsには配送を受け入れるドメイン名/ホスト名を記述します。通常はlocalsと同じ内容になっていれば良いでしょう。

rcphostsに記述された宛先以外へは配送されない設定ですので、このままでは外部にメールを送ることができません。そこで自サイト内からのSMTP接続の時は許可するように設定します。

/var/qmail/control/tcprules.txtを編集します。

127.0.0.1:allow,RELAYCLIENT=""
192.168.1.:allow,RELAYCLIENT=""

:allow

このファイルを元にtcprules.datを生成します。

# cd /var/qmail/control/
# tcprules tcprules.dat tcprules.tmp < tcprules.txt

この場合、192.168.1.*のネットワークからの中継は許可し、その他のネットワークからはSMTP接続のみを許可し、中継は禁止します。

sendmail、binmailをシステムから削除する

sendmailをシステムから削除します。まずブートスクリプトから削除します。

# rm /etc/rc.d/rc*/*sendmail

次にsendmailデーモンを停止します。

# kill -STOP プロセスID

sendmailのキュー(/var/spool/mqueue)にメッセージが残っていたら、sendmailのキューをフラッシュします。なくなるまで繰り返します。

# /usr/lib/sendmail -q

sendmailバイナリのsetuidビットを削ります。

# chmod 0 /usr/sbin/sendmail

sendmailのバイナリを移動します。

# mv /usr/sbin/sendmail /usr/sbin/sendmail.bak

sendmailコマンドのラッパーを設定します。

# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

binmailをシステムから削除します。

# chmod 0 /bin/mail

maildir形式メールボックスの設定

rcスクリプトはデフォルトでsendmail互換であるmbox形式のメールボックスを使用するようになっていますが、qmailを使うのであればmaildir形式に移行したほうがメリットが大きいです。

/var/qmail/rcのqmail-startの行を以下のように書き換えます。

qmail-start ./Maildir/ splogger qmail

新規にアカウントを作ったときにmaildir形式のメールボックスができるようにします。

# /var/qmail/bin/maildirmake /etc/skel/Maildir
# echo ./Maildir/ > /etc/skel/.qmail

qmailを起動するようにする

ブートスクリプト(/etc/rc.d/rc.local)に以下の行を追加します。

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

# Start smtpd
/usr/local/bin/tcpserver -x /var/qmail/control/tcprules.dat \
-v -u 7770 -g 2108 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 ark.bitarts.co.jp \
/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &

リブートします。

# reboot

テスト

Telnetで直接SMTPポートに接続してメールを送ってみます。

$ telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 ark.bitarts.co.jp ESMTP
helo dude
250 ark.bitarts.co.jp
mail <[email protected]>
250 ok
rcpt <[email protected]>
250 ok
data
354 go ahead
Subject: testing

This is a test.
.
250 ok 966330065 qp 709
quit
221 ark.bitarts.co.jp
Connection closed by foreign host.

Telnetで直接POP3ポートに接続してメールを受け取ってみます。

$ telnet 127.0.0.1 110
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
+OK <[email protected]>
USER miyamae
+OK
PASS ******
+OK
LIST
+OK
1 298
.
RETR 1
+OK
Return-Path: <[email protected]>
Delivered-To: [email protected]
Received: (qmail 841 invoked from network); 15 Aug 2000 09:21:05 -0000
Received: from unknown (HELO dude) ([email protected])
by 127.0.0.1 with SMTP; 15 Aug 2000 09:21:05 -0000
Subject: testing

This is a test.

.
QUIT
+OK
Connection closed by foreign host.

APOP対応にする

ノーマルのPOP3はパスワードを平文で流すので、インターネット上にサーバを置くのであれば、パスワードを暗号化するAPOP対応にするべきです。

qmailのPOP3サーバで使われているcheckpasswordはAPOPに対応していないので、他の認証プログラムを使用します。ここでは「checkpw」というプログラムを使用します。

$ tar xvfz checkpw-0.51.tar.gz

$ cd checkpw-0.50
$ su

# make setup check

ブートスクリプト(/etc/rc.d/rc.local)を以下のように変更します。

# Start pop3d
/usr/local/bin/tcpserver 0 110 \
/var/qmail/bin/qmail-popup ark.bitarts.co.jp \
/bin/checkapoppw /var/qmail/bin/qmail-pop3d Maildir &

リブートします。

# reboot

~/Maildir/.passwordというファイルにパスワードを書いておきます。この時他のユーザーにパスワードファイルを読まれないようにパーミッションに注意します。

$ cd ~/Maildir
$ echo YOUR_PASSWORD > .password
$ chmod 600 .password