フィルターを置く場所を記述するためには、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
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 &
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 つのサブオプションがあります。
macros オプションには、次のサブオプションがあります。これらは、特定のイベントが発生した後に milter へ伝送するマクロのリストを指定します。 デフォルトでは、マクロのリストは空です。
例:
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 変数を示しています。
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」を参照してください。