インストール

なるたけ、 qmail 付属文章の日本語訳 に沿った形でインストールします。
port で入れた場合は、 7. alias の設定から始めてください。
クライアントの場合は、不要なパッチ部分は無視して下さい。


1. インストールディレクトリの作成

# mkdir /var/qmail

2. qmail で使うユーザとグループの作成

# pw groupadd -n nofiles -g 2108
# pw useradd -n alias -u 7790 -g nofiles -d /var/qmail/alias -s /nonexistent
# pw useradd -n qmaild -u 7791 -g nofiles -d /var/qmail -s /nonexistent
# pw useradd -n qmaill -u 7792 -g nofiles -d /var/qmail -s /nonexistent
# pw useradd -n qmailp -u 7793 -g nofiles -d /var/qmail -s /nonexistent
# pw groupadd -n qmail -g 2107
# pw useradd -n qmailq -u 7794 -g qmail -d /var/qmail -s /nonexistent
# pw useradd -n qmailr -u 7795 -g qmail -d /var/qmail -s /nonexistent
# pw useradd -n qmails -u 7796 -g qmail -d /var/qmail -s /nonexistent
-u, -g の後の数字は、UID(ユーザID),GID(グループID)で、 他のとぶつからなければOKです。

上のことをスクリプトにした次のシェルスクリプトでもおっけーです。

# ./qmailuser.sh

実行すると、/etc/passwd と /etc/group に次の行が追加されます。
/etc/passwd
alias:*:7790:2108:User &:/var/qmail/alias:/nonexistent
qmaild:*:7791:2108:User &:/var/qmail:/nonexistent
qmaill:*:7792:2108:User &:/var/qmail:/nonexistent
qmailp:*:7793:2108:User &:/var/qmail:/nonexistent
qmailq:*:7794:2107:User &:/var/qmail:/nonexistent
qmailr:*:7795:2107:User &:/var/qmail:/nonexistent
qmails:*:7796:2107:User &:/var/qmail:/nonexistent
/etc/group
nofiles:*:2108:
qmail:*:2107:

3. パッケージの展開

% tar zxvf qmail-1.03.tar.gz

% tar zxvf qmapop-0.51.tar.gz

4. パッチ当て

用意したパッチと、対象となるファイルは次の通り。
パッチ qmail-popup.c.patch は、 qmapop を使って APOP 対応にするときのみ必要です。
パッチ名 対象ファイル
qmail-date-localtime.patch date822fmt.c
qmail-103.patch dns.c
qmail-smtpd.diff qmail-smtpd.c
qmail-popup.c.patch qmail-popup.c

パッチの当て方は次の通り。
% cd qmail-1.03
% patch -s -p1 < /somewhere/qmail-date-localtime.patch
% patch -s -p1 < /somewhere/qmail-103.patch
% patch -s -p1 < /somewhere/qmail-smtpd.diff
% patch -s -p1 < /somewhere/qmail-popup.c.patch

パッチを当てると、各ファイルは次のようになります。 なお、.orig はパッチを当てる前のオリジナルファイルです。
  % ls -l date822fmt.c* dns.c* qmail-smtpd.c* qmail-popup.c*
  -rw-r--r--  1 user  wheel   1811 Apr  5 23:30 date822fmt.c
  -rw-r--r--  1 user  wheel    922 Jun 15  1998 date822fmt.c.orig
  -rw-r--r--  1 user  wheel   8965 Apr  5 23:31 dns.c
  -rw-r--r--  1 user  wheel   8418 Jun 15  1998 dns.c.orig
  -rw-r--r--  1 user  wheel   4580 Apr  5 23:55 qmail-popup.c
  -rw-r--r--  1 user  wheel   4058 Jun 15  1998 qmail-popup.c.orig
  -rw-r--r--  1 user  wheel  11759 Apr  5 23:41 qmail-smtpd.c
  -rw-r--r--  1 user  wheel  11262 Jun 15  1998 qmail-smtpd.c.orig
  

5. make

% pwd
/somewhere/qmail-1.03
% make
% make man
% su
Password:
# make setup
./install
# make check
./instcheck

6. ./config

# ./config

この作業で、/var/qmail/control 以下に5つのファイルが作られます。
% ls /var/qmail/control
defaultdomain locals me plusdomain rcpthost

ホストの FQDN を host.domain.ac.jp とすると、 それぞれの中身は次のようなものです。
defaultdomain (qmail-inject: . がないアドレスに付加する)
domain.ac.jp
locals (qmail-send: ローカルに配送すべきドメイン 名のリスト)
localhost.domain.ac.jp
host.domain.ac.jp
me (自ホスト名)
host.domain.ac.jp
plusdomain (qmail-inject: + で終るホスト名に追加する)
ac.jp
rcpthosts (qmail-smtpd: 宛名として現れてよいドメ イン名のリスト。該当しないと受取拒否する)
localhost.domain.ac.jp
host.domain.ac.jp

不正中継防止のために

qmail では、/var/qmail/control/rcpthosts に現れないドメイン宛のメー ルは受取を拒否します。つまり、 デフォルトでは自 ホスト宛に来たメールしか受け取らず、転送は一切拒否する 設定になっています。
特別に、「このホストからのメールは転送したい」というときの 設定方法は tcpserver で触れます。
なお、rcpthosts ではワイルドカードの書き方も許されます。
    (例)
    domain.ac.jp   - - -  domain.ac.jp 宛のみ許す
    .domain.ac.jp  - - -  .domain.ac.jp の前にどんなホスト名が来ても許す
    
注意!
rcpthosts がない、もしくは完全にカラファイルの場合、 すべての宛先を許可し受け取ります。 外部ドメインへのメールである場合、転送されることに なりますので SPAM に攻撃されます。 rcpthosts は消してはいけません。

その他の制御ファイル

http://qmail.robata.org/qmail_control.htmlにあります。 例えば SMTP の転送先は smtproutes で制御します。 なお .qmail による転送は smtproutes では制御できないようです。

7. alias の設定

qmail では、~user/Mailbox もしくは ~user/Maildir に メールが配送されます。 しかしまた、qmail では root は決してメールを受け取りません。 では、root や postmaster や mailer-dameon 宛のメールや、 ホームディレクトリを持たないアカウント (bin や daemon たち。/etc/passwd で確認)宛のメールは どこに配送されるのでしょう?

答えは、ローカルユーザとして作成した alias が受け取ります。 まずは、必要最小限の設定をします。
# touch ~alias/.qmail-root
# touch ~alias/.qmail-postmaster
# touch ~alias/.qmail-mailer-daemon
これで、空のファイルが3つ(~alias/.qmail-*)でき、 root, postmaster, mailer-daemon 宛のメールは ~alias/Mailbox へ届きます。

root 宛のメールは ~alias/Mailbox ではなく、 一般ユーザ user で ~user/Mailbox に受け取りたいと言うときは、 ~alias/.qmail-root に &user と書いておきます。
~alias/.qmail-root
&user

最後に、/etc/alias を参照して、 非一般ユーザの設定をします。
echo '&root' > .qmail-nobody
echo '&root' > .qmail-operator
echo '&root' > .qmail-pop
echo '&root' > .qmail-system
echo '&root' > .qmail-toor
echo '&root' > .qmail-usenet
echo '&root' > .qmail-uucp
echo '&root' > .qmail-xten
echo '&root' > .qmail-abuse
echo '&root' > .qmail-security
echo '&root' > .qmail-ftp
echo '&root' > .qmail-ftp-bugs

~alias/.qmail-default について

# touch ~alias/.qmail-default
とすると、宛先不明のメールはすべて ~alias/Mailbox、 もしくは ~alias/.qmail-default に記述された一般ユーザ宛に 送られます。しかし、宛先不明のゴミメールまで処理する ことになるので、あまりお勧めできません。

.qmail-default がないとエラーメールを送信者に送り返すことになりますが、 これを悪用されて SPAM サーバへの転送を助長する可能性があります。 .qmail-default に # とだけ書いておけば、 宛先不明メールをすぐに捨てることができます。

その他、dot-qmail の詳細については、 qmail 付属の文章の日本語訳を御覧下さい。

8. Maildir 形式

「なぜに Maildir?」で触れたように、 mbox 形式より maildir 形式の方が安全です。 そこで、maildir 形式でメールを受け取るように設定します。

各ユーザーが maildir 形式にするには、次のようにします。
% cd /var/qmail/bin
% ./maildirmake $HOME/Maildir
% echo ./Maildir/ > ~/.qmail
% chmod 600 ~/.qmail
./Maildir/ の 最後の / を忘れないようにしてください。

新規ユーザを Maildir 形式にする

新規ユーザに対しては自動的に上の操作をするように するのがいいでしょう。
# /var/qmail/bin/maildirmake /usr/share/skel/Maildir

ユーザ alias を Maildir 形式にする

一般ユーザと同じですが、オーナーを変更しておきます。
# /var/qmail/bin/maildirmake ~alias/Maildir
# chown -R alias ~alias/Maildir
# rm ~alias/Mailbox

9. 起動スクリプト

qmail の起動スクリプト /var/qmail/boot/home を /var/qmail/rc としてコピーし、 ./Mailbox を ./Maildir/ で置き換えます。
# cp -p /var/qmail/boot/home /var/qmail/rc
# chmod +w /var/qmail/rc
# vi /var/qmail/rc
/var/qmail/rc
#!/bin/sh

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

# Start qmail-daemons except for qmail-smtpd
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/ splogger qmail &
# chmod -w /var/qmail/rc

起動時に自動的に qmail を起ち上げるには、この /var/qmail/rc を /usr/local/etc/rc.d あたりにリンクしておきます。
# ln -s /var/qmail/rc /usr/local/etc/rc.d/qmail.sh

トラブルシューティング

自動的に起ち上げる場合、qmail のところで起動が引っかかって しまって先に進まなくなることがありました。 これは、起動スクリプトの最後(qmail の後ろ) に バックグラウンドに回す & が抜けているとこうなります。 qmail のソースによっては /var/qmail/boot/home の段階で 抜けていることがありますので、気を付けて下さい。

10. /var/qmail/bin/qmail-showctl

/var/qmail/control 下に置かれるべきコントロールファイルの設定が どのように認識されているかを確認します。 設定してないファイルはデフォルト設定が使われています。
% /var/qmail/bin/qmail-showctl

11. MANPATH

次の2行を /etc/manpath.config に追加して、 qmail の man を MANPATH に登録します。
/etc/manpath.config
MANDATORY_MANPATH /var/qmail/man
MANPATH_MAP /var/qmail/bin /var/qmail/man

もしくは、環境変数 MANPATH に /var/qmail/man を追加します。

消さないで

あとで、APOP 対応にするために qmapop を入れますが、 その時に qmail-1.03 の作業ディレクトリが必要になります。 それまでは消さないで置いておきます。

qmail サーバのページ

qmail クライアントのページ

FreeBSD の部屋


Jan. 5, 2001