qmailでメールサーバを作ろう! 第1回

qmailの導入とSMTPとしての設定


濱野 賢一朗(khamano@d-d.co.jp)
株式会社デジタルデザイン
Project BLUE
2000/9/7

今回のおもな内容
高速で分かりやすいqmail
導入の下準備
qmailをインストールしよう
うまくインストールできたか動作確認
自動実行とMaildirの設定

 qmailは最近人気がでてきているメールサーバです。今までLinuxでメールサーバを構築する場合にはsendmailを使うことが標準的でしたが、最近ではqmailをはじめ、postfixなどsendmailに代わるメールサーバを利用することも徐々に増えてきているようです。この連載では、この新しいメールサーバqmailの導入方法や活用法、メーリングリストの運用などについて解説していきたいと思います。

■高速で分かりやすいqmail

 近年、メール配信サービスやメーリングリストが多く利用されるようになり、大量のメールを処理しなくてはならない環境になってきたり、またセキュリティへの意識が高まってきているといえます。sendmailではなくqmailが利用されることが多くなってきているのは、こうした背景があります。その理由は、やはりqmailが「高速で安全でわかりやすい」ということにあります。ここでは、sendmail、postfixと比較することでqmailの概要を簡単に整理してみました。

  高速性 セキュリ
ティ
sendmailとの
互換性
特徴
qmail 安心して利用できる
sendmail デファクト
スタンダード
postfix sendmail互換の高速MTA

今までメールサーバのシェアを圧倒的に握ってきたsendmailが

  • 設定ファイル(sendmail.cf)が煩雑
  • 配送が高速でない
  • セキュリティホールがなくならない
  • スパムメール対策が比較的面倒

といった問題を持っている一方、qmailではこれらを解決し、

  • 設定ファイルが簡潔
  • 配送が高速である
  • セキュリティホールがない
  • スパムメール対策が容易

といった特長があります。

 実際、さわったことがある方ならおわかりだと思いますが、sendmailの設定ファイルはお世辞にも簡潔とは言えません。ただ後述しますが、qmailを使う問題として、sendmail用に作られたアプリケーションとの互換性が低くなってしまう可能性があります。例えば、転送用に利用される/etc/aliasesや .forwardなどのファイルが(そのままでは)利用できなくなります。もし、sendmail互換性が必要で高速であることを要求する場合は、sendmail互換性を重視して作られているpostfixを利用する方が好ましいでしょう(最近ではsendmailの配送効率をよくするためにsmtpfeedというものも開発されています)。

 参考に、それぞれのメールサーバの情報を下記に紹介しておきます。

 それでは、何はともあれ、qmailを使ってみましょう。

■導入の下準備

 qmailを利用するためには、qmaild、qmaill、qmailp、alias、qmailq、qmailr、qmailsといったユーザーと、nofiles、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

 このユーザーがそれぞれどのような役割を握っているのかについては、第2回で説明したいと思います。

■qmailをインストールしよう

 それでは、さっそく qmail をインストールしましょう。まずは、qmailのソースパッケージとパッチを入手します。以下のftpサイトから、2つのファイルを入手してください。
ftp://ftp.nlc.net.au/pub/unix/mail/qmail/
- qmail-1.03.tar.gz
- qmail-date-localtime.patch

 qmail-1.03.tar.gzのアーカイブを適当な場所に展開して、qmail-date-localtime.patchのパッチをあてることにしましょう。ここでは、ダウンロードしたファイルが /home/user以下にあって、/home/user/qmail-1.03 に展開するものとします。下記にコマンドを示します。

% setenv LANG C
% cd /home/user
% tar xzvf qmail-1.03.tar.gz
% cd qmail-1.03
% patch -p1 < ../qmail-date-localtime.patch

では、コンパイルしましょう。

# make setup
# make check
# ./config

 これで、/var/qmail以下に必要なファイルがインストールされ、基本的な設定が行われているはずです。qmailの設定ファイルは/var/qmail/control以下に保存されるようになっており、おもな設定ファイルは以下のようになっています。

設定ファイル 説明
defaultdomain toなどにドメイン名が省略された場合、補完されるドメイン名
locals 受信するホスト名・ドメイン名(qmail-sendが利用)
rcpthosts 受信するホスト名・ドメイン名(qmail-smtpdが利用)
me サーバのFQDN(Fully Qualified Domain Name)

 次に、起動スクリプトと必要最低限のエイリアスの設定をしておきましょう。

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

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

これで、qmailのインストールは完了です。ただし、すでにsendmailが動いている場合は停止しておく必要があります。念のために、

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

としてsendmailを停止しておきましょう。また、qmailの起動中に間違ってsendmailが立ち上がらないためにも、さらに以下のように設定しておきます。こうすることで、sendmailコマンドを使ったアプリケーションであってもqmail側にデータが渡されることになります。

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

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

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

■うまくインストールできたか動作確認

では、早速qmailを動かしてみましょう。さきほどコピーした起動スクリプトを実行します。

# /var/qmail/rc &

これで、qmailが立ち上がるはずです。確認してみましょう。

% ps -ef | grep "[q]mail"
qmails 406 402 0 date ? 00:00:07 qmail-send
qmaill 409 406 0 date ? 00:00:00 splogger qmail
root 410 406 0 date ? 00:00:00 qmail-lspawn ./Mailbox
qmailr 411 406 0 date ? 00:00:00 qmail-rspawn
qmailq 412 406 0 date ? 00:00:00 qmail-clean

ただ、これだけでは、外部からメールを受け付けることはできません。qmailでは外部からのメールをqmail-smtpdが受け付けることになっており、これはinetdもしくはtcpserver経由で起動することになります。ここでは、inetdで設定することにします(tcpserverは次回紹介します)。

 /etc/inetd.confに、

smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd

の1行を追加し、inetdを再起動します(killコマンドの引数はinetdのプロセスIDです)。

# ps auxw | grep inet | grep -v grep
root 377 0.0 0.7 1156 468 ? S Aug06 0:00 inetd
# kill -HUP 377

 tcp_wappersでアクセス制限をしている場合は、/etc/hosts.allowに、

tcp-env: 127. : setenv = RELAYCLIENT
tcp-env: ALL

の2行を書き加えます。これで、外部からのメールも受け付けることができるようになります(DNSのMXレコードの設定もお忘れなく!)。

 それでは、実際にメールの送受信のテストをしてみましょう。まずは、qmailが動いているサーバからローカルに対して送信してみましょう。

$ /var/qmail/bin/qmail-inject
to: user
test mail desu yo.
(Ctrl+D)

これで、/home/user/Mailboxに、このメールが配信されているはずです。

 次に外部からのメールを受信してみましょう。ふだん使っているメーラーなどから送信してみてください。配信状況は、

# tail -f /var/log/maillog

とやると読むことができます。もし、うまく配信できない場合は、ログを読んだ上で、

  • qmailはちゃんと起動しているか?
  • tcp_wrappersの設定が適切か?
  • DNSの設定は適切か?
  • ユーザーアカウントは存在するか?

を確認するといいでしょう。

 ここまで順調に動けば、基本的なqmailの設定は正常に完了していると思われます。通常の運用を行ううえで困ることはないでしょう。

■自動実行とMaildirの設定

 最後に、Linux起動時にqmailが立ち上がるように設定します。/etc/rc.d/rc.localの最後に以下の1行を追加します。

# qmail startup
if [-f /var/qmail/rc ]
then
/bin/csh -cf /var/qmail/rc &
fi

 ただし、ユーザー数がかなり増えたり、メールの量が膨大になる時には、通常利用される Mailboxという形式ではかなり負担がでてくることになります。そこで、ここでは、maildirという形式でメールが保存されるように設定することにします。

 Mailbox形式は、/var/spool/mail/ユーザー名 というファイルに格納されるようになっています。しかし、すべてのユーザーのメールがこの1つのディレクトリに集まったり、1つのユーザー宛のメールすべてが1つのファイルに格納されて巨大になったりすると、煩雑なうえにサーバに負荷がかかることになります。そこで、それを解決するのが、Maildir形式なのです。

 Maildir形式では、各ユーザー宛のメールは、ユーザーのホームディレクトリにできるMaildir以下のディレクトリに1メール1ファイルで保存されるようになります。

 それでは、早速設定しましょう。まず、各ユーザーディレクトリにMaildirディレクトリを作る必要がありますが、これは

/var/qmail/bin/makedirmake ~user/Maildir

と実行することで簡単に生成できます。また、

/var/qmail/bin/maildirmake /etc/skel

としておくと、ユーザーを作成した際に自動的にMaildirディレクトリが作られるので、ユーザー管理にともなうメールディレクトリ管理の手間が省けるでしょう。

 以上の手順が終わったらqmailを停止し、/var/qmail/rc を以下のように修正してqmailを立ち上げ直します。

#!/bin/sh

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

exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/ splogger qmail

 これで、Maildir形式でqmailが動作するようになります。メーリングリストなどを大量に購読しているユーザーにとっては、Maildir形式はかなり有効に働くものと思います。実際、筆者はMailbox形式で格納されているメールを直接ファイルから削除しなくてはいけないという事態が発生してしまったときに、膨大なサイズになってしまったMailboxファイルを前からずらーっと眺めて、探し出すのに非常に苦労したことがあります。

 今回は、qmailの導入から基本的な設定を行いましたが、次回は、tcpserver の利用法、POPやIMAP、APOPとの連携などの設定方法、そしてqmailの配送の仕組みなどについて説明したいと思います。


 Linux Squareフォーラム サーバ構築・運用関連記事
連載:Heartbeatでかんたんクラスタリング(連載中)
オープンソースソフトウェアの「Heartbeat」を使ってHAクラスタを実現し、サービスを「落とさない」仕組みを実現します
特集:Apache 2.2でWebサイトをパフォーマンスアップ!
最新安定版Apache 2.2は、何が変わったのか? 最新のApacheを新機能の使い方とともに解説する
連載:実用 Apache 2.0運用・管理術(全8回)
本連載では、Apache 2.0の運用や管理方法を解説する。まず必須設定と基本的なセキュリティ対策を行い今後の運用に備える
連載:実用 BIND 9で作るDNSサーバ(全15回)
本連載では、BIND 9の構築/運用方法を解説していく。実際に役立つことを目的に、セキュリティや大規模運用などのテーマを取り上げていく
連載:実用qmailサーバ運用・管理術(全14回)
本連載を通して、qmailによるメールサーバの高度な構築・運用・管理術を紹介。SPAM対策やML管理からサーバでのウイルスチェックなどまで
特集:Samba 3.0の全貌 改訂版
Samba 3.0リリースから8カ月。ここであらためて、Samba 3.0系列の新機能、インストール方法、国際化の現状を解説する

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ