Postfix ETRN Howto


Postfix 高速 ETRN サービスの目的

SMTP ETRN コマンドはインターネットに断続的に接続されるサイトのために 設計されました。ETRN を用いると、サイトはプロバイダのメールサーバに "今すぐ私のメールを全て配送してください" と伝えることができます。SMTP サーバは顧客宛メールのキューを探し、顧客の SMTP サーバに接続することに よってメールを配送します。メールは ETRN を送るのに使われた接続を通しては 配送されません。

Postfix バージョン 1.0 (バージョン 20010228 としても知られていました) 以前は ETRN コマンドを非効率な方法で実装していました: 単にキューにある メールを全て配送しようとしていました。これは多くの顧客宛のメールをキューに 溜めているメールサーバでは遅くなります。

バージョン 1.0 の時点で、Postfix は全てのキューファイルの検査を要求 しない、高速 ETRN を実装しました。代わりに、Postfix は ETRN サービスが 設定された配送先へのメールを含むキューファイルの記録を管理します。 サービスが設定されていないドメインでは、ETRN サービスは使えなくなりました。

このドキュメントは以下の話題に関する情報を提供します:

この話題に関する情報を持つ他のドキュメント:

Postfix 高速 ETRN サービスの利用

以下は SMTP クライアントがどのように ETRN サービスを要求するかを示す、 SMTP セッションの例です。クライアントのコマンドは太字で示されます。

220 my.server.tld ESMTP Postfix
helo my.client.tld
250 Ok
etrn some.customer.domain
250 Queuing started
quit
221 Bye

概要で述べたように、メールは顧客の SMTP サーバに接続することによって 配送されます; ETRN コマンドを送るのに使われた接続を使っては送られません。

Postfix のオペレータは "sendmail -qRdestination" コマンドや、 Postfix バージョン 1.1 以降では"postqueue -sdestination" コマンドを 使うことで、特定の顧客に対して配送を要求することができます。

Postfix 高速 ETRN の動作方法

メールを後で配送しなければいけないと Postfix 配送エージェントが決めると、 配送エージェントは配送先ドメイン名とキューファイル名を、キューに入った メールのファイル名を持つ配送先ごとのログファイルを管理する flush(8) デーモンに送ります。これらのログファイルは $queue_directory/flush 以下に置かれます。配送先ごとのログファイルは $fast_flush_domains パラメータにリストアップされていて文法的に有効なドメイン名を持つ配送先に 対してのみ管理されます。

Postfix
配送
エージェント
-(domain, queue ID)-> Postfix
flush
デーモン
-(queue ID)-> 適格なドメイン
ごとのログ
ファイル

Postfix が "今すぐドメイン宛のメールを配送してください" という要求を 受け取ると、flush(8) デーモンはそのドメインに 対してリストアップされている全ての deferred キューファイルを incoming キューに移動し、 キューマネージャにそれらを配送するよう要求します。配送を強制するために、 キューマネージャは一時的に配送できない配送先のリストを無視します: 死亡ドメインの揮発性メモリ内リストおよび defer_transports 設定 パラメータで指定されたメッセージ配送 transport のリスト。

Postfix 高速 ETRN サービスの制限

flush(8) サービスおよび flush キューの デザインにより、高速 ETRN サービスを有効な全ての配送先に対して有効に したくないのであれば問題にはならない、いくつかの制限が生まれました。

Postfix 高速 ETRN サービスの設定

flush(8) デーモンの振る舞いは main.cf 設定ファイルのパラメータで制御されます。

デフォルトでは、Postfix "高速 ETRN" サービスは Postfix がメールを リレーしようとする配送先に対してのみ有効です:

/etc/postfix/main.cf:
    fast_flush_domains = $relay_domains
    smtpd_etrn_restrictions = permit_mynetworks, reject

注意:

他のある配送先に対して "高速 ETRN" を有効にするには、次のように指定します:

/etc/postfix/main.cf:
    fast_flush_domains = $relay_domains, some.other.domain

"高速 ETRN" を無効にして、Postfix が全ての ETRN 要求を拒否して配送先 ごとのログファイルを管理しないようにするには、次のように指定します:

/etc/postfix/main.cf:
    fast_flush_domains =

高速 ETRN サービスのみのドメインの設定

"ETRN" 顧客がオフラインの間、Postfix は自発的にそこにメールを配送しようと します。これらの試行の間には $minimal_backoff_time から $maximal_backoff_time まで増加する時間間隔があり、大量のメールがキューに入らなければ問題には なりません。

Postfix が自発的に配送を試行しないようにするためには、"ETRN" 顧客宛の メールを常に遅延するように Postfix を設定することができます。メールは ETRN コマンドや "sendmail -q"、"sendmail -qRdomain"、"postqueue -sdomain"(Postfix バージョン 1.1 以降のみ) の後でのみ配送されます。

以下の例では、単なる "smtp" や "relay" メール配送 transport の複製である "etrn-only" 配送 transport を設定します。唯一の違いはこの配送 transport 宛の メールは到着するとすぐに遅延されることです。

 1 /etc/postfix/master.cf:
 2   # =============================================================
 3   # service type  private unpriv  chroot  wakeup  maxproc command
 4   #               (yes)   (yes)   (yes)   (never) (100)
 5   # =============================================================
 6   smtp      unix  -       -       n       -       -       smtp
 7   relay     unix  -       -       n       -       -       smtp
 8   etrn-only unix  -       -       n       -       -       smtp
 9 
10 /etc/postfix/main.cf:
11   relay_domains = customer.tld ...other domains...
12   defer_transports = etrn-only
13   transport_maps = hash:/etc/postfix/transport
14
15 /etc/postfix/transport:
16   customer.tld     etrn-only:[mailhost.customer.tld]

翻訳:

Postfix 高速 ETRN サービスのテスト

デフォルトでは、"高速 ETRN" サービスは $relay_domainsにマッチする 全てのドメインに対して有効です。本当に初めて "高速 ETRN" サービスを付けて Postfix を動かす場合、サイトごとの遅延されたメールのログファイルを作るために 一度 "sendmail -q" を実行する必要があります。この段階を省略しても問題は ありません。ログファイルは結局 Postfix が定期的に遅延されたメールを配送 しようとする際に作られることになりますが、それには数時間かかります。 "sendmail -q" コマンドが全ての配送試行を完了すると (これにはしばらく 時間がかかります)、"高速 ETRN" サービスをテストする準備が整います。

"高速 ETRN" サービスをテストするためには、ETRN コマンドを実行することが 許されたクライアント (デフォルトでは全てのクライアント) から Postfix SMTP サーバに telnet し、太字で示されたコマンドをタイプします:

220 my.server.tld ESMTP Postfix
helo my.client.tld
250 Ok
etrn some.customer.domain
250 Queuing started

ここで "some.customer.domain" は $queue_directory/flush 以下の 空ではないログファイルを持つドメイン名です。

メールログファイルで、キューマネージャがキューファイルを開いたと いうことを示す数行のログファイルの記録をすぐに見てください:

Oct  2 10:51:19 myhostname postfix/qmgr[51999]: 682E8440A4:
    from=<whatever>, size=12345, nrcpt=1 (queue active)
Oct  2 10:51:19 myhostname postfix/qmgr[51999]: 02249440B7:
    from=<whatever>, size=4711, nrcpt=1 (queue active)

次に起こることは配送先が到達可能かどうかに依存します。到達可能でなければ、 メールキュー ID は $queue_directory/flush 以下の some.customer.domain ログファイルに加えられて戻されます。

サーバがリレーしようとする他の配送先 ($relay_domains にリストアップ されたドメイン) で、キューにメールがない配送先でも練習を繰り返します。 太字のテキストはあなたが入力するコマンドを表しています:

220 my.server.tld ESMTP Postfix
helo my.client.tld
250 Ok
etrn some.other.customer.domain
250 Queuing started

今回は、"ETRN" コマンドはメール配送のきっかけには全然「なりません」。 これが全てのメール配送のきっかけとなった場合、間違ったドメイン名を使って いるか、 "高速 ETRN" サービスが無効になっています。

最後に、メールサーバがリレーしようとしない配送先で練習を繰り返します。 その配送先宛のメールがサーバのキューにあるかどうかは関係ありません。

220 my.server.tld ESMTP Postfix
helo my.client.tld
250 Ok
etrn not.a.customer.domain
459 <not.a.customer.domain>: service unavailable

この場合、Postfix は上に示すように要求を拒否します。