clamav-milter でメールのウィルススキャン

2004-2-13 22:41
このエントリーをはてなブックマークに追加

clamav-milterとは

clamav-milter は Clam Antivirus (clamav) の一機能で、sendmail と連携してメールのウィルス検査を実施できます。ClamAV については「Clam Antivirus とは」を参照して下さい。今回は sendmail との連携に絞って話を進めます。

注:このページの記述は古いバージョンのものです。Clam Antivirus 0.71 が出ましたので、それにあわせてインストール方法を書き直しましたので、新しいページをご覧下さい。

Red Hat Linux 9 用のパッケージを作成

前回の記事「Red Hat Linux 9 に Clam Antivirus を導入」では、Red Hat Linux に、fedora プロジェクトで用意された RPM パッケージ(0.65-0)をインストールし、利用しました。しかし本稿執筆時点では、fedora のパッケージでは clamav-milter が提供されていません。これは、コンパイル時に、--enable-milter オプションが無効になっているからです。

そこで、fedora パッケージを元に clamav-milter 機能を有効にしてパッケージを再作成しました。手順としては

  • ソース RPM ファイルをダウンロード
  • ソース RPM のインストール
  • SPEC ファイルを編集して、clamav-milter を有効に
  • ビルドに必要なパッケージ(bzip2-devel 等)のインストール
  • ビルドエラーがでるので、パッチを作成、組み込み

という手順が必要でした。具体的な手順は省略しますが、成果物は公開していますので、こちらを利用して下さい。不安な方や、i686 以外の CPU を利用している方はソース RPM からリビルドして下さい。

なお、3月17日に、clamav 0.68 用の RPM を公開しましたので、こちらを御利用下さい。基本的にインストール手順は同じですので、以下適宜に読み替えてください。

インストール

今回インストールするパッケージは、fedora プロジェクトの成果物を利用していますので、Red Hat Linux にインストールするには、fedora-usermgmt, fedora-usermgmt-setup, fedora-usermgmt-shadow-utils の3つのパッケージを事前にインストールしておく必要があります。 また、これらのパッケージを検証するのに、fedora プロジェクトの公開鍵をインポートしておく必要があります。

  # wget http://www.fedora.us/FEDORA-GPG-KEY
  # rpm --import FEDORA-GPG-KEY
  # wget http://…/fedora-usermgmt-0.6-0.fdr.1.rh90.noarch.rpm
  # wget http://…/fedora-usermgmt-setup-0.6-0.fdr.1.rh90.noarch.rpm
  # wget http://…/fedora-usermgmt-shadow-utils-0.6-0.fdr.1.rh90.noarch.rpm
  # rpm -Kv fedora-usermgmt-*.rpm                       
  # rpm -ivh fedora-usermgmt-*.rpm

次に、clamav, clamav-lib, clamav-data, clamav-server, clamav-update, clamav-milter の各パッケージをダウンロードしてインストールします。通常、clamav-devel パッケージは不要です。

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

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

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

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

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

(sha1) dsa sha1 md5 gpg OKと表示されることを確認して下さい。
問題なければパッケージをインストールします。

  # 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 の設定が必要です。インストールしただけでは設定ファイルがありませんので、サンプルファイルをコピーして作成します。

  # cp /usr/share/doc/clamav-server-0.65/clamav.conf /etc/clamd.d/mail.conf
  # vi /etc/clamd.d/mail.conf

Example という行をコメントし、必要な部分のコメントを外します。また、<SERVICE> と書かれた箇所を任意の文字列(ここでは mailとします)に置き換えます。Userclamav に設定します。

  #Example
  LogFile /var/log/clamd.mail
  LogTime
  PidFile /var/run/clamd.mail.pid
  LocalSocket /var/run/clamav.mail/clamd.sock
  User clamav
  StreamSaveToDisk
  ScanMail

また、ファイルの記述に合わせて、LocalSocket ファイル用のディレクトリを作成しておきます。所有権は clamav にします。

  # mkdir /var/run/clamav.mail/
  # chown clamav:clamav /var/run/clamav.mail/

次に起動スクリプトファイルをコピーし、CLAMD_SERVICE=<SERVICE>の行を書き換えます。

  # cp /usr/share/doc/clamav-server-0.65/clamd.init /etc/init.d/clamd.mail
  # vi /etc/init.d/clamd.mail
  CLAMD_SERVICE=mail

また、clamd コマンドのシンボリックリンクとして clamd.mail を作ります。これがないとエラーになります。

  # ln -s /usr/sbin/clamd /usr/sbin/clamd.mail

これでサービス clamd.mail を起動します。

  # service clamd.mail start

clamd の状態を確認します。

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

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

clamav-milter の設定

今度は、/etc/clamav-milter.conf ファイルを設定します。先ほどと同じような手順となりますが、注意点としては LocalSocket を clamd の LocalSocket と同じに指定することです。

  #Example
  LogFile /var/log/clamd.mail
  LogTime
  PidFile /var/run/clamd.mail.pid
  LocalSocket /var/run/clamav.mail/clamd.sock
  StreamSaveToDisk
  User clamilt
  ScanMail

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

  # 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.mail/clamd.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.mail, clamav-milter の両デーモンを自動起動するように設定します。しかし名称が悪いのか、ntsysv コマンドでは clamd.mail が表示されませんので、chkconfig で設定します。

  # chkconfig --level 2345 clamd.mail on
  # chkconfig --level 2345 clamav-milter on

8 Comments

  1. まさに、これだ!という記事でした。とても役に立ちました。
    本当に感謝です。ところでclamav 0.70になってから、記事の内容が
    そぐわなくなっているように感じましたが、修正のご予定はありますか?

    コメント by sato — 2004-05-3 02:25

  2. 0.70に対応したものは作ろうと思っています。5日以降にとりかかると思いますのでしばらくお待ち下さい。

    コメント by fumika — 2004-05-3 11:37

  3. ありがとうございます。しばらくチェックしていたのですが、待ちきれず(すみません)再度インストールに挑戦しました。0.68からのアップグレード時には失敗したのですが、徹底的に削除してから再挑戦しましたら、あっさり動きました。特に調整するようなところはなく、すんなりいきました。sendmail.mcだけは書き換えが必要でした。何にしてもこのようなページがあったおかげで出来たと思います。これからも楽しみにしています。

    コメント by sato — 2004-05-17 17:17

  4. なかなかまとまった時間が取れなくて申し訳ありません。
    ご自身でできたようでよかったですね。

    確かに 0.6x からの RPM アップデートでは、うまく行かないと思います。0.70 からはデフォルトで動作するように RPM に手を加えています。インストール後はオプションの変更で /etc/sysconfig/clamav-milter をいじるのと、自動起動の設定くらいですかね。

    コメント by fumika2004-05-17 22:59

  5. はじめまして。
    僕もこのページを参考にさせていただきインストールしてみました。

    問題なく完了…と、思ったら

    #rpm -ivh clamav-0.71-1.rh90.src.rpm
    警告: user *** does not exist – using root

    上記のエラーがでてインストールに失敗したみたいです・・。
    0.70で試しても同じ症状でした。

    何か分かりましたら教えていただきたいのですが・・。
    宜しくお願いいたします。

    コメント by Yoh — 2004-05-29 00:33

  6. えーと、Red Hat Linux 9 で ClamAntivirus を利用したいのであれば、通常 src.rpm は必要ありません。
    src.rpm は 他のディストリビューションや、Athlon マシンなどの場合に構築し直すために使います。
    そのエラーはパッケージを作ったユーザが存在しないというエラーで、無視して構いません。

    通常は clamav, clamav-lib, clamav-data, clamav-update, clamav-server, clamav-milter の i686.rpm をダウンロードしてインストールします。

    OSやCPUは何でしょうか?

    コメント by fumika — 2004-05-29 00:42

  7. レスありがとうございます。。

    OSは Red Hat Linux 9 で、CPUが セレロンです。
    src.rpm以外は正常にインストールできたので、
    問題は無いみたいですね。。
    安心しました。。

    これからもお世話になりますです。

    コメント by Yoh — 2004-05-31 20:48

  8. Clam Antivirus 0.71 が出ましたので、それにあわせてインストール方法を書き直しました。ご利用下さい。

    https://futuremix.org/2004/06/clamav-milter071

    コメント by fumika — 2004-06-2 15:36

Sorry, the comment form is closed at this time.

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