連載
» 2001年09月04日 00時00分 公開

実用qmailサーバ運用・管理術(1):qmailによるSMTPサーバの構築 (2/3)

[鶴長鎮一,@IT]

qmailのインストール

 ではインストールの手順を追って見ていきましょう。

注:以降自ホストをhost.example.jp、自ドメインをexample.jpとしていますので、実際には皆さんの環境に合わせて変更してください。

 まずqmail-1.03のソースとパッチを手に入れます。

 qmail-date-localtime.patchは、ヘッダに記録される日付・時間情報をローカルタイムに合わせます。対策が施されたqmailサーバから配信されたメールには、日本標準時を意味する「+0900」が付加されます。

 ダウンロードしたソースを展開し、パッチを当てます。

# tar xvfz qmail-1.03.tar.gz
# cd qmail-1.03/
# patch -p1 < ../qmail-date-localtime.patch

 コンパイルの前に、インストール先の作成(ここでは/var/qmail)とqmailを稼働させるのに必要なユーザーとグループの登録を行います。

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

 また、メールサーバを運用する場合、DNSの設定を省略することはできません。DNSに下記のようにドメインに対するMX(メールエクスチェンジャ)が設定されていることが前提になります。

        IN      MX      5    host.example.jp. 

 テスト目的など、とりあえず動かしてみるだけならMXは必須ではありませんが、その場合user@example.jpではサーバへの配送は行われません。user@host.example.jpのようなFQDN(Fully Qualified Domain Name:完全修飾ドメイン名)を用いてテストしてください。また、最低限host.example.jp自体はDNSに登録されている必要があります(DNSの設定方法については、BINDで作るDNSサーバ第2回「名前解決の仕組みとゾーンファイルの設定」も参照)。

 ではコンパイルです。

# make setup
# make check
# ./config

 この過程でエラーが出るようならconf-ccconf-ldファイルを編集して、gccを使用するようにするなどしてください。また、最後の./configは自ホストがDNSに登録されていない場合、

Your hostname is host.example.jp.
hard error
Sorry, I couldn't find your host's canonical name in DNS.

となるので、下記を実行します。

# ./config-fast host.example.jp

 以上の作業で、/var/qmailにqmailの動作に必要なファイルやディレクトリが作成されます。

コントロールファイルの編集

 次に、動作に必要な設定を見ていきます。/var/qmail/controlにはいくつかのファイルが作成されています。/var/qmail/controlディレクトリに移動し、viなどのエディタで編集を行います。それぞれのファイルに対する必要な項目は次のようになります。

  • defaultdomain
example.jp
toヘッダなどにドメイン名が省略された場合、補完されるドメイン名
  • locals
localhost
localhost.example.jp
host.example.jp
example.jp
受信するホスト名・ドメイン名:qmail-sendが利用
  • rcpthosts
localhost
example.jp
.example.jp
受信するホスト名・ドメイン名:qmail-smtpdが利用
  • me
host.example.jp
自サーバのFQDN
  • plusdomain
example.jp
ドメイン部が+で終わっている場合に付加されるドメイン。「user@host+」なら「user@host.example.jp」と置換される(qmal-injectが利用)

 以上で設定はほぼ終了です。たった5つのファイルを編集するだけで最小限の動作が可能で、不正中継対策も施されます。単純すぎて拍子抜けしてしまいましたか? 実際、qmailはメールサーバとして必要最少限の動作を提供するにとどめています。例えば、中継ホストの設定を柔軟に行いたい場合やスプールに対して制限したい場合は、アドオンソフトを使用することになります。

 設定が整ったところで、起動の準備を行います。まずpostmasterMAILER-DAEMONrootといった重要なアカウントに対する配信の設定です。

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

 これでpostmaster、MAILER-DAEMON、rootあてのメールは/var/qmail/aliasに保存されます。

sendmailの停止とラッパー

 すでにsendmailが動作するようになっている場合は、sendmailの動作を止める必要があります。

# /etc/rc.d/init.d/sendmail stop

 また、次からサーバ起動時にsendmailが立ち上がらないように起動スクリプトを外します。

# mv /etc/rc.d/rc2.d/S80sendmail /etc/rc.d/rc2.d/_S80sendmail
# mv /etc/rc.d/rc3.d/S80sendmail /etc/rc.d/rc3.d/_S80sendmail
# mv /etc/rc.d/rc5.d/S80sendmail /etc/rc.d/rc5.d/_S80sendmail

 mailコマンドやCGIスクリプトなどで直接/usr/lib/sendmailを参照する場合のことを考え、qmailのsendmailラッパーで置き換えます。

# cd /usr/sbin
# mv sendmail sendmail.dist
# chmod 0 sendmail.dist
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

qmailの動作確認

 では、qmailサーバを起動してみましょう。ここで紹介する方法は、動作を確認するためのものです。実際の運用では、後半で紹介するtcpserverを使った起動方法を使ってください。

 起動スクリプトを用意し、実行します。/var/qmail/boot/home/var/qmailrcという名前でコピーします。

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

 次に、/etc/inetd.confファイルに次の行を追加してinetdデーモンを再起動します。

smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd
もしほかに「smtp」で始まる行があれば「#」を行頭に付けてコメントアウトします
# /etc/rc.d/init.d/inet restart

 以上で動作確認のための準備は完了です。では、動作を確認してみましょう。psコマンドでプロセスが実行されているかを確認します。

# ps -aef | grep qmail 
qmails   14540 13180  0 00:54 pts/4    00:00:00 qmail-send 
qmaill   14541 14540  0 00:54 pts/4    00:00:00 splogger qmail 
root     14542 14540  0 00:54 pts/4    00:00:00 qmail-lspawn ./Mailbox 
qmailr   14543 14540  0 00:54 pts/4    00:00:00 qmail-rspawn 
qmailq   14544 14540  0 00:54 pts/4    00:00:00 qmail-clean

 次にメールを出してみましょう。

# echo to: root@host.example.jp | /var/qmail/bin/qmail-inject

 これで、空のメールが/var/qmail/alias/のMailboxファイルに届いているはずです。

# more /var/qmail/alias/Mailbox

で確認してみましょう。

Maildirへの移行

 ここで「Maildirじゃないの?」と疑問に思った方もいると思います。動いているプロセスを見ると、確かに「qmail-lspawn ./Mailbox」となっています。

 qmailの特徴は、sendmailのmbox形式に対していくつものメリットがあるMaildir形式だと説明しました。しかし、Maildirを使うにはもう少し作業が必要です。ユーザーごとにmboxかMaildirかを選択することも可能ですが、ここではMaildirにデフォルトで対応するようにします。

 先ほど用意した/var/qmail/rcファイルの内容を下記のように編集します。

qmail-start ./Mailbox splogger qmail

           ↓

qmail-start ./Maildir/ splogger qmail

 mboxでは各ユーザーのホームディレクトリにMailboxファイルが作成されますが、Maildirディレクトリは手動で生成する必要があります。

# /var/qmail/bin/maildirmake ~alias/Maildir
# chown -R alias /var/qmail/alias/Maildir

 これでMaildirに対応しました。Postfixでは、Maildirを使用するように設定すると各ユーザーのホームディレクトリにMaildirディレクトリが自動生成されますが、qmailでは手動で対応する必要があるので注意してください。各ユーザーのアカウントで、

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

を実行するか、rootが代わりに作成する必要があります。root権限で実行した場合は、chownでMaildirディレクトリのオーナーが各ユーザーになるように変更してください。

 新規のユーザーについては、/etc/skelディレクトリにMaildirのひな型を置いておくと、adduserコマンドなどでユーザーを作成した際に自動でMaildirディレクトリが生成されるようになります。具体的には、下記のようにします。

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

 では、Maildir対応版でqmailを起動し直します。現在起動している各qmailプロセスをkillコマンドで終了させ、psコマンドでqmailプロセスが残っていないことを確認してください。その後もう1度、

# /var/qmail/rc &

を実行します。

 念のために配送テストをもう1度行います。

# echo to: root@host.example.jp | /var/qmail/bin/qmail-inject

 今度はMailboxファイルではなく、Maildir/newディレクトリにファイルが1つできていると思います。そこでもう1度配送テストを行うと、次に届いたメールは別のファイルとして保存されるはずです。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。