imta.cnf ファイルのほかにも、Messaging Server には MTA サービスの設定に役立ついくつかの設定ファイルがあります。表 10–5 にファイルの一覧を示します。
reverse、forward、または一般データベースを変更した場合は、imsimta reload コマンドを発行して変更を有効にしてください。job_controller に影響を及ぼさない imta.cnf、mappings ファイル、aliases、conversions、または option.dat ファイルを変更した場合は、imsimta cnbuild に続けて imsimta restart smtp を発行する必要があります。dispatcher.cnf を変更した場合は、imsimta restart dispatcher を実行する必要があります。変更する設定ファイルが、ジョブコントローラには影響を与えるが、SMTP サーバーには影響を与えないコンパイル済みの設定に含まれる場合には、大抵、コマンドimsimta cnbuild および imsimta restart job_controller を発行する必要があります。
これらのコマンドの詳細については、『Sun Java System Messaging Server 6 2005Q4 Administration Reference』の「MTA Commands」を参照してください。
表 10–5 MTA 設定ファイル
ファイル |
説明 |
---|---|
「エイリアスファイル」 (必須) |
ディレクトリにないエイリアスを実装します。msg_svr_base/config/aliases |
「TCP/IP (SMTP) チャネルオプションファイル」 (SMTP オプションファイル) |
チャネル固有のオプションを設定します。msg_svr_base/config/channel_option |
変換チャネルがメッセージ本体部分の変換を制御するのに使用します。msg_svr_base/config/conversions |
|
「ディスパッチャー設定ファイル」 (必須) |
ディスパッチャー用の設定ファイルです。msg_svr_base/config/dispatcher.cnf |
「ジョブコントローラファイル」 (必須) |
ジョブコントローラ が使用する設定ファイルです。/msg_svr_base/config/job_controller.cnf |
MTA 設定ファイル (必須) |
アドレスの書き換え、ルーティング、およびチャネル定義に使用します。/msg_svr_base/config/imta.cnf |
「マッピングファイル」 (必須) |
マッピングテーブルのリポジトリです。/msg_svr_base/config/mappings |
グローバル MTA オプションのファイルです。/msg_svr_base/config/option.dat |
|
「テイラーファイル」 (必須) |
場所といくつかの調整パラメータを指定するファイルです。/msg_svr_base/config/imta_tailor |
一般検索テーブル (オプション) |
一般検索機能は一般データベースと同等です。再読み込み可能なコンパイル済み設定の一部です。 場所といくつかの調整パラメータを指定するファイルです。/msg_svr_base/config/general.txt |
正引き検索テーブル (オプション) |
To: アドレスの検索機能です。正引きデータベースと同等です。再読み込み可能なコンパイル済み設定の一部です。 /msg_svr_base/config/forward.txt |
リバース検索テーブル (オプション) |
From: アドレスのアドレスの検索機能です。リバースデータベースと同等です。再読み込み可能なコンパイル済み設定の一部です。/msg_svr_base/config/reverse.txt |
エイリアスファイル aliases は、ディレクトリに設定されていないエイリアスを設定します。その例として、ルートのアドレスが挙げられます。このファイルで設定したエイリアスがディレクトリにもある場合は、ファイル内の設定が無視されます。エイリアスおよび aliases ファイルの詳細については、「エイリアス」を参照してください。
aliases ファイルの変更後は、MTA を再起動するか、imsimta reload コマンドを実行してください。
TCP/IP チャネルオプションファイルは、TCP/IP チャネルのさまざまな特性を制御します。チャネルオプションファイルは MTA 設定ディレクトリに保存し、x_option という名前を付けてください。x はチャネル名です。たとえば、msg_svr_base/config/imta/tcp_local_option のようになります。詳細は、「SMTP チャネルオプションを設定する」を参照してください。すべてのチャネルオプションキーワードおよび構文の詳細は、『Sun Java System Messaging Server 6 2005Q4 Administration Reference』を参照してください。
変換ファイル conversions は、MTA を介して送受信されるメッセージの変換チャネルにおける変換方法を指定します。変換には、MTA トラフィックの任意のサブセットを選択できます。また、変換処理を行うには、プログラムまたはコマンドの任意のセットを使用できます。MTA は変換ファイルに基づいて、それぞれのメッセージ本文に対する適切な変換を選択します。
このファイルの構文の詳細は、「変換チャネル」を参照してください。
ディスパッチャー設定ファイル dispatcher.cnf では、ディスパッチャーの設定情報を指定します。インストール時に作成されたデフォルトの設定ファイルをそのまま使用することができます。ただし、セキュリティーやパフォーマンスなどの理由でデフォルトの設定ファイルを変更する場合は、dispatcher.cnf ファイルを編集することができます(概念の詳細は、「ディスパッチャー」を参照)。
ディスパッチャー設定ファイルのフォーマットは、ほかの MTA 設定ファイルのフォーマットに似ています。オプションを指定する行は、次の形式で記述されています。
option=value
option はオプション名で、value はオプションを設定する文字列または整数です。option が整数の値を受け入れる場合は、b%v の文字列表記ルールを使って基数を指定できます。この場合、b は底 10 で表す基数であり、v は底 b で表す実際の値です。これらのオプションの仕様は、次のオプション設定を適用するサービスに対応するセクションに、グループ分けされています。各行では、次の形式が使用されます。
[SERVICE=service-name]
The service-name はサービスの名前です。最初のオプション仕様、すなわちこのようなセクションタグよりも前に記述されているオプション仕様はすべてのセクションに適用されます。
次に、ディスパッチャー設定ファイル (dispatcher.cnf) の例を示します。
! オプションの最初のセットは [SERVICE=xxx] ヘッダーなしで ! 表示された、すべてのサービスに適用されるデフォルトオプション ! です。 ! MIN_PROCS=0 MAX_PROCS=5 MIN_CONNS=5 MAX_CONNS=20 MAX_LIFE_TIME=86400 MAX_LIFE_CONNS=100 MAX_SHUTDOWN=2 ! ! ディスパッチャーで使用できるサービスを定義する ! [SERVICE=SMTP] PORT=25 IMAGE=msg_svr_base/lib/tcp_smtp_server LOGFILE=msg_svr_base/log/tcp_smtp_server.log |
このファイルのパラメータの詳細については、『Sun Java System Messaging Server 6 2005Q4 Administration Reference』を参照してください。
mappings ファイルでは、MTA が入力文字列を出力文字列にマップする方法を定義します。
MTA コンポーネントの多くは、テーブル検索に基づいた情報を使用します。一般に、このタイプのテーブルは、入力文字列を出力文字列に変える (マップする) のに使用されます。このようなテーブルは、マッピングテーブルと呼ばれ、通常 2 つのカラムで構成されます。1 つめ (左側) のカラムには入力文字列が、2 つめ (右側) のカラムにはその入力文字列に関連付けられた出力文字列が並んでいます。MTA データベースのほとんどは、このタイプのマッピングテーブルです。ただし、MTA データベースファイルには、ワイルドカード検索機能がありません。データベース全体でワイルドカードに一致するものを検索するのは非効率的だからです。
mappings ファイルによって、MTA は複数のマッピングテーブルをサポートできるようになります。さらに、完全なワイルドカード機能もあり、複数の手順や反復マッピング方法にも対応しています。このアプローチは、データベースを使用する場合に比べ、さらに多くの処理を必要とします。特に、エントリ数が多い場合などはなおさらです。ただし、それに付随して柔軟性が増すため、同等のデータベースにおけるエントリのほとんどを必要としなくなり、全体的にオーバーヘッドが少なくなります。
imsimta test -mapping コマンドを使ってマッピングテーブルをテストすることができます。mappings ファイルの構文および test -mapping コマンドの詳細は、「マッピングファイル」および『Sun Java System Messaging Server 6 2005Q4 Administration Reference』を参照してください。
mappings ファイルの変更後は、MTA を再起動するか、imsimta reload コマンドを実行してください。
オプションファイル option.dat は、グローバル MTA オプションを指定します。これは、チャネル固有のオプションとは逆のオプションです。
オプションファイルを使って、MTA 全体に適用されるさまざまなパラメータのデフォルト値を無効にすることができます。特に、オプションファイルは、設定ファイルやエイリアスファイルが読み込まれるさまざまなテーブルのサイズを確立するのに使用されます。また、MTA が許可するメッセージのサイズを制御したり、MTA 設定で許可するチャネル数を指定したり、許可する書き換えルールの数を設定したりできます。
option.dat では、#、!、または ; で始まる行はコメント行として処理されます。先行する行の末尾に、続きがあることを示す \ がある場合でも同様です。配信オプションなど、これらの文字を含む長いオプションの場合には注意が必要です。
配信オプションの場合は、自然なレイアウトは # または ! で始まる継続行になりますが、確実で整然とした回避方法はあります。
オプションファイルの構文の詳細については、『Sun Java System Messaging Server 6 2005Q4 Administration Reference』を参照してください。
テイラーファイル imta_tailor は、さまざまな MTA コンポーネントの場所を設定します。MTA が正常に機能するには、imta_tailor ファイルが常に msg_svr_base/config ディレクトリ内になければなりません。
このファイルを編集して特定の設定にその変更を反映させることはできますが、その際には注意が必要です。このファイルを変更した場合は、必ず MTA を再起動してください。MTA が停止しているときに変更を行うのが望ましい方法です。
特に必要でないかぎり、このファイルを変更することは避けてください。
このファイルの詳細については、『Sun Java System Messaging Server 6 2005Q4 Administration Reference』を参照してください。
ジョブコントローラは、メッセージを配信するためのチャネルジョブを作成および管理します。これらのチャネルジョブは、ジョブコントローラ内の処理プール内で実行されます。プールは、チャネルジョブが実行される「場所」であると考えることができます。プールは、プール外のジョブとリソースを奪い合うことなく処理できる計算領域です。ジョブコントローラの概念とチャネルキーワードの設定については、「ジョブコントローラ」、「チャネル実行ジョブの処理プール」、および 「サービスジョブの制限」を参照してください。
ジョブコントローラファイル job_controller.cnf では、次のチャネル処理情報を指定します。
さまざまなプールを定義する
すべてのチャネルに対し、マスタープログラム名とスレーブプログラム名を指定する (該当する場合)
imta.cnf ファイルでは、pool キーワードを使ってプロセスプール (job_controller.cnf で定義) の名前を指定します。たとえば、次のサンプルファイル job_controller.cnf の要素は、プール MY_POOL を定義します。
[POOL=MY_POOL] job_limit = 12
次のサンプルファイル imta.cnf の要素は、チャネルブロック内でプール MY_POOL を指定します。
channel_x pool MY_POOL channel_x-daemon
デフォルトのプール設定に関連付けられたパラメータを変更したり、プールを追加する場合は、job_controller.cnf ファイルを編集し、ジョブコントローラをいったん終了してから再起動してください。
ジョブコントローラ設定ファイルの最初のプールは、プール名が指定されていないすべての要求に使用されます。MTA 設定ファイル (imta.cnf) で定義されている MTA チャネルは、後ろにプール名が続く pool チャネルキーワードを使って、特定のプールに処理要求を送ることができます。このプール名は、ジョブコントローラ設定のプール名と一致しなければなりません。ジョブコントローラが要求されたプール名を認識できない場合、その要求は無視されます。
最初の設定で、次のプールを定義します。DEFAULT、LOCAL_POOL、IMS_POOL、SMTP_POOL。
通常、特定のチャネルの処理を別のチャネルの処理と区別する場合は、ジョブコントローラ設定に付加的なプール定義を追加します。また、特性が異なるプールを使用することもできます。たとえば、チャネルが処理できる同時要求の数を制御する必要があるとします。これを行うには、ジョブ範囲を設定した新規プールを作成し、pool チャネルキーワードを使ってチャネルをより適切なプールに割り当てます。
プール定義のほかに、ジョブコントローラ設定ファイルには、各チャネルの要求を処理するのに必要な MTA チャネルとコマンドのテーブルが含まれています。要求には「マスター」と「スレーブ」の 2 種類があります。一般に、チャネルマスタープログラムは、そのチャネルの MTA メッセージキューにメッセージが保存されている場合に呼び出されます。マスタープログラムは、メッセージをキューから取り出します。
スレーブプログラムは、チャネルをポーリングし、そのチャネル内の受信メッセージを取り込むために呼び出されます。マスタープログラムはほぼすべての MTA チャネルにありますが、スレーブプログラムは MTA チャネルにはほとんどなく、必要とされません。たとえば、TCP/IP を介して SMTP を処理するチャネルではスレーブプログラムは使用されません。これは、すべての SMTP サーバーからの要求に応じて、ネットワークサービスである SMTP サーバーが着信 SMTP メッセージを受け取るためです。SMTP チャネルのマスタープログラムは、MTA の SMTP クライアントです。
チャネルに関連付けられた宛先システムが一度に複数のメッセージを処理できない場合は、ジョブ範囲が 1 である新しいタイプのプールを作成する必要があります。
[POOL=single_job] job_limit=1
一方、宛先システムで並行処理が可能な場合は、ジョブ範囲の値を増やすことができます。
例 10–1 に、ジョブコントローラ設定ファイルの例を示します。表 10–6 に、使用可能なオプションを示します。
! MTA ジョブコントローラ設定ファイル ! ! グローバルデフォルト tcp_port=27442 (1) secret=never mind slave_command=NULL (2) max_life_age=3600 (3) ! ! ! プールの定義 ! [POOL=DEFAULT] (4) job_limit=10 (5) ! [POOL=LOCAL_POOL] job_limit=10 ! [POOL=IMS_POOL] job_limit=1 ! [POOL=SMTP_POOL] job_limit=1 ! ! チャネルの定義 ! ! [CHANNEL=l] (6) master_command=msg_svr_base/lib/l_master ! [CHANNEL=ims-ms] master_command=msg_svr_base/lib/ims_master ! [CHANNEL=tcp_*] (7) anon_host=0 master_command=msg_svr_base/lib/tcp_smtp_client |
以下に、上の例の主な項目 (太字の丸括弧付きの数字がある部分) について説明します。
このグルーバルオプションは、ジョブコントローラが要求を待機する TCP ポート番号を定義します。
そのあとの [CHANNEL] セクションのデフォルト MAX_LIFE_AGE を設定します。
この [POOL] セクションは、DEFAULT という名前のプールを定義します。
この [CHANNEL] セクションは、l という名前のチャネル (UNIX ローカルチャネル) に適用されます。このセクションに必要な定義は、ジョブコントローラがこの チャネルを実行するために発行する master_command だけです。このチャネル名にはワイルドカードが含まれていないため、チャネル名は完全に一致しなければなりません。
この [CHANNEL] セクションは、tcp_* で始まるすべてのチャネル名に適用されます。このチャネル名にはワイルドカードが含まれているため、tcp_ で始まるすべてのチャネルに一致します。
ジョブコントローラは、メッセージを配信するためのチャネルジョブを作成および管理します。これらのチャネルジョブは、ジョブコントローラ内の処理プール内で実行されます。プールは、チャネルジョブが実行される「場所」であると考えることができます。プールは、プール外のジョブとリソースを奪い合うことなく処理できる計算領域です。ジョブ範囲は、job_controller にプールごとに設定されます。たとえば、SMTP_POOL の job_limit を 10 と定義すれば、このプールで実行できる tcp_smtp クライアントプロセスは常に 10 個だけです。
tcp_* チャネルを追加する必要があることもあります。たとえば、メール処理が非常に遅いサイト用の tcp チャネルなどです。このようなチャネルは別のプールで実行することをお勧めします。理由は、tcp_* チャネルを 10 個作成し、SMTP_POOL ですべてを実行する場合は、tcp_* チャネルごとに常に 1 つの tcp_smtp クライアントだけを実行することが可能であるからです (ただし、メールの宛先がすべて tcp_* チャネルであり、SMTP_POOL が 10 個の job_limit で定義されている場合)。システムに大きな負荷があり、どのキューにも複数の tcp_* チャネル宛の待機メッセージがある場合は、十分ではありません。スロットが競合しないように、新しい tcp_* チャネルに別のプールを定義することも考えられます。
たとえば、次の tcp_* チャネルを設定する場合を考えてみます。
tcp_yahoo smtp mx pool yahoo_pool keyword keyword keyword tcp-yahoo-daemon tcp_aol smtp mx keyword keyword keyword pool aol_pool tcp-aol-daemon tcp_hotmail smtp mx pool hotmail_pool keyword keyword keyword tcp-hotmail-daemon ... tcp_sun smtp mx pool sun_pool keyword keyword keyword tcp-sun-daemon |
新規チャネルごとに 10 個の tcp_smtp_client 処理を追加するには、job_controller.cnf ファイルに次のように追加します。
[POOL=yahoo_pool] job_limit=10 [POOL=aol_pool] job_limit=10 [POOL=hotmail_pool] job_limit=10 ... [POOL=sun_pool] job_limit=10 |
プールの詳細については、「チャネル実行ジョブの処理プール」を参照してください。『Sun Java System Messaging Server 6 2005Q4 Administration Reference』を参照してください。
表 10–6 ジョブコントローラ設定ファイルのオプション