オープンソースのLinux用メールウイルススキャナ

 Linuxはほとんどウイルスの影響を受けないのに、システム管理者がLinuxのメールサーバでアンチウイルスソフトウェアを使っているのはなぜだろうか。それは、メールサーバのウイルススキャナがMicrosoft Windowsユーザにとって別のレベルの防御策として役立つからだ。Linuxにはサーバベースのアンチウイルスアプリケーションがいくつか存在するが、そのほとんどは設定によってさまざまなメッセージングサーバと通信できるようになる。多くの人々は、開発が積極的に進められているオープンソースのウイルスツールキットClamAVをバックエンドで使用している。プロプライエタリまたは商用のスキャナを使用している人々もいるが、本稿ではsendmailメッセージングサーバ用のウイルススキャナであるMailScannerAnomy Sanitizerの比較を行う。

 メールサーバにアンチウイルススキャナをインストールする前に、ClamAVをインストールする必要がある。ゼロの状態からClamAVの環境を作って実行させるのに10分ほどかかる。大半のLinuxディストリビューションのclamd.confファイルは、すでにメールのスキャンを行うように設定されている。また、とても都合のよいことに、大半のディストリビューションでは、ウイルスシグネチャのアップデートのチェックを1日に数回行うようにClamAVが設定されている。ClamAVは、ウイルスに感染したメールが自分の管理するユーザから送信される事態を確実に避けたいシステム管理者のために、いくつかのSMTPスキャナも備えている。

MailScanner

 アンチウイルスツールキットClamAVの準備が終わったら、いよいよメッセージフィルタリングプログラムの設定が可能になる。MailScannerは非常にポピュラーな電子メールフィルタの1つであり、ウイルスとスパムの双方からユーザを守ってくれる。MailScannerは、他のプログラムへのフックによってその役割を果たしている。最近のバージョンでは、ユーザによる偽装URLのクリックを防ぐためのアンチフィッシングの対策も施されている。

 大部分のLinuxシステムでは、簡単にMailScannerをインストールできる。ほとんどのディストリビューションのリポジトリに登録されているので、わざわざPerlのプログラムを取得してソースからインストールを行う必要はない。

 インストールが終わったら、個人的なニーズに合わせてMailScannerをカスタマイズする必要がある。そのためには、詳細で十分な説明が記された/etc/MailScanner/MailScanner.confファイルを編集する。MailScannerの“Hostname”は、ウイルスが検出された場合にユーザへの通知メッセージに表示される文字列である。これを%org-name%変数で指定した組織内でMailScannerを実行しているホストの名前に書き換える。“Incoming Work Group”という変数は「clamav」に変更する。その結果、ClamAVのパーミッションを変更する必要がなくなる(これで各パーミッションがclamavユーザグループを使用するように設定されるため)。次に、“File Command”に「/usr/bin/file」が指定されていてコメントアウトされていないことを確認する。MailScannerは、ここで指定したfileコマンドを使ってどんな種類のファイルをブロックまたは通過させるかを判断する。たとえば、.exeファイルをブロックして.dmgファイルを通過させるといったことが、ニーズに合わせて行える。ウイルスが送られてきたことを送信者に通知する場合は、“Notify Senders Of Viruses”を「no」から「yes」に変更する (私としては「no」のままにしておくことをお勧めする。ほとんどの場合、送信者フィールドに記されている名前はスパムを送りつけてくる張本人とは別人だからだ)。その際には、通知メッセージの件名を変えることもできる。

 MailScannerでは、/etc/MailScanner/filetype.rules.confに記された拡張子やファイルタイプに基づいてファイルの許可または拒否のどちらかを行うように設定できる。また、ファイル名に基づいてファイルの許可または拒否を行うこともできる(添付ファイル名が常に同じであるようなウイルスやワームの阻止に使える)。構文については、かなり厳密な規則が存在する。フィールドとフィールドの間はタブ区切りでなければならないが、正規表現が使える。

 GUI版の設定ツールこそ見つからなかったが、MailScannerのWebサイトにはかなりの説明が書き加えられた設定ファイルとドキュメントがあるので、それらを参照すれば各自のニーズに合わせたスキャナの調整が十分に行えるだろう。

 MailScannerのWikiによると、2GBのメモリを積んだ3GHzのデュアルXeonサーバで1日あたり最大140万通のメール(大半の企業にとっては十分な処理量)を処理できるという。Wikiでは、このソフトウェアの実行方法のサンプル(特に、あまり高速でないハードウェア向けのもの)が数多く紹介されている。GUI設定ツールの欠如を別にすれば、MailScannerにはほとんど改良の余地がないといえる。

Anomy Sanitizer

 続いてAnomy Sanitizerについて説明しよう。サイズの小さなこのメールスキャナは、システムリソース(CPUやRAMなど)をあまり消費しない。入力をストリームとして処理するため、(うまく設定されていれば)ハードディスクドライブをまったく使わずに済むのだ。MailScannerも入力をストリームとして扱うが、負荷の重い状況でパフォーマンスを得るために高速なハードディスクドライブを必要とする。

 ソースを使ったAnomy Sanitizerのインストールは、非常にわかりやすい。ただ、UbuntuのSanitizerにはINITスクリプトが付属していないようで、同じくGentooやopenSUZEにも見当たらなかった。このようにINITスクリプトのないLinuxディストリビューションが結構あるので、そうしたディストリビューションを利用している多くのシステム管理者はスクリプトを自作する必要があるだろう。SanitizerのWebサイトにあるドキュメントでは、“sendmailとSanitizerとの中間レイヤ”としてメール処理ソフトウェアprocmailを使うことを推奨している。procmailを設定すれば、“融通の利かない”sendmailで直接Sanitizerを使うよりもずっと簡単かつ安全にSanitizerが使える。

 Sanitizerの設定ファイルに関する説明を見つけ出すのは容易ではなかった。また、実用的なフィルタの設定方法をほんの数件のサンプルから理解するのにかなりの時間がかかった。

 Sanitizerにメールのスキャンを行わせるには、まずSanitizer自体の設定を行う。最低限の設定内容は、SanitizerのWebサイトで参照できる。その設定が終わったら、設定ファイルのパスをコマンドライン引数で指定してSanitizerを実行する。たとえば、設定ファイルが/etc/sanitizer.confであれば、「sanitizer /etc/sanitizer.conf」とすればよい。

 ハードディスクドライブの速度によってパフォーマンスが制限されるMailScannerとは違い、SanitizerはCPUの処理速度が上がるほどパフォーマンスも上がる。ただし、Sanitizerの動作には1つ欠点がある。Perlを起動してパーサをコンパイルするオーバーヘッドにより、サイズのごく小さな(2KB程度)メッセージではサーバの処理が低下する。また、サイズの大きなメッセージでは、Sanitizerがprocmailから呼び出される際に大量のメモリが消費される。SanitizerのWebサイトには、Sanitizerをデーモン化すればこうしたPerlの起動やコンパイルの時間を完全になくせるだろう、と記されている。500MHzのPentium IIIサーバでは、1メッセージの処理に約0.10秒かかるので1日あたり864,000通ほどのメールを処理できることになる。

まとめ

 メールサーバ上で動作させるのは、MailScannerのほうがSanitizerよりもずっと容易である。設定ファイルのほとんどはインストール後すぐに使えるようにあらかじめ設定された状態になっていて、manページにも設定ファイル自体のコメントにも設定方法の詳しい説明がある。一方のSanitizerは、旧式で処理速度が遅く、高速なハードディスクドライブを持たないシステムで優れたパフォーマンスを発揮する。

 Qmail-scannerやInflexなど、メールフィルタとメールスキャナは数多く存在するが、最もシンプルな部類に入るのがMailScanner、最もサイズの小さな部類に入るのがSanitizerだ。また、最新の高速サーバでMailScannerとClamAVを組み合わせることで、システム管理者はメールを介したウイルスからWindowsユーザを保護することができる。

Linux.com 原文