clamav-milter によるメールのウィルススキャン(Clam AntiVirus 0.71)

2004-6-2 11:25
このエントリーをはてなブックマークに追加

この記事は書かれてから時間が経っており、対象となっているシステムやソフトウェアのバージョンが古くなっています。2009年11月に書き直した記事「Clam AntiVirus (ClamAV) と sendmail の連携 CentOS 5 編」をご覧ください。


clamav-milter は Clam Antivirus (clamav) の一機能で、sendmail と連携し、メールのウィルス検査を実施できます。Red Hat Linux 9 に clamav 0.71 をインストールし、sendmail と連携させる手順を書いておきます。

clamav 0.71 の RPM は公式には存在していませんが、拙作のパッケージを公開しています。今回はこのパッケージをインストールする方法を説明していますが、将来 Fedora Project からリリースされた場合もほぼ同様の手順で動作すると思います。

Fedora 関連のパッケージをインストール

Clam AntiVirus のインストールには、Fedora Project の インストールには、fedora-usermgmt, fedora-usermgmt-setup, fedora-usermgmt-shadow-utils の各パッケージが必要になります。まずこれらをインストールします。始めに Fedora のパッケージ署名を検証するための公開鍵をインポートしておきます。

  # wget http://www.fedora.us/FEDORA-GPG-KEY
  # rpm --import FEDORA-GPG-KEY

次に、fedora-usermgmt の各パッケージをダウンロード、インストールします。

  # wget http://download.fedora.us/fedora/redhat/9/i386/RPMS.stable/fedora-usermgmt-0.7-0.fdr.2.rh90.noarch.rpm
  # wget http://download.fedora.us/fedora/redhat/9/i386/RPMS.stable/fedora-usermgmt-setup-0.7-0.fdr.2.rh90.noarch.rpm
  # wget http://download.fedora.us/fedora/redhat/9/i386/RPMS.stable/fedora-usermgmt-shadow-utils-0.7-0.fdr.2.rh90.noarch.rpm
  # rpm -K fedora-usermgmt-*
  # rpm -Uvh fedora-usermgmt-*

clamav の RPM をインストール

次clamav, clamav-lib, clamav-data, clamav-server, clamav-update, clamav-milter の各パッケージをダウンロードしてインストールします。

まずダウンロードした RPM の署名を確認するために、今度は fumika の GPG 公開鍵をダウンロード・インポートして下さい。

  # wget http://rpm.fumika.jp/packages/FUMIKA-GPG-KEY
  # rpm --import FUMIKA-GPG-KEY

次に各パッケージをダウンロードします。 通常、clamav-devel パッケージは不要です。

  # wget http://rpm.fumika.jp/packages/clamav-0.71-1.rh90.i686.rpm
  # wget http://rpm.fumika.jp/packages/clamav-data-0.71-1.rh90.i686.rpm
  # wget http://rpm.fumika.jp/packages/clamav-lib-0.71-1.rh90.i686.rpm
  # wget http://rpm.fumika.jp/packages/clamav-milter-0.71-1.rh90.i686.rpm
  # wget http://rpm.fumika.jp/packages/clamav-server-0.71-1.rh90.i686.rpm
  # wget http://rpm.fumika.jp/packages/clamav-update-0.71-1.rh90.i686.rpm

ダウンロードした RPM ファイルをチェックします。

  # rpm -K clamav-*
  clamav-0.71-1.rh90.i686.rpm: (sha1) dsa sha1 md5 gpg OK
  clamav-data-0.71-1.rh90.i686.rpm: (sha1) dsa sha1 md5 gpg OK
  clamav-lib-0.71-1.rh90.i686.rpm: (sha1) dsa sha1 md5 gpg OK
  clamav-milter-0.71-1.rh90.i686.rpm: (sha1) dsa sha1 md5 gpg OK
  clamav-server-0.71-1.rh90.i686.rpm: (sha1) dsa sha1 md5 gpg OK
  clamav-update-0.71-1.rh90.i686.rpm: (sha1) dsa sha1 md5 gpg OK

(sha1) dsa sha1 md5 gpg OKと表示されることを確認して下さい。問題なければパッケージをインストールします。古いバージョンがインストールされている場合はデーモンを停止して、パッケージをアンインストールしてください。

  デーモンの停止
  # service sendmail stop
  # service clamav-milter stop
  # service clamd stop
  旧バージョンのアンインストール
  # rpm -e clamav-*
  インストール
  # rpm -ivh clamav-*

ユーザ clamav と clamilt が作成されたことを確認して下さい。

  # id clamav
  uid=100(clamav) gid=101(clamav) 所属グループ=101(clamav)
  # id clamilt
  uid=101(clamilt) gid=102(clamilt) 所属グループ=102(clamilt)

ウィルスデータベースの更新

次にウィルスデータベース(シグネチャ)を最新のものに更新します。これには freshclam コマンドを利用します。

  # freshclam

これだけでウィルスデータベースが最新のものに更新されます。なお、自動更新の設定は、/etc/cron.d/clamav-update に置かれるファイルに設定されています。コメントを外すだけで設定できます。--quiet オプションをつけると、エラー時以外はログを出力しなくなります。
cron で、1日2回実行されますが、自由に変更することができます。

clamd の設定

clamav-milter は clamd というデーモンを利用しますので、まず clamd の設定が必要です。RPM にあらかじめ設定ファイルが入っていますので、通常は何も設定する必要はありません。設定ファイルは /etc/clamav.conf です。

確認のために clamd を起動します。

  # service clamd start

clamd の状態を確認します。

  # service clamd status
  clamd (pid 13435) を実行中...

上記のように表示されれば起動に成功しています。「停止しています」と表示された場合は、設定ファイルやパーミッションの設定などが間違っている可能性がありますので、ログファイル /var/log/clamd を参考にして修正してください。clamd デーモンにアクセスできることを確認するには、clamdscan コマンドを使います。

clamav-milter の設定

clamav-milter の設定ファイルは /etc/sysconfig/clamav-milter です。ここでオプションを設定することができます。

インストール直後の状態では、ユーザ clamilt は、メールキューにアクセスするための権限がありません。
このままでは、clamav-milter デーモンがメールの検査ができずエラーとなってしまいます。
そこで、clamilt ユーザを mail グループに追加します。
(いずれ RPM インストール時に設定されるようにしたいと思います。)

  # usermod  -G mail clamilt

この状態で clamav-milter を起動します。

  # service clamav-milter start

sendmail の設定

sendmail の設定ファイル /etc/mail/sendmail.mc に次の記述を追加します。

  INPUT_MAIL_FILTER(`clamilter', `S=local:/var/run/clamav-milter/milter.sock, F=, T=S:4m;R:4m')dnl
  define(`confINPUT_MAIL_FILTERS', `clamilter')

確認していませんが、spamassassin-milter など、他のフィルタを併用している場合は、次のようになると思います。

  INPUT_MAIL_FILTER(`clamilter', `S=local:/var/run/clamav-milter/milter.sock, F=, T=S:4m;R:4m')dnl
  INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass.sock, F=, T=C:15m;S:4m;R:4m;E:10m')dnl
  define(`confINPUT_MAIL_FILTERS', `spamassassin,clamilter')

sendmail の設定を反映し、sendmail を再起動します。

  # make -C /etc/mail
  # service sendmail restart

この状態で、通常と同様にメールの送受信ができることを確認しておいてください。実際にウィルスが検出されると、ログファイルに次のように表示されます。

  Sat Feb  7 18:43:50 2004 -> stream: Worm.SCO.A FOUND

maillog ファイルには、次のように記録されます。

  sendmail[15310]: Milter: data, reject=550 5.7.1 Virus detected by ClamAV

初期状態では、宛先のアドレスに、ウィルスメールを遮断したというメールが送信されますが、これを送らないようにすることもできます。clamav-milter のオプション指定に書きましたのでご覧下さい。

自動起動の設定

最後に clamd, clamav-milter の両デーモンを自動起動するように設定します。どういうわけか ntsysv コマンドで clamd が表示されませんので、chkconfig で設定します。

  # chkconfig --level 235 clamd on
  # chkconfig --level 235 clamav-milter on

これで sendmail と連携してウィルスチェックできるようになりました。お疲れ様でした。

監視スクリプトの作成

最後におまけですが、とある環境では、clamav-milter がいつのまにか異常終了していて、
ウィルスメールがすり抜けて来るという事態が、いままでに 2回ほどありました。
原因は分かりませんが、メモリ不足などの可能性もありますし、clamav の不具合かも知れません。

これでは困りますので、とりあえずプロセスを一時間おきに監視するようにしてみました。

  # crontab -e
  SHELL=/bin/bash
  PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
  
  0 * * * * test -z "`service clamav-milter status | grep pid`" \
            && echo 'clamav-milter daemon is stopped.' | mail root

これで異常終了を検知したときにメールが届きます。(sendmail が生きていればですが。)
もし異常終了してたら、/var/run/clamav-milter/milter.sock を削除して、clamav-milter と sendmail を再起動しましょう。

11 Comments

  1. clamav と clamilt
    そのようなユーザは存在しません となりました。

    FC1です。cpu:p-3

    コメント by oyadama — 2004-06-7 00:46

  2. そうですか。FC1は環境がないので試せませんが。
    どのタイミングでそようなエラーになったのか分からないと調査のしようも無いですが。

    コメント by fumika2004-06-7 09:12

  3. fedora project からようやく 0.71 のRPM(FC1用)が出ましたね。
    http://download.fedora.us/fedora/fedora/1/i386/RPMS.stable/
    こちらではどうでしょうか。

    ちなみにclamavは0.72がリリースされています。

    コメント by fumika — 2004-06-7 10:27

  4. fumikaさん、コメントありがとうございます。
    エラーのタイミングは、インストール後の下記のタイミングです。
    フォルダ内に、UIDの欠片もないです。
    ># id clamav
    >uid=100(clamav) gid=101(clamav) 所属グループ=101(clamav)
    ># id clamilt
    >uid=101(clamilt) gid=102(clamilt) 所属グループ=102(clamilt)

    >http://download.fedora.us/fedora/fedora/1/i386/RPMS.stable/
    >
    新バージョンでやってみますね。確認を取るまで2~3日待って下さい。

    コメント by oyadama — 2004-06-7 14:49

  5. fumikaさん こんばんは。

    0.72でもNGでした。
    fedora正式版(0.71)では問題なくインストールができました。

    迷惑でしょうが、以下、オペレーション例との趣旨でお許しを。
    [root@localhost root]# rpm -ivh clamav-*
    Preparing… ########################################### [100%]
    1:clamav-data ########################################### [ 14%]
    2:clamav-lib ########################################### [ 29%]
    3:clamav ########################################### [ 43%]
    4:clamav-devel ########################################### [ 57%]
    5:clamav-milter ########################################### [ 71%]
    6:clamav-server ########################################### [ 86%]
    7:clamav-update ########################################### [100%]
    [root@localhost root]# id clamav
    uid=100(clamav) gid=101(clamav) 所属グループ=101(clamav)
    [root@localhost root]# id clamilt
    uid=101(clamilt) gid=102(clamilt) 所属グループ=102(clamilt)
    [root@localhost root]#

    コメント by oyadama — 2004-06-8 19:05

  6. clamavの設定では大変お世話になりました。
    解説のわかりやすさで非常に助かりました。
    ところでふみかさんはspamassassinをお使いではないでしょうか?
    私は試験的に導入をしているのですが、他のサイトを参考にしながらインストールや設定などはできたのですが、実際の運用上の問題(学習など)でどうしてよいものかわからずにいて、ずっと試験運用のままです。
    もしふみかさんがお使いでしたら、あのわかりやすい解説をしていただけたら、と思うのですが。
    勝手なお願いで申し訳ありません。
    もし可能でしたら、よろしくお願いいたします。

    コメント by sato — 2004-06-29 11:24

  7. んー、spamassassinは、いまは使っていません。Mozillaのベイジアンフィルターが利口なので、そちらに任せてます。
    clamav に比べて spamassassin は資料が多いので後回しですねー。いつかやらなければと思っているのですが。

    コメント by fumika — 2004-06-29 23:41

  8. 了解いたしました。
    そのときを楽しみにしています。

    コメント by sato — 2004-06-30 16:50

  9. procmail / bsfilter / clamav の連携

    (11月29日 更新しました) 私の、ウィルスとSPAM対策を紹介します。これで

    トラックバック by ごんざぶログ2004-11-30 01:55

  10. Spamassassinとclamavの同居ですが、Spamassassin は負荷が高いので

    define(`confINPUT_MAIL_FILTERS’, `spamassassin,clamilter’)
    より
    define(`confINPUT_MAIL_FILTERS’, `clamilters,pamassassin’)
    のほうが、先にclamavでチェックされ、落とされたものはSpamassassinが
    起動されないので良いです。

    コメント by おおもり — 2005-02-4 11:35

  11. clamav0.87の導入時に、大変参考になりました。
    有難うございました。

    コメント by かつ2005-10-10 20:51

Sorry, the comment form is closed at this time.

34 queries. HTML convert time: 0.070 sec. Powered by WordPress. Valid XHTML
Copyright © 2003-2017 @ futuremix.org ログイン