clamav-milterは単体でも動く
注: 0.94までの話です。
ClamAVはわりとメモリを使うため、clamdやclamav-milterプロセスが50MBから100MBくらいのメモリを使うことは珍しくありません。しかし、ClamAVがメモリをたくさん使うからといって、clamdが100MB、clamav-milterが100MB、ClamAVだけで200MBもメモリを使うなんて…と思っていけません。
そのような使い方はもったいない使い方です。
よくある誤解
clamav-milterは2つの動作モードがあります。
1つめはclamdに接続し、ウィルスチェックはclamdが行うモードです。ウィルスチェックはclamdが行うので、clamav-milterは数MB程度のメモリで動作します。多くの場合、この動作を期待していると思います。
2つめはclamav-milterが自分でウィルスチェックを行うモードで、clamdが動作している必要はありません。明示的に--externalオプションを指定しない場合はこのモードです。つまり、デフォルトではclamav-milter単体で動作するモードということです。
多くの場合はclamdも必要だと思っているため、clamdもclamav-milterも起動してしまうと思います。しかし、そのときにclamav-milterに--externalを指定していないと、clamdもclamav-milterもウィルスチェックを行う準備をするため、両方のプロセスが100MB程度のメモリを使用することになってしまいます。
この場合は、clamdはまるで働かないので、単にメモリを消費しているだけになります。--externalオプションをつけないでclamav-milterを使う場合はclamdは起動しないようにして、無駄なメモリを使わないようにしましょう。
最近のclamav-milter
2009年3月にリリースされたClamAV 0.95からclamav-milterの実装が一新され、常にclamdに接続するようになっています。そのため、0.95以降が使われるようになれば、上記のようなもったいない使い方はなくなるでしょう。
0.95のclamav-milterは接続するclamdを複数指定することができます。この機能により、あるclamdが落ちていても自動で別のclamdに接続するため、障害に強いシステムを構築できます。
ただし、0.95のclamav-milterはまだいくつか問題が残っているようなので、次のリリースまでもう少し様子をみた方がよいかもしれません。(リポジトリ上では問題は修正されています。)
まとめ
0.95以降では、clamd + clamav-milterの構成になっています。 0.94までのclamav-milterを使っている時は、--externalオプションをつけることにより、この構成になります。将来的に0.95以降へのバージョンアップを考えているのなら、0.94までのclamav-milterを使用している場合でも、0.95以降の構成で運用するとよいのではないでしょうか。
RPMパッケージ作成
milter managerをUbuntuにインストールするのは簡単です。Ubuntu Japanese Teamの小林さんさんが、milter managerのパッケージを作成してくれているからです。(milter managerのUbuntuパッケージ)
今回、CentOSでも簡単にインストールできるように、RPMパッケージを作成しました。以下では、milter managerのRPMパッケージのインストール方法を説明します。
注意
- 今回作成したRPMパッケージは現時点でのスナップショットで作成しているため、バージョンは0.9.1になっています。
- まもなく最初の安定バージョン1.0.0がリリースされますが、0.9.1は1.0.0とほとんど同じ内容になるはずなので、0.9.1も安心して利用できるバージョンできます。
- CentOS標準のRPMパッケージ以外にも依存しているので、少し面倒かもしれません。
RPMforgeからruby-rrdtoolをインストール
milter managerはログをグラフ化する機能を含んでいて、グラフを生成するためにRRDtoolを利用しています。
RRDtoolとそのRubyバインディングのRPMパッケージはRPMforgeで配布されているのでそれを利用します。
余段ですが、多くのmilterはCentOS標準パッケージには含まれておらず、RPMforgeでは配布されています。CentOS上でmilter managerを使う場合はRPMforgeを利用してmilterをインストールすることになると思います。
それでは、まず、RPMforgeをyumのリポジトリに登録します。
32bit環境の場合は以下のようにRPMforgeを登録します。
% wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm % sudo rpm -Uhv rpmforge-release-0.3.6-1.el5.rf.i386.rpm
64bit環境の場合は以下のようにRPMforgeを登録します。
% wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm % sudo rpm -Uhv rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
RPMforgeを登録したらRRDtoolのRubyバインディングをインストールします。
% sudo yum install -y ruby-rrdtool
電脳RubyプロジェクトからRuby/GLib2をインストール
milter managerのベース部分はC言語で実装されており、C言語のユーティリティライブラリとしてGLibを利用しています。
milter managerの適用条件判断部分や設定関連部分など柔軟さが必要とされる部分はRubyで実装されており、ベース部分で使用しているGLibをRubyからも利用するためにRuby/GLib2を利用しています。
Ruby/GLib2は標準パッケージにもRPMforgeにもRPMが登録されていません。milter managerのRPMパッケージを作成するにあたっての一番の障壁がここでした。FedoraにはRuby/GLib2のパッケージがあるので、それをCentOSにバックポートすることはできますが、そこそこ大変です。
ありがたいことに、電脳RubyプロジェクトがRuby/GLib2のRPMパッケージを配布しているので、milter managerのRPMパッケージは電脳RubyプロジェクトのRuby/GLib2パッケージに依存する形で作成しました。
ということで、milter managerのパッケージをインストールする前に、電脳RubyプロジェクトのRuby/GLib2パッケージをインストールします。
32bit環境の場合:
% wget http://dennou-k.kugi.kyoto-u.ac.jp/arch/ruby/products/rpm/RPMS/CentOS/5/i386/ruby-glib2-0.16.0-1dc.i386.rpm % sudo rpm -Uvh ruby-glib2-0.16.0-1dc.i386.rpm
64bit環境の場合:
% wget http://dennou-k.kugi.kyoto-u.ac.jp/arch/ruby/products/rpm/RPMS/CentOS/5/x86_64/ruby-glib2-0.16.0-1dc.x86_64.rpm % sudo rpm -Uvh ruby-glib2-0.16.0-1dc.x86_64.rpm
milter managerのインストール
いよいよ、milter managerのインストールです。今回のパッケージはスナップショットから作成しているということもあり、正式なパッケージという扱いではないのでSorceForge上のダウンロードページには置かず、Webサイトの方に置いてあります。
32bit環境の場合:
% wget http://milter-manager.sourceforge.net/rpm/milter-manager-0.9.1-0.i386.rpm % sudo rpm -Uvh milter-manager-0.9.1-0.i386.rpm
64bit環境の場合:
% wget http://milter-manager.sourceforge.net/rpm/milter-manager-0.9.1-0.x86_64.rpm % sudo rpm -Uvh milter-manager-0.9.1-0.x86_64.rpm
インストール後の設定例はCentOSへのインストールマニュアルを参考にしてください。
まとめ
Ubuntuと同じようにCentOS上でも簡単にmilter managrをインストールできるようにRPMパッケージを作成しました。依存関係の問題でUbuntuほど簡単にはインストールできないのですが、自分でビルドする手間がなくなるだけでもだいぶ簡単になったと思います。
また、パッケージ化されていることにより、アップデートも簡単になります。パッケージでインストールしてあれば、まもなくリリースされる安定版1.0.0へのアップデートもrpm -Uvhだけですみます。
milter manager 1.0.0リリース
milter manager初の安定版1.0.0をリリースしました。
milter managerとは
迷惑メール対策ポリシーは組織によって異なります。milter managerはmilterと呼ばれるメールフィルタプラグインを柔軟にかつ簡単に利用する仕組みを提供することにより、それぞれの組織にマッチした迷惑メール対策システムを構築するフリーソフトウェアです。
milter managerは柔軟さと簡単さを実現するためにRubyインタプリタを内臓しています。これにより、実行時に動的に判断をすることができ、メール1通ずつそれぞれ対して適切な処理を適用できるようになります。また、起動時にシステムにインストールされているmilterを自動検出することもできるようになるため、インストールしただけの特別な設定をしていない状態でも適切な初期値が設定されます。このように、Rubyインタプリタを内蔵することにより、柔軟さと簡単さを提供し、効果的な迷惑メール対策システムを低コストで構築できるようになっています。
milter managerを用いた迷惑メール対策システムの概要については以下のドキュメントを参照してください。
1.0.0への歩み
milter managerは2008年9月より独立行政法人情報処理推進機構(IPA)平成20年度オープンソフトウェア利用促進事業「迷惑メール対策を柔軟に実現するためのmilterの開発」で開発がスタートし、2009年1月に初のベータ版0.7.0がリリースされました。それから1ヶ月毎に0.1ずつバージョンをあげながら改良を続け、3ヶ月後の今、初の安定版リリースにいたりました。
0.7.0リリース時に、milterと迷惑メール対策に関心が高いと思われるPostfixとSpamAssasinのメーリングリストでアナウンスしました。アナウンスは日本語のメーリングリストと英語のメーリングリストの両方で行ったのですが、どちらからも興味を持ってくれた方々からフィードバックをもらうことができました。日本で興味を持ってくれた方々からは、こんなことができればよさそう、というようなアイディアをもらうことが多く、海外で興味を持ってくれた方々からは、使ってみたよ、こうしたい時はどう使えばいいの?、というような質問をもらうことが多かったです。
フィードバックのいくつかは1.0.0に含まれています。1.0.0では安定して動くことを目標としていたため、大きめの変更は1.0.0では見送っています。1.0.0で見送られたフィードバックはこれからの開発で反映していきたいと思います。
インストール
前置きが長くなりましたが、インストール方法の紹介です。
UbuntuとCentOS用にmilter managerのパッケージが用意されているので、それらの環境ではこれらのパッケージを利用してください。
それ以外の環境ではソースコードをダウンロードしてビルドしてください。
FreeBSD向けのインストールドキュメントを用意しています。FreeBSD上でmilter managerを利用する場合はこのドキュメントを参考にしてください。
問い合わせ先
milter managerのリリースアナウンスやmilter manager利用者の情報交換の場としてメーリングリストがあります。インストールや設定でつまづいた、バグを見つけた、よいアイディアを思いついた、milter managerを拡張してみた、などといった場合はこのメーリングリストを利用してください。
商用利用などでサポートサービスが必要な場合のために、クリアコードのmilter managerサポートサービスがあります。有償で導入支援や技術支援などのサービスを提供しています。
1.0.0のUbuntu用パッケージ
小林さんがUbuntu用のmilter manager 1.0.0パッケージをアップデートしてくれました。(PPA for Jun Kobayashi)
すでにパッケージでmilter managerをインストールしている方はaptitude safe-upgradeで更新されます。新しくインストールする場合はUbuntu用のインストールドキュメントを参考にしてください。
Postfix 2.6.0-RC3がSMFIP_RCPT_REJをサポート
今日、Postfix 2.6.0-RC3がリリースされました。RC3ではmilterのSMFIP_RCPT_REJがサポートされたそうです。
SMFIP_RCPT_REJ
SFMIP_RCPT_REJオプションを指定すると、ユーザ不明などの理由でMTAが拒否した宛先の情報もmilterに渡ってくるようになります。この機能を使うことにより「3つ以上MTAが拒否した宛先があるメールを拒否する」といったことができるようになります。
拒否したアドレスかどうかは{rcpt_mailter}マクロの値が"error"かどうかで判断することができます。"error"の場合は{rcpt_host}の値がステータスコードになり、{rcpt_addr}の値が拒否した理由になります。
参考:
その他
他にも送信者アドレスを変更できるようになっているそうです。
Postfixのmilter対応が強化されてきて、多くの機能がmilterで実現できるようになっています。milterでメールフィルタ機能を実装するケースがさらに増えていくかもしれません。