Milter のセットアップ (オプション)

フィルターを置く場所を記述するためには、sendmail 構成ファイル (sendmail.cf) の中にそれらのフィルターへの参照を追加する必要があります。 sendmail 構成ファイル内のフィルター宣言は、次の形式で作成します。

X name field =value |*

フィルターは 1 文字のキーワード (外部の場合は X) で指定され、name はフィルターの名前 (内部でのみ使用される) です。 field=value のペア、つまり等式 は、フィルターの属性を定義します。

フィールドとその値は以下のとおりです。

ソケット
ソケットの指定は、以下のいずれかの形式にします。
S = inet: port @ host | [IP address]
S = inet6: port @ host | [IP address]
S = local: path
最初の 2 つは、あるホストまたは IP アドレスにある特定のポート上で listen する IPv4 (inet) および IPv6 (inet6) ソケットを記述しています。 最後の形式は、あるパスにあるファイル・システム上の名前付きソケットを記述しています。
フラグ
フィルター用の特殊フラグは、以下のとおりです。
F=R           Reject connection if filter unavailable
F=T             Temporary fail connection if filter unavailable
タイムアウト
フィルターに指示するときに sendmail で使用するデフォルトのタイムアウトをオーバーライドするには、T = timeout を使用します。ここで、timeout は次の 4 つのフィールドを含んでいます。
C        Timeout for connecting to a filter (if 0, use system timeout)
S        Timeout for sending information from the MTA to a filter
R        Timeout for reading reply from the filter
E        Overall timeout between sending end-of-message to filter and
         waiting for the final acknowledgment
それぞれのタイムアウト・フィールドの分離文字はセミコロン (;) です。 デフォルトのタイムアウト値は、構成ファイルの中で設定されていない場合、以下のとおりです。ここで、s は秒、m は分です。
T=C:5m;S:10s;R:10s;E:5m

コンマ (,) は、次のフィルター例で示しているように、等式の区切りになります。

Xfilter1, S=local:/var/run/f1.sock, F=R
Xfilter2, S=inet6:999@localhost, F=T, T=C:10m;S:1s;R:1s;E:5m
Xfilter3, S=inet:3333@localhost

フィルターが /var/spool/milter に保管されているとすると、以下のコマンドは上記の 3 つのメール・フィルターを開始します。 S= が -p に置き換えられており、フラグが除去されている点に注意してください。

/var/spool/milter/filter1 -p local:/var/run/f1.sock &
/var/spool/milter/filter2 -p inet6:999@localhost &
/var/spool/milter/filter3 -p inet:3333@localhost &
どのフィルターを起動するか、およびそれらのフィルターの順序付けは、次のように InputMailFilters オプションによって処理されます。ここで、fnamex はフィルターの名前です。
O InputMailFilters=fname1, fname2, fname3
InputMailFilters が定義されていない場合、フィルターは使用されません。 ただし、特殊な事例が 1 つあります。 sendmail は複数のデーモンを実行でき、さまざまなデーモンにさまざまなフィルターを割り当てることができます。以下に例を示します。
O DaemonPortOptions=Port=6666,Name=mmta,I=filter
.
.
.
Xfilter, S=inet:3333@localhost

複数のクライアントとデーモンを定義するには DaemonPortOptions を使用し、デーモンに特定のフィルターを割り当てるには I フィールドを使用します。 デーモンに特定のフィルターを割り当てた場合、そのデーモンはそのフィルターにのみ接続します。 前の例では、ポート 6666 を使用するデーモンは [Xfilter, S=inet:3333@localhost] で定義されたフィルターに接続します。 デーモンに特定のフィルターを割り当てなかった場合、そのデーモンは [InputMailFilters] によって定義されたフィルターに接続します。

Milter には、次の 2 つのサブオプションがあります。

LogLevel
入力メール・フィルター・アクションのログ・レベルで、デフォルトは LogLevel です。
Macros
フィルターへ伝送するマクロのリストを指定します。

macros オプションには、次のサブオプションがあります。これらは、特定のイベントが発生した後に milter へ伝送するマクロのリストを指定します。 デフォルトでは、マクロのリストは空です。

オプション
このイベントの後に伝送
Connect
セッションの接続の開始
Helo
HELO コマンド
Envfrom
MAIL FROM コマンド
Envrcpt
RCPT TO コマンド

例:

O Milter.LogLevel=12
O Milter.macros.connect=j, _, {daemon_name}

これらのフィルターは、以下のコマンドを使用して mc ファイルの中で簡単に構成できます。

MAIL_FILTER(`name', `equates')
INPUT_MAIL_FILTER(`name', `equates')

最初のコマンドの MAIL_FILTER() は、指定した名前と等式でフィルターを定義しています。以下に例を示します。

MAIL_FILTER(`archive', `S=local:/var/run/archivesock, F=R')

これは、次と同等の sendmail.cf エントリーを作成します。

Xarchive, S=local:/var/run/archivesock, F=R

INPUT_MAIL_FILTER() コマンドは、MAIL_FILTER と同じアクションを行いますが、同時に、m4 変数の `confINPUT_MAIL_FILTERS' にフィルターの名前を入れ、そのフィルターが sendmail によって実際に呼び出されるようにします。 以下に例を示します。

INPUT_MAIL_FILTER(`archive', `S=local:/var/run/archivesock, F=R')
INPUT_MAIL_FILTER(`spamcheck', `S=inet:2525@localhost, F=T')

上記の 2 つのコマンドは、次の 3 つのコマンドに相当します。

MAIL_FILTER(`archive', `S=local:/var/run/archivesock, F=R')
MAIL_FILTER(`spamcheck', `S=inet:2525@localhost, F=T')
define(`confINPUT_MAIL_FILTERS', `archive, spamcheck')

一般に、`confINPUT_MAIL_FILTERS' に使用したい数より多くのフィルターを定義する必要がある場合以外は、INPUT_MAIL_FILTER() を使用してください。 INPUT_MAIL_FILTER() コマンドの後に `confINPUT_MAIL_FILTERS' を設定すると、先行する INPUT_MAIL_FILTER() コマンドによって作成されたリストが消去されることに注意してください。

次の表は、M4 変数を示しています。

表 1. M4 変数
M4 変数 構成変数 説明
confINPUT_MAIL_FILTERS InputMailFilters 複数のフィルターをコンマで区切って並べたリスト。これは、着信する SMTP メッセージをどのフィルターに掛けるかと、起動の順序を決定します。 何も設定しなければ、フィルターはいっさい適用されません。
confMILTER_LOG_LEVEL Milter.LogLevel 入力メール・フィルター・アクションのログ・レベルで、デフォルトは LogLevel です。
confMILTER_MACROS_CONNECT Milter.macros.connect セッションの接続が開始されたときに milter へ伝送するマクロ。 デフォルトは、[j, _, {daemon_name}, {if_name}, {if_addr}] です。
confMILTER_MACROS_HELO Milter.macros.helo HELO コマンドの後に milter へ伝送するマクロ。 デフォルトは、[{tls_version}, {cipher}, {cipher_bits}, {cert_subject}, {cert_issuer}] です。
confMILTER_MACROS_ENVFROM Milter.macros.envfrom MAIL FROM コマンドの後に milter へ伝送するマクロ。 デフォルトは、[i, {auth_type}, {auth_authen}, {auth_ssf}, {auth_author}, {mail_mailer}, {mail_host}, {mail_addr}] です。
confMILTER_MACROS_ENVRCPT Milter.macros.envrcpt RCPT TO コマンドの後に milter へ伝送するマクロ。 デフォルトは、[{rcpt_mailer}, {rcpt_host}, {rcpt_addr}] です。

メール・フィルター・プログラムのコンパイルとリンクの方法については、「z/OS Communications Server: IP Programmer's Guide and Reference」を参照してください。