« MovableTypeについて | メイン | Google Labs :Web Accelerator が公開 »

Pocketstudio.jp :: LOG :: ウイルス対策

2005年05月05日

ClamAV と clamassassin(要procmail)によるLinuxサーバでのウイルスメール除去

 先日の投稿にありますように、Norton Internet Security のダイアログ多発にはかなり悩まされました。ウイルスメールが届いても、POP3 受信時に一応ウイルス自体は削除されます。ですが、まれに本文中の一部に MIME デコードされたメールがあっても、POP3 受信時にはそのまま通過してしまいます。ですが、AntiVirus 側ではファイルに保存されたメールをスキャンし、ウイルスが発見したと通知をだします。はっきり言って邪魔でした。

 そこで、Linux サーバ側でウイルスメールを完全に除去できないかどうか、方法の検討を行いました。procmail を使う方法も検討しました。添付ファイルがある場合に自動除去させたり、特定の Subject: ヘッダのパターンから除去させる方法です。でも、これだと新しいウイルスやワームが出る度に対策が必要となるため、はっきり言って面倒そうでした。

 色々ネット上の検索をすすめていると、Linux 上の無償ウイルス対策ソフトの存在を知りました。一番はじめに試みたのが BitDefender Linux Edition です。ですが、私のサーバでは動かすことが出来ませんでした。

 BitDefender はバイナリで配布されています。実行するためには glibc 6.x が必要となりますが、私のサーバ(Vine 2.1.5) の glibc が 5.x です。これでは動きません。。。

 ほかにも検索をした結果、最終的に ClamAV というソフトの存在に気がつきました。バークレイ・ライセンスのため、無償で利用が可能です。Linux 上でウインドウズのファイルをスキャンできるのは非常に魅力的でした。samba サーバを動かしている場合、定期的にウイルススキャンを行うことも可能です。
 
 なんとかたどり着いたのは ClamAVclamassassin を組み合わせる方法です。procmail を使い、ウイルスメールが届く度に自動排除させる事ができるようになりました。

 以下は ClamAV と clamassassin のセットアップ方法です。なお情報リソース(情報源)は各ファイルのドキュメントを直接参照した一次情報を基にしています。

■ ClamAV のセットアップと初期設定(参考:ドキュメント

1.セットアップ前に専用のユーザとアカウントを作成しておきます。

# /usr/sbin/groupadd -g 205 clamav
# /usr/sbin/useradd -g clamav -u 205 -s /bin/false -c "Clam Antivirus" clamav

2.アーカイブを取得します。

# wget http://jaist.dl.sourceforge.net/sourceforge/clamav/clamav-0.84.tar.gz

3.ファイルを展開してから make します。

# tar xfz clamav-0.84.tar.gz
# ./configure
# make
# make install

4.ログファイルを作ります

# touch /var/log/freshclam.log
# chmod 600 /var/log/freshclam.log
# chown clamav /var/log/freshclam.log

 これで基本的なセットアップは終わりました(ドキュメントの 4.4 Setting up auto-updateing あたりです)。

 次にウイルス定義情報を最新のものに更新します。freshclam コマンドです。でも、なにも設定していない状態ではエラーを吐いてしまいます。

# /usr/local/bin/freshclam
ERROR: Please edit the example config file /usr/local/etc/freshclam.conf.
ERROR: Please edit the example config file /usr/local/etc/clamd.conf.
ERROR: Can't parse the config file /usr/local/etc/clamd.conf

 次の作業ではそれぞれの設定ファイルを編集します。

# vi /usr/local/etc/freshclam.conf
# vi /usr/local/etc/clamd.conf

 どちらのファイルも上の方に「Example」と書かれた箇所があります。不要なので、この行を削除するか「#Example」のようにコメントしておきます。

 これで freshclam コマンドを再実行するとデータベースが最新のものへと更新されます。

# /usr/local/bin/freshclam

ClamAV update process started at Wed May 4 17:47:45 2005
main.cvd is up to date (version: 31, sigs: 33079, f-level: 4, builder: tkojm)
Downloading daily.cvd [*]
daily.cvd updated (version: 866, sigs: 1070, f-level: 4, builder: arnaud)
Database updated (34149 signatures) from database.clamav.net (IP: 129.250.169.81)

 キタ━━━━(゚∀゚)━━━━ッ!!ですね。
 あとは、定期的にウイルス定義情報ファイルを更新するように freshclam をデーモンとして常駐させます。-d オプションを付けます。

# /usr/local/bin/freshclam -d

 なお、初期状態では 3600 秒(1時間)毎にウイルス定義情報ファイルを自動更新します。
 これで一応 ClamAV 側の設定は終わります。

 clamscan コマンドを使うと、ウイルスの検出が可能です。たとえばメールの保存がされている /var/spool/mail 以下をチェックさせると、次のようになりました。

# clamscan /var/spool/mail/
/var/spool/mail/AAA: OK ← OK の場合はウイルスに感染していません
/var/spool/mail/BBB: Empty file ← カラッポのファイル、という意味です
(略)
/var/spool/mail/XXX: Worm.SomeFool.P FOUND ← ワームが見つかりました
/var/spool/mail/ZZZ: Worm.SomeFool.Q FOUND ← これもワームが見つかったものです

----------- SCAN SUMMARY -----------
Known viruses: 34149 ← ウイルス定義情報ファイルにあるウイルス数です
Engine version: 0.84 ← ウイルス検索エンジン(ClamAV)のバージョンです
Scanned directories: 1 ← スキャン対象のディレクトリ数です
Scanned files: 24 ← スキャン対象のファイル数です
Infected files: 3 ← 影響のあった=感染しているファイル数です
Data scanned: 195.24 MB ← スキャンしたファイルの合計数です
Time: 811.975 sec (13 m 31 s) ← スキャンが完了するまでに経過した時間です

 実際に手動で clamscan を用いるときに使うオプションは --remove (削除)でしょう。このオプションがあれば、対象ファイルを「削除」します。

 ところが、この「削除」というのが厄介です。例えば mbox 形式でメールを保存している場合、/var/spool/mail/webmaster を対象として考えてみましょう。いくつメールが届いていても、その中に1つでもウイルスメールがあれば、スプールファイルがごっそり削除されてしまいます。

 これじゃ使い物になりませんね。。ClamAV に期待するのは、感染したメールだけを除去したいのですから。そこで登場するのが次の clamassassin です。


■ clamassassin のセットアップと設定

 ドキュメントの8章を読むと、ClamAV と連係して動作するソフトについての情報が整理されています。たとえば、Sendamil + libmilter を組み合わせる方法ですね。色々な方法があるようですが、自分としては慣れた procmail に記述を行うことで動作する clamassassin を選ぶことにしました。セットアップ方法は README に記述がありましたが、、シンプルです。

1.ファイルをダウンロードする

# wget http://drivel.com/clamassassin/clamassassin-1.2.2.tar.gz

2.ファイルを展開、セットアップする

# tar xvfz clamassassin-1.2.2.tar.gz
# cd clamassassin-1.2.2
# ./configure
# make
# make install

 以上で clamassassin nセットアップは完了です。初期状態では /usr/local/bin/clamassassin にファイルが作成されます。

 次に .procmailrc ファイルの編集です。サーバ内の全ユーザに適用させたい場合は /etc/procmailrc ファイルを編集します。

# ---------------------------------------------#
# clamassassin
:0fw
| /usr/local/bin/clamassassin

:0:
* ^X-Virus-Status: Yes
/tmp/virus.txt

# ---------------------------------------------#

 これだけで設定は終わりです。clamassassin を通すと、メールのヘッダ情報に「 X-Virus-Status: 」と「X-Virus-Checker-Version 」が追加されます。

 もしウイルスが検出( X-Virus-Status: Yes というヘッダ情報)された場合には /tmp/virus.txt にメール情報が書き出されるという仕組みです。特定のメールアドレスに転送させたい場合は「/tmp/virus.txt」を「! xxx@example.co.jp 」のように「! メールアドレス」と書き換えることで OK です。

 以上で、Linux サーバ側でウイルスメールを自動除去できるようになりました。
 問題等ありましたらご指摘下さい。。

投稿者 Masato Zembutsu : 2005年05月05日 22:21

トラックバック

このエントリーのトラックバックURL:
http://pocketstudio.jp/log/mt.cgi/mt-tb.cgi/10

コメント

コメントしてください




保存しますか?