server-memo.net

CentOS7へclamavインストール(epelリポジトリ使用)

   

CentOS7にepelリポジトリで提供されているClamAV(アンチウイルスソフト)をインストールする手順です。

前提条件

「epel」リポジトリにあるclamavをインストールするので、「epel」リポジトリを使用できるように設定しておいてください。

epelリポジトリの追加方法はこちらのページで説明しています。

ClamAVインストール

今回は「epel」リポジトリで提供されているClamAVのインストールを行い、clamd@scanをデーモンとして起動させ、それと連携するclamdscanを使用してウイルススキャンを行うという環境を構築していきます。

インストール

yumを使用してClamAVの各パッケージをインストールしていきます。

# yum install --enablerepo=epel clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd

※「RPMforge」にあるclamdとは異なり、「epel」のリポジトリのClamAVはその機能ごとに色々なパッケージに分かれていますので注意してください

パッケージ説明

各パッケージの説明を「yum info」コマンドで表示されたものを元に、ざっくりと翻訳してみました。

パッケージ名 内容
clamav ClamAVの各種ツール類
clamav-data ウイルスデータベース
clamav-devel ClamAVに必要なライブラリやヘッダーファイル
clamav-filesystem ClamAVに必要とされるユーザ作成スクリプトやファイルシステムの構造を提供
clamav-lib ClamAVに必要とされる動的共有ライブラリ
clamav-scanner 一般的なclamd用サービス
clamav-scanner-systemd systemd用clamav-scanner起動スクリプト
clamav-server clamdデーモンの実行に必要なファイル
clamav-server-systemd systemd用clamav-serverのテンプレート
clamav-update ウイルスデータベースを更新するためパッケージ
freshclamがインストールされる

clamd@scan設定

デーモンとして常時動作させるためclamd@scanの設定を行っていきます。

設定ファイルは「/etc/clamd.d/scan.conf」となりますので、このファイル編集し設定を行っていきます。

# cd /etc/clamd.d/
# cp -p scan.conf scan.conf_yyyymmdd
# vi scan.conf

設定項目

設定項目 変更前 変更後
Exampleのコメント化 Example #Example
ログファイル設定 #LogFile /var/log/clamd.scan LogFile /var/log/clamd.scan
ログファイルサイズ設定 #LogFileMaxSize 2M LogFileMaxSize 2M
ログに時間を表示 #LogTime yes LogTime yes
ログローテーション設定 #LogRotate yes LogRotate yes
ローカルソケット使用設定(1行での設定となります) #LocalSocket /var/run/clamd.scan/clamd.sock LocalSocket /var/run/clamd.scan/clamd.sock
異常終了時にソケットを削除 #FixStaleSocket yes FixStaleSocket yes
スキャン除外ディレクトリ設定 #ExcludePath ^/proc/
#ExcludePath ^/sys/
ExcludePath ^/proc/
ExcludePath ^/sys/
ExcludePath ^/dev/
実行ユーザ設定 User clamscan User root
設定項目説明
Exampleのコメント化
「Example」という設定があると「clamd@scan」は動作をやめてしまうので、「Example」部分の前に「#」をつけて、コメントにします。
ログファイル設定
ログを記録するファイルを設定しログを収集します。
ログファイルサイズ設定
ログファイルの最大サイズを設定します。

ログファイルに時間を設定
ログに時刻も含め記録する。
ログローテーション設定
ログをローテーションさせる設定。
ローカルソケット使用設定
ローカルソケットを使用し、ローカルからのみ接続できるようにします。

(画面のサイズ上2行に見えますが、1行での設定となります)

異常終了時にソケットを削除
異常終了した際にソケットを削除する設定。
スキャン除外ディレクトリ設定
ウイルススキャンを行わないディレクトリを指定します。
今回は「/dev」ディレクトリもウイルスチェックから外していますが、環境に合わせて設定を行ってください。
実行ユーザ設定
rootユーザで実行するように変更します。

clamd@scan起動

/etc/clamd.d/scan.confの設定が完了したら、clamd@scanを起動します。

# systemctl start clamd@scan

動作確認

「systemctl status clamd@scan」コマンドを実行して、正常にclamd@scanが起動しているか確認してください。

# systemctl status clamd@scan
● clamd@scan.service - Generic clamav scanner daemon
   Loaded: loaded (/usr/lib/systemd/system/clamd@scan.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2016-08-07 23:35:04 JST; 48s ago
 Main PID: 8888 (clamd)
   CGroup: /system.slice/system-clamd.slice/clamd@scan.service
           mq8888 /usr/sbin/clamd -c /etc/clamd.d/scan.conf --foreground=yes

clamd@scan自動起動設定

自動起動設定を行います。

# systemctl enable clamd@scan.service

ウイルスデータベース更新設定

「freshclam」を使用して、ウイルスのデータベースを自動的に更新する設定を行っています。

freshclam設定

「freshclam」の設定である「/etc/freshclam.conf」を編集します。

# cp -p /etc/freshclam.conf /etc/freshclam.conf_yyyymmdd
# vi /etc/freshclam.conf

設定項目

設定項目 変更前 変更後
Exampleのコメント化 Example #Example
ログファイル設定 #UpdateLogFile /var/log/freshclam.log UpdateLogFile /var/log/freshclam.log
ログファイルサイズ設定 #LogFileMaxSize 2M LogFileMaxSize 2M
ログに時間を表示 #LogTime yes LogTime yes
ログローテーション設定 #LogRotate yes LogRotate yes
ミラーデータベース設定 #DatabaseMirror db.XY.clamav.net DatabaseMirror db.jp.clamav.net
clamd@scanへの更新通知 #NotifyClamd /path/to/clamd.conf NotifyClamd /etc/clamd.d/scan.conf
設定項目説明
Exampleのコメント化
「Example」という設定があると「freshclam」は動作をやめてしまうので、「Example」部分の前に「#」をつけて、コメントにします。
ログ設定
ログファイルを設定しログの収集を行います。
ログファイルサイズ設定
ログファイルのサイズを設定します。
ログに時間を表示
ログに時間を表示させます。
ログローテーション設定
ログをローテーションさせます。
ミラーサーバの設定
ウイルスデータベースをダウンロードするためのミラーサーバを設定します。
clamd@scanへの更新通知
ウイルスデータベースに更新があった場合clamd@scanに通知し、データを再読み込みするように通知させる設定。

動作確認

手動で「freshclam」を実行してウイルスデータベースが更新できることを確認します。

# freshclam -u root

ウイルスデータベース自動更新

CentOSでは「/etc/cron.d/clamav-update」が自動的に作成されて、cronへの設定が行われます。
これにより、3時間おきにウイルスデータベースの更新がチェックされます。

ウイルススキャン動作確認

clamdscanを使用してウイルスチェックの動作試験をおこないます。

テスト用ファイルのダウンロード

実際のウイルスを使って動作試験を行うわけにはいかないので、EICARが開発したウイルスチェックテスト用ファイルである「eicar.com」をダウンロードしてきて動作試験を行います。

ダウンロードURL  http://www.eicar.org/download/eicar.com

# cd /root
# wget http://www.eicar.org/download/eicar.com

※今回は「/root」ディレクトリに「wget」を使用してダウンロードしています。

clamdscan実行

「clamdscan」でダウンロードした「eicar.com」が格納されている、「/root」ディレクトリのウイルススキャンを行うのですが、そのまま「clamdscan」コマンドを実行すると、「ERROR: Can't parse clamd configuration file /etc/clamd.conf」とエラーが表示されてしまいます。

これは、「clamdscan」が設定ファイルの場所を「/etc/clamd.conf」であると認識しているために発生しています。

# clamdscan /root
ERROR: Can't parse clamd configuration file /etc/clamd.conf

これを解消するために、シンボリックリンクを作成しエラーが発生しないように対応します。

# ln -s /etc/clamd.d/scan.conf /etc/clamd.conf

シンボリックリンクを作成するとエラーが発生しなくなるので、ウイルススキャンの動作試験を行っていきます。

ウイルスが検知されると「/root/eicar.com: Eicar-Test-Signature FOUND」と、検知されたファイルが表示され、感染ファイル数も「Infected files: 1」といったように表示されます。

# clamdscan /root
/root/eicar.com: Eicar-Test-Signature FOUND

----------- SCAN SUMMARY -----------
Infected files: 1
Time: 7.074 sec (0 m 7 s)

ちなみに、下記が「eicar.com」が無い状態で「clamdscan」を実行した結果となります。

ウイルスが検知されなかったので「/root: OK」とチェック結果が表示され、感染ファイル数も「Infected files: 0」と表示されています。

# clamdscan /root
/root: OK

----------- SCAN SUMMARY -----------
Infected files: 0
Time: 6.832 sec (0 m 6 s)

ウイルススキャン実行方法

ClamAVのインストールが完了したので、ウイルスチェックの「手動実行」と「定期実行」の方法について説明していきます。

手動実行

すぐにウイルスキャンをしたい場合などは、こちらの方法でウイルススキャンを手動で実行することが出来ます。

書式

clamdscan [オプション] [ファイルまたはディレクトリ]
オプション

普段使用しそうなオプションを抜粋して説明しています。

オプション 説明
--remove 検出したウイルスデータを削除する
(注意して使用してください)
--move=ディレクトリ 検出したウイルスデータを設定したディレクトリに移動する
ディレクトリは事前に作成すること
--log=ログファイル スキャン結果を設定したログファイルに記録する
--config-file=コンフィグファイル コンフィグファイルを指定してclamdscanを実行する

「--remove」「--move」オプションを指定しなかった場合は、検知したウイルスを表示するだけとなります。

実行例

「/home」ディレクトリ配下をウイルススキャンを実施する場合は下記のように実行します。

# clamdscan /home

定期実行

今回は、スキャン結果のメール通知が出来るようなスクリプトを作成して、それをcronから呼び出して定期スキャンを実行できるようにしていきます。

ウイルススキャン用スクリプト作成

ウイルススキャンを行うために、下記の機能をもったスクリプトを作成していきます。

  • ClamAVの更新
  • ウイルスキャン
  • スキャン結果の通知
# cd /root
# vi virus_check.sh
ウイルススキャンスクリプト
#!/bin/bash

SCANDIR=/
VIRUS_MVDIR=/root/virus
MAILADDR=tamohiko@server-memo.net

CLAMDSCAN=/bin/clamdscan
HOSTNAME=`hostname`
RUNDATE=`date +%Y%m%d-%H%M%S`
SCANTMP=/tmp/clamdscan_$RUNDATE

CLAMUPDATE="clamav-server \
clamav-data \
clamav-update \
clamav-filesystem \
clamav \
clamav-scanner-systemd \
clamav-devel \
clamav-lib \
clamav-server-systemd"


# ClamAV update

yum -y update $CLAMUPDATE


# Virus scan

$CLAMDSCAN $SCANDIR > $SCANTMP 2>&1
#$CLAMDSCAN $SCANDIR --move=$VIRUS_MVDIR > $SCANTMP 2>&1
#$CLAMDSCAN $SCANDIR --remove > $SCANTMP 2>&1


# Mail notification

[ ! -z "$(grep FOUND$ $SCANTMP)" ] && \
cat $SCANTMP | mail -s "[Virus Found] $HOSTNAME $RUNDATE" $MAILADDR

[ -z "$(grep FOUND$ $SCANTMP)" ] && \
cat $SCANTMP | mail -s "[Virus Not Found] $HOSTNAME $RUNDATE" $MAILADDR

rm -f $SCANTMP
変数説明

上記のスクリプトで、環境に合わせて設定が必要な変数について説明します。

変数名 設定内容
SCANDIR ウイルスチェックを行うディレクトリを設定
VIRUS_MVDIR --moveオプションを使用する際に、ウイルスを移動させるためのディレクトリを設定
MAILADDR スキャン結果をメールで通知する際の、メールアドレスを設定
ウイルスチェック時の動作について

clamdscanを行う際のオプションの有無については、下記の3種類を用意してあります。

  • オプション無し
  • --moveオプション付き
  • --romeveオプション付き

スクリプト内の下記部分がその部分となりますので、動作させたい部分の「#」を外し、それ以外は「#」をつけてください。

# Virus scan

$CLAMDSCAN $SCANDIR > $SCANTMP 2>&1
#$CLAMDSCAN $SCANDIR --move=$VIRUS_MVDIR > $SCANTMP 2>&1
#$CLAMDSCAN $SCANDIR --remove > $SCANTMP 2>&1
パーミッション変更

作成したスクリプトには「chmod」コマンドで実行権限を付与します。

# chmod 744 /root/virus_scan.sh
スクリプト動作テスト

作成したスクリプトはcronに登録する前に、手動で実行して正常に動作するか確認してください。

# sh -x virus_scan.sh

「mail」コマンドがインストールされていない場合は、「virus_check.sh: 行 38: mail: コマンドが見つかりません」といったメッセージが表示されて、メール送信ができません。

この場合は「yum install mailx」で「mail」コマンドをインストールしてください。

ウイルススキャンの定期実行

cronに登録して毎日定期的にウイルススキャンを行うように設定をします。

今回は「/etc/cron.d/」ディレクトリにファイルを作成してcronに登録しました。

# vi /etc/cron.d/virus-scan
設定内容

下記は毎日AM3:15にウイルススキャンを行う設定となりますが、実行時間はお好きな時間に変更してくだしさい。

MAILTO=root
15 3 * * * root /root/virus_scan.sh

 - ClamAV