ClamAVのインストール

対象サーバはCentOS 7とします。

1.EPELリポジトリを追加していなければ、追加します。

$yum install epel-release
  1. 必要なときのみ明示的に指定してEPELリポジトリを使用するよう、デフォルトでは無効化
$vi /etc/yum.repos.d/epel.repo


enabled=0   // 1から0に変更
  1. ClamAV本体(clamavパッケージ)と、ウイルス定義ファイルおよび定義更新機能(clamav-updateパッケージ)clamd(リアルタイムスキャンで使用)をインストール
$yum --enablerepo=epel install clamav clamav-update clamd

   CentOS 6ではパッケージ名が異なり、clamavとclamav-dbパッケージをインストール

$yum --enablerepo=epel install clamav clamav-db

4. 次に、ウイルス定義の更新を行う。ウイルス定義の更新コマンドは /usr/bin/freshclam で、その設定ファイルは、/etc/freshclam.conf ですので、このファイルを開いて確認、変更する。   Example 行がコメントアウトされていることを確認します。また、ウイルス定義配布サーバーの設定である DatabaseMirror 行で、日本のミラーサーバーを追加登録します。   日本のミラーサーバーからの取得に失敗することもあるので、デフォルトの database.clamav.net も残しておきます。

DatabaseMirror db.jp.clamav.net      // 日本のDBミラーサイトをデフォルトの前に追記

# database.clamav.net is a round-robin record which points to our most
# reliable mirrors. It's used as a fall back in case db.XY.clamav.net is
# not working. DO NOT TOUCH the following line unless you know what you
# are doing.
DatabaseMirror database.clamav.net   // これはそのまま残す

5. ウイルス定義の更新、ウイルス定義を最新バージョンに更新する。

$freshclam

ウイルス定義ファイルは、/var/lib/clamav に保存されている。

  1. スキャンのテスト

スキャンは、clamscanコマンドを使用する。主なオプションは次の通りである。

–infected オプション :ウイルス検知したファイルの情報のみ出力 –recursive オプション  :指定したディレクトリ配下を再帰的にスキャン –remove オプション   :これを指定しない限り、ウイルス検知したファイルの自動削除は行わない –max-filesizeオプション :スキャン対象のファイルサイズ上限値の設定 –max-scansizeオプション:ファイルの先頭からどれだけ走査するか

$clamscan --infected --recursive /var

コマンド実行結果からは、以下のようなことが分かる。

Known viruses: ウイルス定義数 Engine version: ClamAVのバージョン Scanned directories: スキャンしたディレクトリ数 Scanned files: スキャンしたファイル数 Infected files: ウイルス検知数 Data scanned: スキャンしたファイルサイズの合計 Data read: スキャン走査したデータサイズ(圧縮データの展開分含む?)の合計 Time: スキャン処理時間

これらのオプション設定は、man clamscanで確認できる。

次にリアルタイムスキャンの設定方法を示します。

  1. rpmforgeの有効化
$ wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-XX(version#).rpm
$ rpm -ivh rpmforge-release-*.rpm
$ yum -y update rpmforge-release
  1. clamd.confファイルの編集
User root     ←   (fanotifyを使うため、rootユーザでのアクセスが必要)
ScanOnAccess yes
OnAccessIncludePath /tmp     ←    (オンアクセススキャンを有効にするディレクトリ・ファイルを列挙)
OnAccessIncludePath /home/test1 ←    
….
  1. SELinuxポリシの変更

clamd(antivirus_tタイプ)が各フォルダ・ファイルにアクセス出来るように、ポリシを一部追加してあげる必要がある。

(1) “selinux-policy-devel”パッケージをインストール (2) 適当なディレクトリで下記のように”clamav.te”ファイルを作成

module clamav.pol 1.0;
require {
        type user_tmp_t;
        type antivirus_t;
        type var_run_t;
        type home_root_t;
        type user_home_dir_t;                                  <-- スキャンするディレクトリの typeを追加
        class sock_file { create unlink setattr };
        class dir read;
        class capability sys_admin;
        class file { read getattr open };
}
#============= antivirus_t ==============
#!!!! This avc can be allowed using the boolean 'antivirus_can_scan_system‘
allow antivirus_t self:capability sys_admin;
allow antivirus_t home_root_t:dir read;    <-- スキャンするディレクトリの typeを追加
allow antivirus_t home_root_t:file { read getattr open };        <-- スキャンするディレクトリの typeと、アクションを追加
allow antivirus_t user_home_dir_t:dir read;     <-- スキャンするディレクトリの typeを追加
allow antivirus_t user_home_dir_t:file { read getattr open };   <-- スキャンするディレクトリの typeと、アクションを追加
allow antivirus_t user_tmp_t:file open;
allow antivirus_t var_run_t:sock_file { create unlink setattr };
  1. 次のコマンドで、ポリシモジュールを作成し、ロードする
$ make -f /usr/share/selinux/devel/Makefile
$ semodule I clamav.pp
  1. clamdのサービスを起動
$/etc/init.d/clamd start                  
$ ps axZ|grep clamd
  1. ClamAV+fanotifyのテスト

(1). /home/test1以下に、テスト用の無害なウィルス(EICAR)をコピー

$ cat /tmp/eicar.txt
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
$ cp /tmp/eicar.txt /home/test1

(2). /var/log/messagesにEICARを見つけた旨のログが出力される

$ tail -2 /var/log/clamav/clamd.log
Sun Aug 10 23:19:32 2014 -> ScanOnAccess: Max file size limited to 5242880 bytes
Sun Aug 10 23:19:44 2014 -> ScanOnAccess: /home/test1/eicar.txt: Eicar-Test-Signature FOUND