第1部 構築編

本番運用に向けて

MTA を変更する

インターネットがインターネットとして普及する以前から利用されていた代表的なサービスが電子メールだ。
WWW よりもむしろ電子メールをこそ頻繁に利用しているという人も多かろう。
で、電子メールのサービスを実現しているのが SMTP、Simple Mail Transfer Protocol という仕組みであり、SMTP の沿って電子メールを配送するソフトウェアを MTA、Message Transfer Agent と言う。

メールを送信する SMTP と、サーバからメールを受信する POP、Post Office Protocol との間には全く依存関係はない
それはかつてネットワークが小規模であった頃、ネットワークに繋がっているサーバで直接メールを読むことが通常であったため POP など必要なかったのだ。

この MTA には現在のデファクトスタンダードとして sendmail というソフトウェアが利用されている。

sendmail.org
http://www.sendmail.org/

sendmail は古くから発展を続けてきた MTA だ。
しかもインターネットにおける電子メール以外のメールの仕込みにも柔軟に対応する。

しかし、ここで落とし穴があった。
sendmail は多機能であるが、全てをひとつのソフトウェアがこなそうとしている余り巨大になりすぎてしまっている
巨大になりすぎてしまったソフトウェアの抱える問題は古今東西共通である。
バグとセキュリティホールがいつまで経っても無くならないのだ。
Linux 関連のセキュリティ勧告には、ほとんど常連のように出現している。
また設定方法が魑魅魍魎が跋扈するほどに複雑怪奇である。
設定方法を完全に理解していなければ思わぬところでセキュリティホールを空けてしまうことにもなるので、これは由々しき問題なのだ。
更に、処理速度がかなりトロい
sendmail でメーリングリストなど開設した日にはかなり CPU リソースが食い潰されてしまう。

速度的には qmail > Postfix >> sendmail という構図だろうか。
qmail と Postfix の差は余り無いが、Postfix と sendmail の差は歴然のようだ。

巨大になりすぎて管理しきれずに山のようなバグとセキュリティホールに悩まされているプログラムの代表選手は、考えるまでもなく Microsoft Windows だろう。
OS が持つべきではない変な機能や OS と直接関係ないアプリケーション追加している暇があったら、一度どっしりと腰を据えてバグとセキュリティホールのフィックスをやってもらいたいモノだ。
ま、目先の金しか興味のないビル・下逸ではとてもとても本来正常とされる発想など出来ないだろうが………

最近ではこの sendmail の問題が捨て置けなくなってしまって、その代替となる MTA が人気を博してきた。
それが Postfix であり。今回挑むことになる qmail だ。

Postfix
http://www.postfix.org/
qmail
http://www.qmail.org/

qmail はインターネットの電子メールに的を絞った小型・軽量で、かつ sendmail より遙かに安全な MTA だ。
sendmail の様に全ての機能をひとつのプログラムで実現するのではなく、様々な小型のプログラムが協調動作する。
その権限も非常に限定されており、もし何らかのセキュリティホールが見付かったとしても被害を最小限に押さえることが出来るのだ。

sendmail だと容易く root 権限を奪われたりする。
緊急度の高いセキュリティホールが頻出するのでは運用コストが馬鹿にならない、ビジネスシーンではとても使えないよ、本気で………

では、qmail のインストールに必要なファイルを順次入手していこう。
しかしこれがなかなか手強い………
一箇所に纏まっていてくれれば楽なのだが、結構分散していて、必要充分に揃えるのに結構な苦労を要求された。
結局のところは、ドキュメントの途中でリンクされている先から手に入れたりを繰り返したのだ。
取り敢えず、私が手に入れだ先を列挙しておくが、以下の URIs が恒久的に利用出来るかは疑問だ。

qmail にはセキュリティホールが見付かっていないため何年もバージョンアップがないが、このことがかえって初学者の最初の取っかかりの少なさに直結しているのではないかと思われる。
頻繁にバージョンアップされているのであれば、ファイルは一箇所に集約されていて然るべきだし、チュートリアルなどの様々なサポートが自然発生するだろう。
もっとも、MTA というソフトウェアの性質上、誰でも彼でも手を出すモノではないから仕方ないのかもしれない。

qmail-1.03.tar.gz
http://www.qmail.org/qmail-1.03.tar.gz
qmail-date-localtime.patch
ftp://ftp.nlc.net.au/pub/unix/mail/qmail/qmail-date-localtime.patch

さて、これをサーバに FTP 転送して、インストールを開始しよう。
/usr/local/src/qmail というディレクトリを用意して、qmail-1.03.tar.gz、qmail-date-localtime.patch をコピーする。
/usr/local/src/qmail に移動して作業開始だ。

まず、qmail をインストールするディレクトリを用意する。

# mkdir /var/qmail

次ぎに 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

余りのユーザの多さに辟易するかもしれないが、qmail の安全性を支える重要な箇所だ。

次ぎに、ソースを展開してパッチを適用する。

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

では、コンパイル開始だ。

# make setup
# make check

んで、設定ファイルを作成する。

# ./config

すると、/var/qmail/control に以下の設定ファイルが作成される。
内容を確認して、必要があれば修正しよう。

defaultdomain
アドレスのドメイン部に“.”が無い場合に追加するドメイン名
locals
ローカル配送とする宛先のドメイン名
me
qmail が動作するマシンのホスト名 (FQDN)
plusdomain
アドレスのドメイン部の末尾が“+”の場合に追加するドメイン名
rcphosts
受信を許可する宛先アドレスのドメイン名

では、起動させて動作確認を行う。
/var/qmail/boot/home が起動スクリプトの雛形なので、これをコピーして利用する。

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

んで、起動。

# /var/qmail/rc &

送信確認をローカル配送で行ってみる。

# /var/qmail/bin/qmail-inject
To: ********
Subject: Test Mail

Test Mail...

“********”の箇所は自分が利用しているユーザ名でも入れておこう。
最後は {Ctrl}+{D} で締めくくる。

# ls /home/********/

で調べると、Mailbox というファイルが出来ているのが分かると思う。
その中身は以下のようになっている。

From root@??????????????.??? Sat Oct 11 08:46:27 2003
Return-Path: <root@??????????????.???>
Delivered-To: ********@??????????????.???
Received: (qmail 6396 invoked by uid 0); 11 Oct 2003 17:46:20 +0900
Date: 11 Oct 2003 17:46:07 +0900
Message-ID: <20031011084607.6395.qmail@??????????????.???>
From: root@??????????????.???
To: ********@??????????????.???
Subject: Test Mail

Test Mail...

この時、“??????????????.???”は自分のサーバのドメイン名、“********”は送信先のユーザだ。

さて、この Mailbox ファイルだが、実は sendmail 等が利用している mbox 形式のメールボックスと同じ形式だ。
この mbox 形式の場合、メールは全てひとつのファイルに保存される。
従って、Mailbox ファイルひとつが壊れただけで全てのメールが破壊されるし、配送上の処理が重くなる
qmail では maildir 形式のメールボックスが利用出来るようになっている。
これはユーザ毎に指定した特定のディレクトリに、メールを一通ずつ分割して保存する形式だ。
より安全性が高く、処理が軽いことが分かると思う。
この maildir 形式のメールボックスを利用出来るようにしてみよう。

maildir 形式のメールボックスを利用したいユーザでログインし、ホームディレクトリに .qmail というファイルを作成する。
そのファイルに以下のように記述しよう。

./Maildir/

末尾の / を忘れると別の意味になってしまうので注意が必要だ。

さらに、メールを保存するディレクトリを以下のコマンドを叩いて作成する。

$ /var/qmail/bin/maildirmake Maildir

で、再びテストメールを送ってみると、/home/********/Maildir/new にメールが届いているハズだ。

では、次ぎにエイリアスの設定をしておこう。
通常インターネットにサーバを公開する場合は postmaster、mailer-deamon のメールアドレスの用意が推奨されている。
これを一端 root に配送するようにエイリアスを設定し、更に root へ配送されたメールをユーザ ******** に配送するようにエイリアスの設定をする。

qmail は root 宛のメールを処理出来ないらしいので、root を別のユーザに配送するのは必須とも言える。

# cd /var/qmail/alias/
# echo '&********' > .qmail-root
# echo '&root' > .qmail-postmaster
# echo '&root' > .qmail-mailer-deamon

試しに postmaster にメールを送ってみると、メールは正しく ******** のメールボックスに保存された。

ここまでで qmail の設定は最低限終わったが、邪魔者を消さなければならない
邪魔者とは言わずと知れた sendmail だ。

まず sendmail のサービスを停止させる。

# /sbin/service sendmail stop

これで sendmail のサービスが停止したので、次ぎに sendmail をアンインストールしてしまおう。
sendmail は色々なソフトウェアが前提として利用しているので、残しておくと何時何処で復活させられるか分かったものではないのだ。
ただ、RedHat Linux で sendmail をインストールした場合、RPM ファイルは互いの依存性を保持している。
取り敢えずそれを確認しよう。

# rpm -q --whatrequires sendmail

ここで『sendmail を必要とするパッケージは存在しません』と表示されれば問題はないハズだ。
んで、容赦なくアンインストール

# rpm -e sendmail
# rpm -e sendmail-cf
# rpm -e sendmail-devel

ただし、これだけでは実は問題がある
sendmail を内部的に利用するソフトウェアがあった場合に、正常動作しなくなるのだ。
また、PERL などで作った CGI からメールを配送する際に sendmail を直接呼び出すことのは常套手段だ。
だから、sendmail の機能をエミュレーションするラッパーを用意しなければいけない。
qmail はこの sendmail ラッパーを用意しているので、これを設定しよう。
以下のようにして、/var/qmail/bin/sendmail へのシンボリックリンクを /usr/sbin/sendmail に作成する。

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

これで sendmail のラッパーはインストールされた。
これでローカル配送の SMTP として、最低限度の MTA はインストールされたのだ。

さて、最後に自動起動スクリプトの作成とインストールなのだが、面倒なので既存の公開されているスクリプトを利用することにする。
今回の qmail 導入に際して活用した参考書籍『qmail で作る快適メールサーバー』のサポートページにスクリプトがあるので、そのまま利用させて戴く。

『qmail で作る快適メールサーバー』サポートページ
http://www.todo.ne.jp/qmail/

ここから、qmail-send.init スクリプトをダウンロードして、FTP でファイル転送する。
/etc/rc.d/init.d にコピーして、パーミッションを変更だ。

# chmod 755 qmail-send

んで、インストールする。

# chkconfig --add qmail-send

こうすると、

# /sbin/service qmail-send start
# /sbin/service qmail-send stop

で起動・停止が出来るほか、起動時に自動的に起動するようになる。
ためしに再起動して確認してみよう。

Valid HTML 4.01 Strict Valid CSS!