Red Hat Linux 9 に Clam Antivirus を導入
この記事は書かれてから時間が経っており、対象となっているシステムやソフトウェアのバージョンが古くなっています。2009年11月に書き直した記事「Clam AntiVirus (ClamAV) と sendmail の連携 CentOS 5 編」をご覧ください。
Clam Antivirus とは
Clam Antivirus (以下 clamav) はオープンソースのアンチウィルスソフトです。検出できるコンピュータ・ウィルスの数や機能などは商用ソフトに比べると劣ります。しかし、2月4日現在、20,000 種類以上のウィルスの検出が可能です。マイナーなウィルスは検出できなくても、Klez, Sobig, MyDoom など流行っているウィルスは検出できますので、何も対策をしていないのであれば利用価値はあります。また、オープンソースですので自分でウィルス定義ファイル(シグネチャ)を作成することもできます。
ここに書いたのは、Red Hat Linux 9 に Clam Antivirus を導入した結果です。この記事を元に一切の生じた損害・責任は負いませんのでご注意下さい。なお、不備があれば修正しますのでご指摘下さい。
インストール
Red Hat Linux 用の clamav は、fedora プロジェクトのパッケージを利用するのが簡単です。インストールには yum を使いますので、yum がインストールされていない方はあらかじめインストールしておいてください。apt-get も利用できると思います。yum で clamav パッケージをインストールするには、root で次のように入力するだけです。
# yum install clamav
この後、依存関係が調査され(時間がかかります)、必要なパッケージもインストールするか尋ねられます。
[install: clamav 0.65-0.fdr.4.rh90.i386] I will install/upgrade these to satisfy the dependencies: [deps: fedora-usermgmt 0.6-0.fdr.1.rh90.noarch] [deps: fedora-usermgmt-setup 0.6-0.fdr.1.rh90.noarch] [deps: fedora-usermgmt-shadow-utils 0.6-0.fdr.1.rh90.noarch] [deps: clamav-lib 0.65-0.fdr.4.rh90.i386] [deps: clamav-data 0.65-0.fdr.4.rh90.i386] Is this ok [y/N]:
ここで y と答えると、必要なパッケージがダウンロードされ、インストールされます。動作が終了したら、次のコマンドでインストールされたことを確認します。
# rpm -qa "clamav*" clamav-lib-0.65-0.fdr.4.rh90 clamav-0.65-0.fdr.4.rh90 clamav-data-0.65-0.fdr.4.rh90
また、ユーザ clamav が作成されていることを確認して下さい。
# id clamav uid=100(clamav) gid=101(clamav) 所属グループ=101(clamav)
同様の手順で clamav-update パッケージもインストールしておきます。
# yum install clamav-update
ウィルスデータベースの更新
さて、まずはウィルスデータベース(シグネチャ)を最新のものに更新する必要があります。これには freshclam コマンドを利用します。
# freshclam
これだけでウィルスデータベースが最新のものに更新されます。なお、自動更新の設定は、/etc/cron.d/clamav-update に置かれるファイルを編集し、コメントを外すだけで設定できます。cron で 1日2回実行されますが、もちろん自由に変更することができます。
ウィルス・スキャン
実際にファイルのウィルス検査(スキャン)を行なうには、clamscan コマンドを使います。
# clamscan ファイル名
ディレクトリを再帰検査する場合は、-r オプションを指定します。
# clamscan -r ディレクトリ名
.tar.gz または .tgz 形式の圧縮ファイルは次のように検査します。
# clamscan --tgz ファイル.tar.gz
clamd デーモンの利用
次に clamav をサーバ(デーモン)として利用する設定をします。デーモンとして常時起動しておくことで、スキャン時にシグネチャの読み込み時間を省くことができます。
まず、clamav-server パッケージをインストールします。
# yum install clamav-server
次に、設定ファイルを sample.conf という名前でコピーし、編集します。
# cp /usr/share/doc/clamav-server-0.65/clamav.conf /etc/clamd.d/sample.conf # vi /etc/clamd.d/sample.conf
Example という行をコメントし、必要な部分のコメントを外します。また、<SERVICE> と書かれた箇所を任意の文字列(ここでは sampleとします)に置き換えます。User は clamav に設定します。
#Example LogFile /var/log/clamd.sample LogTime PidFile /var/run/clamd.sample.pid LocalSocket /var/run/clamav.sample/clamd.sock User clamav StreamSaveToDisk ScanMail
また、ファイルの記述に合わせて、LocalSocket ファイル用のディレクトリを作成しておきます。所有権は clamav にします。
# mkdir /var/run/clamav.sample/ # chown clamav:clamav /var/run/clamav.sample/
次に起動スクリプトファイルをコピーし、CLAMD_SERVICE=<SERVICE>の行を書き換えます。
# cp /usr/share/doc/clamav-server-0.65/clamd.init /etc/init.d/clamd.sample # vi /etc/init.d/clamd.sample
CLAMD_SERVICE=sample
これで、clamd.sample の起動スクリプトを実行すればよさそうですが、次のようなエラーがでてしまいました。
# service clamd start clamd.sampleを起動中: execvp: そのようなファイルやディレクトリはありません [失敗]
execvp とは、ファイルを実行するための関数です。clamd.sample というファイルが見つからないというエラーです。これを回避するには、clamd コマンドのシンボリックリンクとして clamd.sample を作る必要があります。
# ln -s /usr/sbin/clamd /usr/sbin/clamd.sample
これでサービス clamd.sample を起動します。
# service clamd.sample start
clamd の状態を確認します。
# service clamd.sample status clamd (pid 8765) を実行中...
上記のように表示されれば起動に成功しています。「停止しています」と表示された場合は、設定ファイルやパーミッションの設定などが間違っている可能性がありますので、ログファイル /var/log/clamd.sample を参考にして修正してください。clamd デーモンにアクセスできることを確認するには、clamdscan コマンドを使います。
# clamdscan --config-file=/etc/clamd.d/sample.conf ファイル名
これで、clamscan と同じように検査ができます。しかし、次のようなエラーがでることもあります。
Can't access the file ERROR
これは、clamd を実行しているユーザ clamav が、検査対象のファイルやディレクトリへのアクセス権を持たないときに起こります。これを回避するためには、/etc/clamd.d/clamav.sample の User 行をコメントにします。clamd を再起動すれば、clamd の実行ユーザが root になり、すべてのファイルを検査対象にできます。しかし、すべてのユーザが clamdscan コマンドを通じて、すべてのファイルを検査できるようになってしまうため、環境や状況によってはセキュリティホールになり得ます。たとえば、アクセスできないディレクトリでも、ファイル名が推測できれば、ファイルが存在するかどうか分かってしまいます。セキュリティとプライバシー上の懸念から、clamd の実行ユーザは clamav にした方が良いと思われます。
clamdscan コマンドは、clamd デーモンに接続して検査を実施します。clamscan コマンドと違い、起動時に毎回データベースを読み込む必要がないため、検査にかかる時間が短くなります。しかし、clamdscan には、すでに述べたような制約がありますので、clamscan と適宜使い分けるのがよいでしょう。
sendmail と連携するには
clamav には clamav-milter という、sendmail と連携する機能があります。これを使うと sendmail で送受信するメールのウィルス検出が可能になります。しかし現時点で fedora-project からは、clamav-milter パッケージは提供されていません。clamav-milter を有効にするには、パッチを当ててパッケージを再構築する必要がありますが、長くなりますので別にまとめした。質問等はコメントに書き込んでください。
勉強しながらFedra Core3で自宅サーバー立ち上げ中です.おかげさまでClamavを無事インストールできました.
コメント by きひら — 2005-03-20 19:09
Klamav
SUSE9.3を入れてからWindowsを使う頻度がめっきり減った。日常使うソフトもだいたい揃って、通常使うにはほとんど不安はない。その中でちょっと気になるのが、コンピュータウィルスである。Windowsに比べて少ないという話ではあるが、やはりあるに越したことはない。
…
トラックバック by 合掌庵Blog — 2005-05-26 23:44
はじめまして、yutakaと申します。centOSに入れたくてyumでインストールしますとyum install clamavではver0.65がインストールされ
yum install clamav-serverではver0.85がインストールされてしまうのですが、バージョンが違うためか旨く動作しません。clamavだけなら手動で動作します。何かアドバイスがありましたらお願いします
コメント by yutaka — 2006-03-17 18:26
大変わかりやすい解説です。私の場合は書いてある方法とほとんど同じでFC5で何とか動きました。
コメント by 山下 — 2006-05-14 15:08
微妙に記述ミスがあるものの、その辺は直して作業したらすんなり動きました。(FC5)
が、自分の希望通りの働きをしてもらうにはもうちょい勉強しないといけないようです。
コメント by えむえむ — 2006-05-30 10:27