qmailのススメ

文 :
Write :

概要

以前,同じようなタイトルのドキュメントがあった気がしますが,探しても見つからなかったので,自分で書くことにしました.
ススメと書きながらいきなり矛盾しますが,私は必ずしも誰にとってもqmailが最適な選択肢とは考えていませんし,他のソフトウェアと比較した上で総合的に優れているとも思っていません.反対に,総合点で言えばかなり劣るMTA(Mail Transfer Agent)だと考えています.
しかし,それらを考慮しても,qmailを使う,そしてススメたいと考える理由を述べたいと思います.
今,オープンソースでメールサーバを構築する際,MTAの選択肢として,
  • sendmail
  • qmail
  • Postfix
  • Exim
  • Courier-MTA
辺りが候補に挙がると思います.他にSmail,ZMailer,netqmailなどもあります.
簡単に紹介してみると,sendmailは元祖メールサーバと言われる定番のソフトウェアです.現在はバージョン8となっていますが,過去のバージョンとの互換性のため,設定関係が大変複雑になっていています.設定の見落としなどによるセキュリティホールを生みやすくなるため,最近ではセキュリティを気にする場合はあまり選択されません.配送などはあまり高速とは言えず,プロセスにkill -HUPすると配送キューが削除されるなど,使い勝手もあまりよいとは言えません.FreeBSDでは標準のMTAとして採用されています.
Postfixはsendmailの代替を目指して開発が進められており,多くのLinuxのディストリビューションで標準のMTAとして採用されています.設定や機能はsendmailに似せているため,sendmailからのリプレイスが容易になっています.
Eximは日本ではあまり馴染みがありませんが,Postfixと同様,sendmailの代替を目指して開発が進められており,設定ファイルの記述が分かりやすいという特徴があります.やはりsendmailからのリプレイスを意識したつくりになっているため,リプレイスは容易と言われています.
Courier-MTAは元々Courie-IMAPという名のIMAPサーバとして開発されていましたが,現在はSMTPやPOP3も扱えるMTAとなっています.WebメールやSSL/TLSなども標準で対応したメールスウィートとなっています.

OS毎のMTAの採用状況

現在,巷でよく使われているOS別に,標準のMTAを調べてみました.
ドキュメントやOSのソースコードなどで記述されている場合はそのバージョン,分からない場合はオフィシャルサイトで使われているMTAを載せました.
OS名 調査時のバージョン MTA 調査時のバージョン 情報源 備考
FreeBSD 6.0-RELEASE sendmail 8.13.4 リリースノート mx1.freebsd.orgはPostfix
Lunar Linux 1.6.0 Postfix 2.2.8 SMTPバナー -
Solaris 10 sendmail? - - btmx3.sun.comはTurboSendmail
Turbolinux 10 Server Postfix 2.1.4 公式Webサイト mail.turbolinux.co.jpはsendmail
MIRACLE LINUX V4.0 Postfix,sendmail 2.1.5,8.13.1 リリースノート ns.miraclelinux.co.jpはqmail
Debian GNU/Linux 3.1(sarge) Exim4 4.32 - master.debian.orgはExim4
Vine Linux 3.2 Postfix - - neo.vinelinux.orgはPostfix

qmailとは?

多くのサイトで同様の解説がされてると思いますが.qmailは1996年にD.J.Bernstein氏(以下djb氏)によって公開されたMTAで,セキュリティと安全確実に運用されることを最も重視しています.
セキュリティが高いことの証明としてよく使われる表現ですが,今だにバージョンが1.03であり,このバージョンが公開された1998年以降,セキュリティのバグは発見されていないことが上げられます.
このセキュリティの高さは,djb氏自身が,UNIXやMTAについて大変よく理解しており,深い考察を持っていることが上げられます.djb氏の主張が分かりやすい例として,qmailはその仕組みと考えを理解し,使いこなせる人だけに使って欲しい,という意味から,通称DJBライセンスと呼ばれるライセンスにより,基本的にはバイナリの再配布や改変版の配布を許可していません.使いたい人は,自らqmailについて調べた上で,手に入れて環境を整えて欲しい,という氏の主張と取れます.
ソースコードが公開されているオープンソースですが,開発はdjb氏のみが行っており,多人数型の開発体制ではありません.
なお余談ですが,名称はqmailという固有名詞であり,QmailやQMailという表記は間違っています.意外と,ソフトウェアの作者というのは細かい表記を気にします.

高速?

qmailのセキュリティと並ぶ大きな特徴の一つが,その高速さといわれています.まず,sendmail等と違い,qmailでは一つの大きなバイナリが動作するのではなく,用途ごとに小さなプログラムを組み合わせることで,効率よくリソースを使うようになっています.また並列処理できるところは並列処理することで,待機によるロスを防いでいます.
また,コード自体が効率的に書かれており,ほとんど無駄がありません.セキュリティ上の理由もあり,標準的なライブラリもほとんど使わず,基本的な処理もdjb氏自身がコードを書かれています.
以前,WIDE Projectの中村素典氏が書かれたMTAの性能比較を行ったページがあったのですが,その中でqmailは最も高速に動作していました.ただ,かなり前のデータなので,当時ベータ版だったPostfixなどは相当速度が向上している可能性もあります.
また一口に高速といっても,その状況も様々です.qmailが目指す高速は,高速なネットワークに接続されたホストから,不特定多数の受け入れが安定したホストに,同じメールを大量配信する,という状況であり,メーリングリストの配送などに向いています.ただし,むやみやたらな高速化は狙っておらず,停電などでメールを失わないことを優先しているため,速度が犠牲になることを覚悟で,ディスクは頻繁にsyncするようになっています.
今となっては高速さというのは伝説的な部分もあり,またハードウェアの性能向上もあるので,改めて比較する必要があると思われます.

安全

sendmailでは全てのユーザのメールはメールスプールに溜められます.メールスプールはユーザ共有のディレクトリになっています.MUA(Mail User Agent)やMTAは同時にアクセスする可能性があるため,ファイルロックが必要となりますが,メールスプールをNFSで管理してる場合など,flockなどのファイルロックが使えないことがあります.この場合,仕方が無いのでロックファイルを作成する手法でファイルロックを行いますが,ファイルロックを行うためにはディレクトリへの書き込み権限が必要となり,そこは共有ディレクトリなので当然全てのユーザが書き込める必要があります.これは明らかなセキュリティバグです.これを防ぐため,setgidなどを使う手法もありますが,MUAを使うためにわざわざ管理者にsetgidしてもらう必要があり,スマートな解決法とは言えません.
qmailでは各ユーザのメールは,各ユーザのホームディレクトリ以下で,ユーザの所有するファイルとして管理されます.
また,sendmailではmboxという形式でメールを管理しますが,ロック処理の不具合などで,全てのメールが消えてしまう恐れのある形式で,あまり安全とは言えません.
qmailではMaildirというメール消失の恐れが少ない形式で管理します.
またセキュリティという点で安全性を語るなら,前述の通りqmailは処理を異なるプログラムが処理しますが,これらのプログラムはお互いを信用しない作りになっています.これは,例えばどれかのプログラムがバグにより乗っ取られたとしても,他のプログラムまで利用されないということで,被害の拡大を防ぎます.また,UNIXのユーザ管理と権限管理をうまく活用することで,なるべくroot権限は使わず,またsetuidも基本的に使わない作りになっており,万が一プロセスを乗っ取られても被害をシステム自体に広げないように工夫されています.

確実

設定ファイルはとてもシンプルな作りになっており,記述ミスによるセキュリティホールを作る危険や,設定ミスによる動作不安の心配が少なくなっています.
しかし,これは誰でも気軽に記述できるという意味ではなく,MTAの仕組み,SMTPの仕組み,qmailの仕組みを理解している人であれば,という意味です.反対に,これらの仕組みが理解できない人には,設定ファイルの記述は難しいようになっています.これは安易にメールサーバを立ち上げる踏み台サーバを防ぐ効果もあります.
また前述した通り,メールを消失させないといった確実性は速度以上に重視されています.

問題点

セキュリティ上のバグは発見されていませんが,さすがに最終版の公開の1998年頃とは,メールの事情が異なってきています.
一つには,スパムメールの増加によるスパムメール対策や,サーバの不正リレーを防止するための対策などです.これらは他のソフトウェアと組み合わせることで解決できますが,システムを複雑にすることはセキュリティホールを作りやすく,特に理解度の低い技術者には向いていません.
また,POP/SMTP over SSLやSTARTTLSコマンド,POP before SMTPにも対応していません.これもパッチや他のソフトウェアとの組み合わせで解決できます.
Welcome spammers. If you are spammer, please mail to honeypot@bitcoffee.com. Thanks your spam!!