clamav-milter によるメールのウィルススキャン(Clam AntiVirus 0.71)
この記事は書かれてから時間が経っており、対象となっているシステムやソフトウェアのバージョンが古くなっています。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')dnldefine(`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')dnldefine(`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 を再起動しましょう。
clamav と clamilt
そのようなユーザは存在しません となりました。
FC1です。cpu:p-3
コメント by oyadama — 2004-06-7 00:46
そうですか。FC1は環境がないので試せませんが。
どのタイミングでそようなエラーになったのか分からないと調査のしようも無いですが。
コメント by fumika — 2004-06-7 09:12
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
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
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
clamavの設定では大変お世話になりました。
解説のわかりやすさで非常に助かりました。
ところでふみかさんはspamassassinをお使いではないでしょうか?
私は試験的に導入をしているのですが、他のサイトを参考にしながらインストールや設定などはできたのですが、実際の運用上の問題(学習など)でどうしてよいものかわからずにいて、ずっと試験運用のままです。
もしふみかさんがお使いでしたら、あのわかりやすい解説をしていただけたら、と思うのですが。
勝手なお願いで申し訳ありません。
もし可能でしたら、よろしくお願いいたします。
コメント by sato — 2004-06-29 11:24
んー、spamassassinは、いまは使っていません。Mozillaのベイジアンフィルターが利口なので、そちらに任せてます。
clamav に比べて spamassassin は資料が多いので後回しですねー。いつかやらなければと思っているのですが。
コメント by fumika — 2004-06-29 23:41
了解いたしました。
そのときを楽しみにしています。
コメント by sato — 2004-06-30 16:50
procmail / bsfilter / clamav の連携
(11月29日 更新しました) 私の、ウィルスとSPAM対策を紹介します。これで
トラックバック by ごんざぶログ — 2004-11-30 01:55
Spamassassinとclamavの同居ですが、Spamassassin は負荷が高いので
define(`confINPUT_MAIL_FILTERS’, `spamassassin,clamilter’)
より
define(`confINPUT_MAIL_FILTERS’, `clamilters,pamassassin’)
のほうが、先にclamavでチェックされ、落とされたものはSpamassassinが
起動されないので良いです。
コメント by おおもり — 2005-02-4 11:35
clamav0.87の導入時に、大変参考になりました。
有難うございました。
コメント by かつ — 2005-10-10 20:51