qmail とは・qmail の動作概要まとめ

qmailとは

qmailとはダニエル・バーンスタインさんによって開発されたメールサーバソフトウェア・MTAです。当時メジャーな存在であったsendmailの問題点(セキュリティ・煩雑性・パフォーマンス)を解消することを意識し、作られています。現在はダニエルさんはライセンスを放棄し、開発はストップしており、廃れ行く技術感は否めませんが、現在もqmailで稼働しているサーバはそこそこ多いのではないでしょうか。
 

qmailの特徴

一般的にqmailを紹介されるシーンでは以下の特徴が挙げられることが多いです。ただし、現在Postfixなどの他のメールサーバが登場していることを考慮するとモノによっては必ずしもそうであるとはいえません。

(1)設定がシンプルである

qmailは設定を一括して行うconfファイル的なものはなく、役割が決められたファイルにパラメータを書き込むことで設定を行います。膨大な量をパラメータとして格納するsendmailのとの比較からこのように言われることが多いのだと思います。

(2)Sendmail,Postfixとは互換性なし

qmailは「sendmailイケてないよね」という思惑の基、登場したこともありsendmail,Potsfixとは構造がまったく異なります。互換性は当然ありません。sendmail・Postfixで組まれたシステムをqmailに移行するのは容易ではないと言われています。
(3)セキュリティが強固である。
qmailは役割毎に異なるプログラムが動作し、各々の役割を制御しています。そのためrootで稼働させなければいけないプログラムが減り、結果としてセキュリティ性を向上させています。windowsにしろLinuxにしろ管理者権限でプログラムを稼働させるよりも非管理者権限でプログラムを稼働させた方がセキュリティ上はベター!というところからきているのでしょう。
(4)高速なメール配信が可能である。
現在この特徴について、"他のMTAと比較した時に高速"であるかは微妙です。現に計測した結果によるとPostfixの方が早いようです。機会があれば計測してみたいですね。
(5)MailDir形式で安全なメッセージ保管ができる。
qmail登場時に注目された特徴の1つのようです。各ユーザに用意された1つのファイルにメールを保持するMboxよりも安全にファイルを保管できます。もちろん設定次第ではmbox形式での管理も可能です。
(6)インストールに手間がかかる。
CentOSを例にするとsendmail・Postfix共に標準リポジトリからyumでラクラクインストールできますが、qmailはソースインストールの必要があり、バグ修正などのパッチ適用が必要となる場面も多いです。なお、OpenSUSE(Linuxディストリビューションの1つ)のレポジトリを使えば、CentOSでもyumでインストールできる模様:)
 

qmailの設定方法

上記でも触れましたが、qmailは設定項目個別にファイルが用意されています。例えば/var/qmailにインストールを行った場合は、/var/qmail/control配下に設定ファイルが用意されます。設定を変更する場合は、該当のファイルに値を書き込みます。また、設定ファイルとは別に環境変数で設定できる設定項目も存在します。設定ファイルと環境変数の両者で設定が重複している場合には環境変数の設定が優先されます。
 

qmailのエージェント・動作概要

qmailは下記の図のように役割ごとに異なるエージェントプログラムが動作します。
qmail-arc
 
エージェント名称 役割 関連ファイル・環境変数
qmail-smtpd 外部(他のメールサーバやメールソフト)から接続を受け付け、qmail-queueに処理を渡す役割を持つ。qmailにインターネット経由で接続を受け付ける機能がないためxinetdやtcpserverを経由し起動する必要がある。rcpthostsで自身が配送を担当するドメイン宛のメールかをチェックする。 rcpthosts
$RELAYCLIENT
qmail-inject qmailが動作しているサーバ自身からメールを送信する際に利用する。標準入力経由で利用できるメールソフト的な立ち位置。sendmailコマンドに近い。 defaultdomain
defaulthosts
qmail-queue
qmail-smtpdかqmail-injectから受け取ったメッセージをキューに格納する。
 
qmail-send キューから取り出したメッセージを自身宛てか、外部宛かを判断して、ローカル配送であればqmail-lspawn、リモート配送であればqmail-rspawnに処理を引き渡す。ここでローカル配送かリモート配送化が分岐する。 locals
virtualdomains
qmail-clean 異常が発生しキュー内に残ったファイルがあった場合などに、整合性を保持するために呼び出される。  
qmail-lspawn どのユーザにメールを配送すべきか判断し、ローカル配送を行うための準備のため、qmail-localを呼び出す。  
qmail-local ローカル配送を行う。配送対象となるユーザ権限で動作する。 .qmail-default
.qmail-xxx
.qmail-xxx-default
qmail-rspawn リモート配送の準備のためqmail-remoteを呼び出します。  
qmail-remote リモート配送を行う。外部サーバに対してSMTPコネクション張り、メールを送信する。 smtproutes
 
 以上。
 
 

Copyright © 2021 たぐたぐ.com. All rights reserved.