注意:qmailの設定方法が若干間違っていました。localsに 記述するのはqmail用ドメインのみで、sendmail用ドメインを記述 する必要はありません。
qmailは、sendmailに比べ設定が単純で信頼性も高いので、大王ネットでも メールサーバに採用しています。 しかし、全く欠点がないわけでもありません。一部のメーリングリスト ドライバはsendmail向けに設計されているため、qmailでは動かないことが あります。そこで、大王ネットでは同一ホストでqmailとsendmailを同時に立ち上げて この問題を回避しています。
qmailとsendmailを同時に利用する方法としては、荒木靖宏さんによる解説 「qmail+sendmail+fmlでMLを配送する」で既に実現されています。 しかし、そこで説明しているのは「sendmailをベースに利用し、配送のみに qmailを用いる」ための方法です。ところが、大王ネットでは既にqmailをベースと して利用しているので、この方法をとることはできません。そこで、 「qmailをベースに利用し、一部のメーリングリストのみにsendmailを用いる」 方法を考えました。
通常のメール受信は、以下の概念図(等幅フォント で見てください)で示すような単純なモデルで表されます。
+--------+ port 25 | qmail |<-----------[hoge.xx.jp] +--------+
これを崩さずにsendmailを同時に立ち上げるために、新たにsendmailで 受信するためのドメインを別に立ち上げます。そして、そのドメイン宛に きたメールは一旦qmailが受け取とらせ、port 10025で待機しているsendmail にリレーさせます。また、sendmailがメールの送信を必要とした場合は、 全てqmail側にリレーさせます。以下はその概念図です。
^ 外部に送信 | +--------+ port 25 | qmail |<-----------[list.hoge.xx.jp] +--------+ | ^ port | | qmailにrelayする 10025 V | +--------+ |sendmail| +--------+
したがって、以下のような設定が必要になります。
qmail用のドメインとsendmail用のドメインについて設定を行います。
qmail側の設定を行います
qmail側は、qmail用のドメインとsendmail用のドメイン両方のメールを 受け付けなくてはなりません。しかし、ローカルに処理するのは qmail用ドメインのみなので、/var/qmail/control/localsにそちらのみを 記述します。
前の説明では、ここでsendmail用ドメインも記述するよう 書いていましたが、あれは間違いです。
例:
localhost
smtp.hoge.xx.jp
hoge.xx.jp <---- qmail用ドメイン
qmailが受け取ったメールのうち、sendmail用ドメインのものはsendmailに リレーする必要があります。これは/var/qmail/control/smtproutesに記述 することで設定することで設定します。
例:
list.hoge.xx.jp:smtp.hoge.xx.jp:10025
筆者はsendmailの設定をCFで行っているので、ここではCFでの設定方法に ついてのみ説明します。
sendmailは通常port 25で待機しますが、qmailと同時に利用するためには、 これを変更しなければなりません。CFの場合、DAEMON_OPTIONSで設定を行います。
例:
DAEMON_OPTIONS='Port=10025'
qmailの高速な配送を利用するために、ローカル以外のメールは 全てqmailにリレーさせます。CFの場合、DIRECT_DELIVER_DOMAINSを`none'に、 DIRECT_DELIVER_MAILERを`smtp'に、DEFAULT_RELAYを自ホストに設定 することで実現できます。
例:
DIRECT_DELIVER_DOMAINS=none
DIRECT_DELIVER_MAILER=smtp
DEFAULT_RELAY='smtp:[smtp.hoge.xx.jp]'
注意:DEFAULT_RELAYのホスト名は[]で囲まなければなりません。
ローカルユーザに対してメールを配送させる場合は、さらにローカルメーラの 設定を適切に行う必要があります。qmailのローカルメーラにはqmail-localという ものがありますが、筆者はこれでうまく配送できるような設定ができなかったので、 procmailを使った設定について紹介します。
例:
LOCAL_MAILER_PATH='/usr/local/bin/procmail'
LOCAL_MAILER_FLAG_BASE='lDFMAw5:/|@SPqfhnu'
LOCAL_MAILER_ARGS='procmail -Y -a $h -d $u'
以上で設定は完了です。
ここで説明している設定ではqmail用のドメインとsendmail用のドメインを 別々にしているので、sendmail用のドメインに対してローカル ユーザへの配送をさせたくない場合もあると思います(大王ネットは まさにそのケースです)。
これに対する良い方法を筆者には思いつけなかったので、 sendmailに付属のmail.localを改造して常に'unknown name'を返すような ローカルメーラを設定するという方法で回避しています。
しかし、この方法はきちんと `550 unknown user'を返さないという問題を抱えています。もっと良い方法が ありましたら、野首宛に 連絡を頂ければ幸いです。
この文章を作成するにあたり、以下のURLを参考にしました。著者の 方々に感謝いたします。
荒木靖宏さんから、ローカルメーラにprocmailを使うという助言を いただきました。重ねて感謝いたします。
Last modified: 02/03/14
knok@daionet.gr.jp