CentOS7にepelリポジトリで提供されているClamAV(アンチウイルスソフト)をインストールする手順です。
【2017.04.20追記】 freshclamの設定作業に漏れがあったので追記しました。対象ファイルは「/etc/freshclam.conf」「/etc/sysconfig/freshclam」になります。
【2017.11.03修正】 ウイルススキャン用スクリプトの修正を行いました。
前提条件
「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」部分の前に「#」をつけて、コメントにします。
- ログファイル設定
- ログを記録するファイルを設定しログを収集します。
- ログファイルサイズ設定
- ログファイルの最大サイズを設定します。
- ログファイルに時間を設定
- ログに時刻も含め記録する。
- ログローテーション設定
- ログをローテーションさせる設定。
- ローカルソケット使用設定
- ローカルソケットを使用し、ローカルからのみ接続できるようにします。
- 異常終了時にソケットを削除
- 異常終了した際にソケットを削除する設定。
- スキャン除外ディレクトリ設定
- ウイルススキャンを行わないディレクトリを指定します。
- 今回は「/dev」ディレクトリもウイルスチェックから外していますが、環境に合わせて設定を行ってください。
- 実行ユーザ設定
- rootユーザで実行するように変更します。
(画面のサイズ上2行に見えますが、1行での設定となります)
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」を使用して、ウイルスのデータベースを自動的に更新する設定を行っています。
「/etc/freshclam.conf」設定
「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 |
データベースオーナー設定(2017.04.20追記) | #DatabaseOwner clamupdate | DatabaseOwner root |
ミラーデータベース設定 | #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」部分の前に「#」をつけて、コメントにします。
- ログ設定
- ログファイルを設定しログの収集を行います。
- ログファイルサイズ設定
- ログファイルのサイズを設定します。
- ログに時間を表示
- ログに時間を表示させます。
- ログローテーション設定
- ログをローテーションさせます。
- データベースオーナー設定
-
データベースの所有者を「root」に設定しないと「clamd@scan」への更新通知で下記のようなWARNINGとなるので変更します。
WARNING: Clamd was NOT notified: Can't connect to clamd through /var/run/clamd.scan/clamd.sock: Permission denied
- ミラーサーバの設定
- ウイルスデータベースをダウンロードするためのミラーサーバを設定します。
- clamd@scanへの更新通知
- ウイルスデータベースに更新があった場合clamd@scanに通知し、データを再読み込みするように通知させる設定。
「/etc/sysconfig/freshclam」編集(2017.04.20追記)
「freshclam」を使用してウイルス定義データベースの自動更新を行うためには、「/etc/sysconfig/freshclam」ファイルの編集も必要なのですが、その作業説明が抜けていましたので追記させて頂きます。すいませんでした。
設定ファイルを編集する場合は、念のためにバックアップをとってから作業を行いましょう。
# cp -p /etc/sysconfig/freshclam /etc/sysconfig/freshclam_yyyymmdd # vi /etc/sysconfig/freshclam
変更前
初期設定では自動更新が「disabled-warn」に設定されているため、自動更新が実施されません。
### !!!!! REMOVE ME !!!!!! ### REMOVE ME: By default, the freshclam update is disabled to avoid ### REMOVE ME: network access without prior activation FRESHCLAM_DELAY=disabled-warn # REMOVE ME
変更後
「FRESHCLAM_DELAY=disabled-warn」部分の行頭に「#」を付けてコメント化し、自動更新されるように設定を変更します。
### !!!!! REMOVE ME !!!!!! ### REMOVE ME: By default, the freshclam update is disabled to avoid ### REMOVE ME: network access without prior activation #FRESHCLAM_DELAY=disabled-warn # REMOVE ME <---「#」を付けてコメント化します
この作業を行わないと、下記のWARNINGとなりウイルスデータベースの更新が行われませんので注意してください。
ウイルス定義データベース更新が行われない場合のエラー内容
WARNING: update of clamav database is disabled; please see '/etc/sysconfig/freshclam' for information how to enable the periodic update resp. how to turn off this message.
2018.08.29追記
CentOS7.5の環境で確認したところ、「### !!!!! REMOVE ME !!!!!!」以下の設定が無くなっていました。
この場合「# FRESHCLAM_DELAY=」と設定されていることを確認しておいてください。
動作確認
手動で「freshclam」を実行してウイルスデータベースが更新できることを確認します。
# freshclam -u root
ウイルスデータベース自動更新
CentOSでは「/etc/cron.d/clamav-update」が自動的に作成されて、「cron」への設定が行われます。
これにより、3時間おきにウイルスデータベースの更新がチェックされます。
ログ確認
3時間毎の更新ログは「/var/log/freshclam.log」に出力されるので、更新に問題が発生していないか確認してください。
ウイルススキャン動作確認
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※スクリプト名が間違っていたので修正しました # vi virus_scan.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 \ clamav-scanner-systemd \ clamav-devel \ clamav-lib \ clamav-server-systemd" # ClamAV update yum -y update --enablerepo=epel $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
【2017.11.03】スクリプトを修正
- ClamAVアップデート対象を指定する「CLAMUPDATE」に「clamav-scanner」を追加
- ClamAV update処理の際に「epel」リポジトリの指定が抜けていたので修正
変更後 yum -y update --enablerepo=epel $CLAMUPDATE
変数説明
上記のスクリプトで、環境に合わせて設定が必要な変数について説明します。
変数名 | 設定内容 |
---|---|
SCANDIR | ウイルスチェックを行うディレクトリを設定 |
VIRUS_MVDIR | --moveオプションを使用する際に、ウイルスを移動させるためのディレクトリを設定 |
MAILADDR | スキャン結果をメールで通知する際の、メールアドレスを設定 |
ウイルスチェック時の動作について
clamdscanを行う際のオプションの有無については、下記の3種類を用意してあります。
- オプション無し
- --moveオプション付き
- --removeオプション付き
スクリプト内の下記部分がその部分となりますので、動作させたい部分の「#」を外し、それ以外は「#」をつけてください。
# 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
tamohiko様
いろんなサイト様を参照しつつ最終的にこちらのサイト様で無事に動作させることができました。
ありがとうございます。
スクリプトをコピぺして動作させてしまいご迷惑をおかけしました。
申し訳ありませんでした。