Sun Java System Messaging Server 6.3 管理ガイド

14.8 Milter の使用

この節には、次の項があります。「14.8 Milter の使用」

14.8.1 Milter の概要

Milter は、Sendmail Content Management API の短縮名です。この API を使用して作成されたソフトウェアを指す場合もあります。Milter はサードパーティー製ソフトウェアに対するプラグインインタフェースを提供します。このインタフェースは、MTA を通過するメッセージを検証、修正、ブロックするためのものです。Milter はメッセージの接続 (IP) 情報、エンベローププロトコル要素、メッセージヘッダー、メッセージ本体のすべての内容を処理したり、メッセージの受信者、ヘッダー、本文を変更したりすることができます。フィルタの用途としては、スパム拒否、ウイルスフィルタリング、コンテンツ制御などが考えられます。一般に、Milter はスケーラブルな方法で、フィルタリングに関連するサイト全体の問題に対処します。もともと sendmail 用に設計され、sendmail 用に作成された Milter は Messaging Server でも使用できるようになりました。ただし、後述するように、若干の制限があります。Milter の詳細は、インターネットで入手してください。

14.8.2 Milter/Messaging Server の動作方式

Milters は、メッセージで実行されるアクションを制御します。Messaging Server は、「14.2.2 フィルタ処理を行うメッセージを指定する」で説明している方式を使用して、Milter によるアクションの対象となるメッセージを制御します。

sendmail の Milter は、sendmail 自体のサポートコードと、独立した libmilter ライブラリとで構成されます。フィルタの作成者は、各自のフィルタを libmilter にリンクしてサーバーを生成します。次に、これらの Milter サーバーに接続するように sendmail が構成されます。

Messaging Server には、Milter インタフェースの sendmail 側をエミュレートするライブラリが用意されています。これを使用すると、sendmail 用に作成された Milter を Messaging Server で使用できます。

注意すべき点を次に順番に説明します。Milter プロトコルには、テキスト要素とバイナリ要素が複雑に混在していますが、詳細なドキュメントはありません。また、Milter のセマンティクスは、sendmail がメッセージを処理する方法と密に関連しています。特に Milter では、sendmail 構成で定義されているマクロのサブセットにアクセス可能なだけでなく、実際にアクセスするのが一般的です。Messaging Server の Milter クライアントライブラリは、一連の適切な sendmail マクロを提供しようとします。ただし、現時点で実装されていない sendmail 構成の固有な一面に依存した Milter を作成することも十分可能です。最終的には、ネットワークから切断された任意の Milter がこのクライアントライブラリで動作するかどうかはわかりません。Sun では問題が明らかになれば解決を試みますが、出回っているすべての Milter で正常に機能することは保証できません。

14.8.3 Milter の要件と使用法の考慮

Milter サーバーの実行は、専用の独立したシステム上であっても Messaging Server と同一システム上であってもよく、また単一システム配備、2 層配備、または MTA と同一システム上でもかまいません。MTA とメッセージストアの間で LMTP が使用される場合は、MTA からフィルタリングを呼び出す必要があります。メッセージストアから呼び出すことはできません。MTA とメッセージストア間で SMTP が使われている場合は、いずれか一方から呼び出すことができ、いずれかのシステムか 3 つ目の別のシステムで実行できます。

Messaging Server では、複数の Milter サーバーへの接続をサポートしています。複数の IP アドレスに変換されるドメイン名を指定する場合、いずれかの IP アドレスが動作するまで、DNS からの受信順にすべての IP アドレスが試行されます。一部の DNS サーバーでは、アドレスを返す順序をランダムにする機能をサポートしているため、基本的な負荷分散/フェイルオーバーの機能が提供されます。

14.8.3.1 サポートされる Milter メッセージ変更アクション

現在 Milter インタフェースでサポートされている機能は、ヘッダーの追加 (SMFIF_ADDHDRS)、ヘッダーの変更または削除 (SMFIF_CHGHDRS)、メッセージの検疫 (SMFIF_QUARANTINE) です。メッセージ本文の変更 (SMFIF_CHGBODY)、受信者の追加 (SMFIF_ADDRCPT)、受信者の削除 (SMFIF_DELRCPT) は、現在サポートされていません。

14.8.3.2 Milter インタフェースで提供されるマクロ

現在、次のマクロが Milter インタフェースで定義されています。

$j Received: ヘッダーフィールドの by 節で置換されるテキスト。Messaging Server では、RECEIVED_DOMAIN MTA オプションで制御されます。このオプションが設定されていない場合は、local チャネルの正規ホストが使用されます。

${client_addr} SMTP クライアントの IP アドレス。ドットで区切られた 4 つ組の値で表記されます。TCP 上の SMTP が使用されている場合のみ設定します。

$i 現在のメッセージのキュー ID。Messaging Server は、各セッションに対して固有の ID を生成します。この ID は、$i マクロで表示されます。

${mail_addr} 現在のトランザクションの MAIL FROM アドレス。

${mail_host} 現在のトランザクションの MAIL FROM アドレスのホスト部分。

${rcpt_addr} 現在のトランザクションの RCPT TO アドレス。

${rcpt_host} 現在の RCPT TO アドレスのホスト部分。

ProcedureMilter を配備する

次に示す手順を実行して、Milter を配備します。

  1. 必要なアクションを実行する Milter を取得して構成します。

    情報の取得および構成については、該当する Milter のマニュアルを参照してください。

  2. Milter クライアントライブラリをロードおよび構成します。「14.2.1 スパムのフィルタ処理ソフトウェアのクライアントライブラリをロードおよび構成する」を参照してください。

    1. クライアントライブラリ libmilter.so へのパスを指定します。Milter 構成ファイルのパスおよび名前を指定します。

      例:


      spamfilter1_library=/opt/SUNWmsgsr/lib/libmilter.so
      spamfilterX_config_file=/opt/SUNWmsgsr/lib/milter.opt
    2. Milter 構成ファイルを作成します。このとき、必要なオプションを使用します。

      Milter オプションファイルは、option=value という形式の行で構成されます。2 つの必須オプションは、HOST および PORT です。HOST は Milter サーバーを実行しているシステムの名前、PORT は Milter サーバーが待機するように構成されているポートにそれぞれ設定する必要があります。TCP/IP 接続だけがサポートされていることに注意してください。UNIX ドメインソケットは指定または使用することができません。

      このオプションファイルでは、ほかのオプションも利用できます。

      DEBUG (整数、デフォルトは 0) — Milter クライアントライブラリからのデバッグ出力を有効または無効にします。値を大きくすると、生成されるデバッグ出力が増加します。0 は出力を生成しません。1 は基本的なデバッグを行います。2 は TCP トラフィックのログ記録を追加します。一般に、Milter サーバーからのデバッグ出力は、サーバーの起動に使用したコマンド行での設定によって制御されます。ほとんどの Milter は、デバッグ出力を syslog に転送する機能を提供しているだけのように見えます。

      TIMEOUT (整数、デフォルトは 3600) — Milter 接続を呼び出す操作のタイムアウトを 100 分の 1 秒単位で指定します。6.3 以降のバージョンで利用できます。

      SOCKS_HOST (文字列、デフォルトは "") — 中間にある SOCKS サーバーの名前を指定します。このオプションが指定されている場合、指定された SOCKS サーバーを介して Milter 接続が確立され、直接には接続されません。

      SOCKS_PORT (整数、デフォルトは 1080) — 中間にある SOCKS サーバーが稼働しているポートを指定します。

      SOCKS_PASSWORD (文字列、デフォルトは "") — SOCKS サーバーを介した接続を確立するために使用するパスワードを指定します。ユーザー名およびパスワードが必要かどうかは、SOCKS サーバーの設定によって異なります。

      SOCKS_USERNAME (文字列、デフォルトは "") — SOCKS サーバーを介した接続を確立するために使用するユーザー名を指定します。

  3. Milter に送信するメッセージの内容を指定します。

    ユーザー、ドメイン、またはチャネルごとにメッセージをフィルタ処理できます。「14.2.2 フィルタ処理を行うメッセージを指定する」を参照してください。

  4. option.dat ファイルの spamfilterX_string_action オプションを指定します。

    spamfilterX_string_action=data:,$M

    この設定は無条件で使用されます。ただし、Milter が正しく動作するためには、MTA オプションファイル内にある必要があります。