README

README — milter manager: より効果的にmilterを使うためのmilter

名前

milter manager

サイト

<URL:http://milter-manager.sourceforge.net/>

ライセンス

以下の規則に従います。

  • ライセンスが明記してあるファイル: そのライセンス

  • コマンド: GPL3(license/gpl.txt)

  • ドキュメント: GFDL(license/fdl.txt)

  • Webインターフェイス: AGPL3(license/agpl.txt)

  • ライブラリ: LGPL3(license/lgpl.txt)

具体的には以下の通りです。

  • ライセンスが明記してあるファイル:

    • binding/ruby/lib/milter/compatible.rb: Ruby's

    • admin/vendor/plugins/restful-auth/: MIT

  • コマンド: GPL3

    • src/以下

    • tool/直下

  • ドキュメント: GFDL

    • README, README.ja

    • doc/以下

  • Webインターフェイス: AGPL3

    • admin/以下

  • ライブラリ: LGPL3

    • 上記以外

milter manager

milter managerはmilter効果的に利用するためのmilterです。

milter managerを導入することにより、MTAが行っていたmilter管理 をmilter managerが行うことになるため、以下のような利点があり ます。

  • milter管理コストを減らすことができる

  • milterを柔軟に組み合わせることができる

詳細は はじめに に書いてありま す。

依存ソフトウェア

  • milterをサポートしたMTA

    • Sendmail >= 8.13.8

    • Postfix >= 2.3.3 (ただし、Postfixがサポートしているmilterの機能のみ利 用可能)

  • GLib >= 2.12.3

  • Ruby >= 1.8.5

  • Ruby/GLib2 (Ruby-GNOME2) >= 0.16.0

  • UNIX系OS

    • Linux >= 2.6.18

    • FreeBSD

LinuxではUbuntu 8.04 TLS、CentOS 5.2上で動作することを想定し ています。そのため、各ディストリビューションに含まれているソ フトウェアに関しては、そのバージョンのソフトウェアで動作する ことを想定しています。

あるとよいソフトウェア

  • Cutter >= 1.0.6(未リリース): C言語用単体テストフレームワーク

    make checkおよびmake coverageを実行する場合は必要。

    Cutter

  • LCOV: カバレッジ結果整形ツール

    make coverageを実行する場合は必要。

    <URL:http://ltp.sourceforge.net/coverage/lcov.php>

  • RRDtool(付属のRubyバインディングもあるとなおよい)

    milter-manager-log-analyzerでmilter managerに登録された milterの動作のグラフを表示する場合は必要。

入手方法

tar.gz: <URL:http://sourceforge.net/project/showfiles.php?group_id=236233>

Subversion:

% svn co https://milter-manager.svn.sourceforge.net/svnroot/milter-manager/milter-manager/trunk milter-manager

インストール

インストール を見てください。

設定

設定 を見てください。

使い方

milter-managerコマンドはbin/以下ではなくsbin/以下にインストー ルされることに注意してください。非常に多くの場合、一般ユーザ はsbin/にパスが通っていないので、フルパスで起動します。

configure時に--prefixオプションを指定していない場合は /usr/local/sbin/以下にインストールされているので以下のように なります。

% /usr/local/sbin/milter-manager --help

インストールが成功していれば、使用できるオプションが表示され ます。オプションの詳細は以下の通りです。まずは、--show-configオ プションで設定内容を確認するとよいでしょう。

% /usr/local/sbin/milter-manager --show-config

指定できるオプションは設定ファイル中の値を上書きします。

オプション

--help

利用できるオプションを表示して終了します。

--connection-spec=SPEC

接続を待ち受けるソケットを指定します。SPECの書式は次のう ちのどれかです。

  • unix:パス

  • inet:ポート番号

  • inet:ポート番号@ホスト名

  • inet:ポート番号@[アドレス]

  • inet6:ポート番号

  • inet6:ポート番号@ホスト名

  • inet6:ポート番号@[アドレス]

例:

  • unix:/var/run/milter/milter-manager.sock

  • inet:10025

  • inet:10025@localhost

  • inet:10025@[127.0.0.1]

  • inet6:10025

  • inet6:10025@localhost

  • inet6:10025@[::1]

設定ファイル中の「manager.connection_spec」の値を上書きし ます。

--config-dir=directory

設定ファイルのあるディレクトリを指定します。 milter-managerは、まず、directory/milter-manager.confの 読み込みを試みます。もし、見つからなかった場合はシステム 標準の場所にあるmilter-manager.confを読み込みます。

--pid-file=file

milter-managerのプロセスidをfileに保存します。

設定ファイル中の「manager.pid_file」の値を上書きします。

--user-name=name

milter-managerをnameユーザの権限で実行します。 milter-managerはroot権限で起動しなければいけません。

設定ファイル中の「security.effective_user」の値を上書きします。

--group-name=name

milter-managerをnameグループの権限で実行します。 milter-managerはroot権限で起動しなければいけません。

設定ファイル中の「security.effective_group」の値を上書きします。

--daemon

端末を切り離し、バックグラウンドでデーモンプロセスとして動 作します。運用時はデーモンプロセスで動作させることをお勧 めします。

設定ファイル中の「manager.daemon」の値を上書きします。

--no-daemon

このオプションより前に指定した--daemonオプションを無効にし ます。

--show-config

設定内容を表示して終了します。設定内容はそのまま設定ファ イルに使える書式で表示されます。登録されているmilterを確 認する場合や、milter-managerの問題を報告する場合などで有 用です。

--verbose

実行時のログをより詳細に出力します。ログはsyslogのmailファ シリティで出力します。デーモンプロセスになっていない場合 は標準出力にもログが出力されます。

「milter_log_level=all」というように環境変数を設定している 場合と同じ効果があります。

--version

バージョンを表示して終了します。

ツール

milter managerにはいくつか便利なツールが付属されていて、bin/ 以下にインストールされます。

  • milter-test-server: mta側のmilterプロトコルの機能を提供 する。mta無しでmilterの動作をテストするために使用するこ とができる。

  • milter-test-client: mta側から渡ってきた情報を表示するだ けのmilter。mta側から渡っている情報を確認するために使用 することができる。

  • milter-performance-check: mtaの性能を計測するsmtpクライ アント。

  • milter-manager-log-analyzer: milter-managerのログを解析 し、milter-managerに登録されたmilterの動作をグラフ化する。

milter-test-server

milter-test-serverはmta側のmilterプロトコルを話します。つまり、 mta無しでmilterに接続することができます。現時点では、同様のツー ルは存在しないため、mta+milterではなくmilter単体のテストを行 うためには有用なツールです。例えば、以下のような用途に利用で きます。

  • milterの性能計測

  • milterの動作確認

milter-test-serverは実行時間を表示するので、簡単な性能計測に も利用できます。このとき、mtaとは関係なくmilter単体での実行時 間を確認できるため、mta経由で試す場合よりも問題点の発見が容易 になります。

milter-test-serverはヘッダや本文が変更された場合は、変更され た内容を表示します。そのため、ヘッダや本文を変更するmilterの テストも容易に行うことができます。cutterなどと組み合わせて自 動化された単体テストを作成することもできます。

オプション

--help

利用できるオプションを表示して終了します。

--connection-spec=spec

接続先のmilterのソケットを指定します。specの書式は次のう ちのどれかです。

  • unix:パス

  • inet:ポート番号

  • inet:ポート番号@ホスト名

  • inet:ポート番号@[アドレス]

  • inet6:ポート番号

  • inet6:ポート番号@ホスト名

  • inet6:ポート番号@[アドレス]

例:

  • unix:/var/run/milter/milter-manager.sock

  • inet:10025

  • inet:10025@localhost

  • inet:10025@[127.0.0.1]

  • inet6:10025

  • inet6:10025@localhost

  • inet6:10025@[::1]

--negotiate-version=version

クライアントへ送信するmilterプロトコルのバージョンとして versionを使用します。

デフォルトは8(sendmail 8.14のデフォルトと同じ)です。

--connect-host=host

接続元のホスト名としてhostを使用します。

このホスト名はmilterのxxfi_connect()コールバックに渡りま す。

--connect-address=spec

接続元のアドレスとしてspecを使用します。specの書式 は--connection-specの書式と同じです。

このアドレスはmilterのxxfi_connect()コールバックに渡りま す。

--helo-fqdn=fqdn

helo/ehlo時の引数としてfqdnを使用します。

このfqdnはmilterのxxfi_helo()コールバックに渡ります。

--from=from

mail from時の引数としてfromを使用します。

このアドレスはmilterのxxfi_envfrom()コールバックに渡ります。

--recipient=recipient

rcpt to時の引数としてrecipientを使用します。複数の宛先を 指定したい場合は--recipientオプションを複数回指定してく ださい。

このアドレスはmilterのxxfi_envrcpt()コールバックに渡りま す。xxfi_envrcpt()は1つの宛先につき1回呼ばれるので、宛先 が複数個ある場合はその分だけxxfi_envrcpt()が呼ばれます。

--header=name:value

名前がnameで値がvalueのヘッダを追加します。複数のヘッダ を追加したい場合は--headerオプションを複数回指定してくだ さい。

このヘッダはmilterのxxfi_header()コールバックに渡ります。 xxfi_header()は1つのヘッダにつき1回呼ばれるので、ヘッダ が複数個ある場合はその分だけxxfi_header()が呼ばれます。

--body=chunk

本文の一片としてchunkを追加します。複数のまとまりを追加 する場合は--bodyオプションを複数回指定してください。

この本文のまとまりはmilterのxxfi_body()コールバックに渡り ます。xxfi_body()は1つのまとまりにつき1回呼ばれるので、 まとまりが複数個ある場合はその分だけxxfi_body()が呼ばれま す。

--unknown=command

未知のsmtpコマンドとしてcommandを使います。

このコマンドはmilterのxxfi_unknown()コールバックに渡りま す。xxfi_unknown()コールバックは、xxfi_envrcpt()コールバッ クとxxfi_data()コールバックの間に呼ばれます。

--mail-file=path

メールの内容としてpathにあるメールを使います。メール中に from:やto:があった場合は、それらの値を送信元や宛先のアド レスとして使用します。

--output-message

milter適用後のメッセージを表示します。ヘッダを追加・削除 したり、本文を置換するmilterの動作を確認したい場合はこの オプションを指定してください。

--verbose

実行時のログをより詳細に出力します。

「milter_log_level=all」というように環境変数を設定している 場合と同じ効果があります。

--version

バージョンを表示して終了します。


milter-test-client

milter-test-clientはmta側から渡ってきた情報を表示するだけの milterです。マクロも含めてmta側から渡っている情報を表示する ので、mta側のmilterの設定を確認するために利用できます。

postfixのアーカイブの中にも同様のツールがあります。 src/milter/内にあるtest-milter.cがそれで、postfixのmilterの実 装のテストにも使っているようです。ただし、test-milterはマクロ までは表示してくれません。もし、マクロを利用しているmilterが 期待通りに動かない場合の問題調査を行うのであれば、 milter-test-clientが役立つでしょう。

オプション

--help

利用できるオプションを表示して終了します。

--connection-spec=spec

接続を待ち受けるソケットを指定します。specの書式は次のう ちのどれかです。

  • unix:パス

  • inet:ポート番号

  • inet:ポート番号@ホスト名

  • inet:ポート番号@[アドレス]

  • inet6:ポート番号

  • inet6:ポート番号@ホスト名

  • inet6:ポート番号@[アドレス]

例:

  • unix:/tmp/milter-test-client.sock

  • inet:10025

  • inet:10025@localhost

  • inet:10025@[127.0.0.1]

  • inet6:10025

  • inet6:10025@localhost

  • inet6:10025@[::1]

--verbose

実行時のログをより詳細に出力します。

「milter_log_level=all」というように環境変数を設定している 場合と同じ効果があります。

--version

バージョンを表示して終了します。


milter-performance-check

milter-performance-checkはmtaの性能を計測するsmtpクライアント です。milter-test-serverでmilterのみの性能を計測し、 milter-performance-checkでmtaとmilterを合わせた性能を計測する という住み分けです。

同様のツールにはpostfix付属のsmtp-sourceがあります。どちらも、 同時に複数のsmtpセッションを張って一斉にメールを送信すること ができます。機能的にはsmtp-sourceの方が高機能です。

milter-performance-checkが便利なのはsmtpセッションの時間のみ を計測してくれることです。smtp-sourceではtimeコマンドと組み合 わせるなどして、smtp-source全体の実行時間を計測します。

実際は、smtpセッションの時間のみでも、ツール全体の実行時間で もそれほど違いはでないと思います。また、テスト用のメール総数 を多くすればするほど、smtpセッションにかかる時間が大きくなり、 ツール自体の実行時間による影響は小さくなります。

milter-performance-checkが提供している機能で十分な時は、 milter-performance-checkを利用し、それでは不十分な時は smtp-sourceを利用するとよいでしょう。

オプション

--help

利用できるオプションを表示して終了します。

--smtp-server=server

接続先のsmtpサーバを指定します。

既定値はlocalhostです。

--smtp-port=port

接続先のsmtpサーバのポート番号指定します。

既定値は25です。

--helo-fqdn=fqdn

heloコマンドでfqdnを使います。

既定値はlocalhost.localdomainです。

--from=from

mailコマンドのアドレスにfromを使います。

既定値はfrom@example.comです。

--recipient=recipient

rcptコマンドのアドレスにrecipientを使います。複数の宛先を 指定する場合は複数回このオプションを指定してください。

既定値は[to@example.com]です。

--n-mails=n

合計でn個のメールを送信します。各メールは一斉に送信を開始します。

既定値は100です。


milter-manager-log-analyzer

milter-manager-log-analyzerはmilter-managerのログを解析し、 milter-managerや子milterの動作結果をグラフ化します。グラフは 時系列で表示されるので、状況の推移を確認することができます。 このため、新しい子milterを導入した前後での変化を確認する用途 にも使うことができます。

オプション

--help

利用できるオプションを表示して終了します。

--log=LOG_FILE

LOG_FILEからログを読み込みます。

既定値は標準入力から読み込みます。

--output-directory=DIRECTORY

DIRECTORYにグラフ、HTML、グラフ生成用のデータを保存します。

既定値はカレントディレクトリ(".")です。

--no-update-db

これまでに読み込んだデータが入っているデータベースを更新 しません。グラフを出力する場合のみに有用です。

このオプションを指定しない場合は更新します。

感謝

  • おばたさん: バグを報告してくれました。