qmailでPOP(POP/APOP)とPOPによるバーチャルホストを 使えるようにする / fmlの受けとりをsendmailで配送をqmailで行う / あらきのtopへ

fml with sendmail & qmail

改訂 平成9年11月22日(土)
平成10年3月31日(火) abstractをつけてみた:Sep/18
こやまさん@国際大学にちょっとだけいい方法 をおしえてもらいました(1999/Jan/12) qmailで他からのメールを一切受けとらなくていいひとは試してみるのも よろしいかと。

MLの配送の遅さをすこしでも解消させようと思っているML管理者の人は 沢山いると思います。でも、現用のsendmailをqmailにするのはちょっと 面倒だったり、契約上それができなかったり、自信がなかったり、 別のqmailの動作できるマシンが無かったりするあなたのための ページです。

また、sendmailから乗り換えるはじめとして、sendmailを動かしたまま qmailの様子を見たい人の参考になるかもしれません。

ここでは、sendmail でメールを受信して、fmlで処理をして、 qmailで配送させる方法を紹介します。

私はこうやっている!というような 実績がある方がいましたら、是非 e-mailを 下さい。

http://www.daionet.gr.jp/%7Eknok/mail/に、 既にqmailを導入していて、qmailをベースにしつつsendmail を補助的に利用するためにqmailとsendmailを立ち上げる方法が あります。(by 野首@daionetさん)

Index


概要(流れ)

今から説明することは、通常のメールの受信/配送にはsendmailを使い続けながら、 MLの配送だけはqmailを使うことを目的としています。

概念図:
      sendmail <-------------    (                       )
              通常--------------> (                       )
          ML向                    (                         )
            |                    (   OTHER SITES              )
           \|/                   (   インターネットのくもくも)
           FML                     (                        )
            |                         (________________   )
            |                             /|\
           \|/                             |
         qmail ----------------------------|

通常、SMTPはWKSとして、終点ポートがtcp/25を利用して通信をします。 そこで、sendmailを通常どおりに動作させておけば、sendmailは とうぜんいつものように使うことができます。

また、FMLや、majordomo、distributeなどのMLサーバは、MTAから メールを受けとり、ヘッダの書きかえなどの処理を行なったあとで、 MTAに配送を依頼します。 このとき、配送を依頼するMTAをtcp/25とは異なるポートで受信するように 設定しておけば sendmailは動作させたままで、他のMTAを利用することができます。

ここでは、qmail を任意のポートで受信するように設定をして、sendmail を動かしたままで、qmailの配送の高速性を生かした利用をすることを 説明します。

Qmailについての解説などは、 http://www.jp.qmail.org/ Cover Page for qmailに詳細な日本語での解説、リンクがあります。


Qmailのインストール

まずなんといってもqmailをインストールしないことにはおはなしになりません。 また、受信するのはsendmailですからそのような設定をする必要があります。

ソースのゲット

ソースは、ftp://ftp.jp.qmail.org/qmail/qmail-1.01.tar.gzにあります。

qmailの基本的なインストール方法は、 qmailのアーカイブについている文書を読んでください。
それが、あなたと、あなたのサイトの全てのユーザのためです。


普通と違うところはここから。。。 別解1の場合にはqmail用のsmtp portを用意する 必要はないため、intedと/etc/services、/etc/hosts.allowの設定はいりません。 (ここは飛ばしてください)

/etc/inetd.conf

ここからが通常のqmailの設定と違うところです。
#smtp   stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.smtpd
smtp-qmail    stream  tcp     nowait  qmaild  /usr/sbin/tcpd\
  /var/qmail/bin/tcp-env /var/qmail/bin/qmail-smtpd
ここでは、smtp-qmailを設定しました。

/etc/services

さて、上でsmtp-qmailを定義しましたから、 それに見あった設定を/etc/servicesにする必要があります。
smtp            25/tcp          mail
smtp-qmail      10025/tcp        qmail-smtp
ここでは、smtp-qmailを10025番に設定しました。

/etc/hosts.allow

qmailでは、通常自分のホスト宛てのメールしか受けとり、配送をしないため、 RELAYCLIENTの設定をする必要があります。 ここでは、192.168.25.25がMLの処理をするホスト(fmlなどが動いている ホスト)のアドレスだとします。
tcp-env:        192.168.25.25, localhost:       setenv =RELAYCLIENT
ここに必要なアドレスを入れて下さい。

Qmailをホスト起動時に起動するようにする

これは、起動時のファイルに書き込むだけですので簡単です。 slackwareなどでは、/etc/rc.d/rc.localに
env -  PATH="/var/qmail/bin:$PATH" /bin/csh -cf\
             'qmail-start ./Mailbox splogger qmail &'
を記入するだけですし、debianなどでは、/etc/init.d/qmailなどをつくって、 そこに、
#!/bin/sh
env -  PATH="/var/qmail/bin:$PATH" /bin/csh -cf \
'qmail-start ./Mailbox splogger qmail &'
のように記述して、
update-rc.d qmail defaults
を実行するだけです。

配送ホストのアドレスにはsendmailでおくりたい

実は、いまのままの設定だと、あたりまえですが、qmailの動いているホストに mailが届く場所は、~/Maiilbox にとどきます。
これをsendmailに受けとらせるようにします。 そのhostのアドレスが、mx.somehost.co.jpなら
方法は、
/var/qmail/control/smtproutes に
somehost.co.jp:mx.somehost.co.jp
を加えます。そのホストがドメインのMXならば、Aレコードを指定しておくべきでしょう。 この行の意味は、hogehoge@somehost.co.jpあてのメールはmx.somehost.co.jpに おくるという意味です。 さらに、/var/qmail/control/locals で
localhost
mx.somehost.co.jp

となっているところを

localhost

だけにしないと ~/Maildirに配送されてしまいます。

FMLの設定

インストールの方法は非常に簡便ですので、 fmlに附属のINSTALLなどを見てください。

config.ph

config.phには、配送に利用するSMTPサーバと通信する相手を 設定するための変数が定義されています。

その内容を変更/追加するだけで、qmailを配送用に使用することができます。

$PORT = 10025;
$HOST          = 'foo.bar.jp';
ここでは、$PORT に先程設定した、smtp-qmailの 値を、$HOST には、そのqmailの動いているホストのFQDNを記入します。

(別解1)FMLの設定

tnx こやまさん
この方法はinetdなどからqmail-sendを起動することなく、直接fmlから qmail-sendを起動します。

これもやはりFMLのconfig.phを設定します。

config.phの1;の行の前に次の2行を書く。

  $Envelope{'mci:mailer'} = 'prog';
  $SENDMAIL = "/var/qmail/bin/qmail-smtpd";

別解1の場合にはqmail用のsmtp portを用意する 必要はないため、intedと/etc/services、/etc/hosts.allowの設定はいりません。

また、/var/qmail/control/rcpthosts は存在しないように してください。また、この場合は qmailは全てのメール中継を許容するので、 qmail-sendがnetworkから接続できないようにしてください。


logを見て確認

さて、FMLはほんとうに、qmailと通信しているんでしょうか。 FMLのlogをまず見てみましょう。var/log/_smtplogがそれです。 ここでは、qmail-relayというMLを、ドメイン bar.jpで、 ホストfoo.bar.jpで動かしているとします。
socket ok
connect ok
220 foo.bar.jp ESMTP
HELO foo.bar.jp<INPUT
250-foo.bar.jp
250-PIPELINING
250 8BITMIME
MAIL FROM:<qmail-relay@bar.jp><INPUT
250 ok
RCPT TO:<aaa@dokoka.ac.jp><INPUT
250 ok
.
.
.
DATA<INPUT
354 go ahead
------------------------------
Return-Path: <qmail-relay@bar.jp>
.
.
.
.<INPUT
250 ok 874209259 qp 27988
QUIT<INPUT
221 foo.bar.jp

さて、接続のときから、sendmailとは違うメッセージなのに 気がついたでしょうか? では次に、配送されてきたメールのヘッダを見てみましょう。
Received: (qmail 22573 invoked from network); 10 Sep 1997 02:03:42 -0000
このように、qmailのヘッダがはいっていればまあうまくいっているでしょう。

contributer list

  1. 前野さん。的確なアドバイスをありがとうございました。
  2. 遠藤@つくばさん。設定の確認ありがとうございました。
  3. 北目さん。不足分を質問していただきました。
  4. こやま@国際大学さん。いい方法をおしえていただきました。無駄なポート 開かなくっていいので、こっちのほうがスマートですね。

[はじめにもどる] [linux solutions] [yasu/Ar homepage]