ClamAV(Clam AntiVirus)の設定方法

ClamAV(Clam AntiVirus)の設定方法

最終更新日 2024年1月1日以前

 

CentOS7へのclamAVのインストールと設定方法です。

 

ClamAVの特長は以下です。

・無料ソフトの中で一番有名

 

・機能追加、連携する関連ソフトが豊富

 

・リアルタイムスキャン可能。

※SELinuxを無効にするかポリシー変更が必要
※サブディレクトリは対象外(≒再帰的スキャン不可)。

※サブディレクトリ不可ですがClamAVメーリングリストなど、対処する
スクリプトを掲載しているサイトは有ります。

 

 

 

本ページの目次

 

clamscanとclamdscanについて

 

clamscan・・・スキャンを行う。clamscanは起動するたびにウィルスデータベースを解凍、
展開し、検査を行うため遅い。オプションは豊富。

 

clamscanのオプション

●出力等に関するオプション

 

--help

-h 使い方を表示

 

--version

-V バージョン情報を表示

 

--verbose

-v 出力を詳細にする

 

--debug

デバッグ情報を出力

 

--quiet

エラー情報のみ出力

 

--stdout

stderrではなくstdoutへ出力

 

--log=FILE

-l FILE 結果をファイルへ記録

 

--log-verbose

追加情報を結果報告に加える

 

--disable-summary

summaryを出力しない

 

--infected

-i ウイルスに感染したファイルのみを出力

 

--bell

ウイルスを検出したらベルを鳴らす

 

 

 

●動作に関するオプション

 

--tempdir=DIRECTORY

一時ファイルを作成するディレクトリを指定

 

--database=FILE/DIR

-d FILE/DIR VirusDBとして読み込むファイル(or ディレクトリ)を指定

 

--recursive

-r サブディレクトリごと再帰的に検査。圧縮ファイルは再帰的に解凍して検査

 

--exclude=PATT

パターンにマッチするファイルを検査しない

 

--include=PATT

パターンにマッチするファイルのみを検査する

 

--remove

ウイルスに感染したファイルを削除する

 

--move=DIRECTORY

ウイルスに感染したファイルをDIRECTORYへ移動する

 

--force

エラーを無視して強制的に検査を行う

 

引用元

 

 

clamdscan・・・スキャンを行う。clamscanより早い。オプションはclamscanより少ない。

 

clamdscanのオプション

--help

-h 使い方を表示

 

--version

-V バージョンを表示

 

--verbose

-v 詳細に出力

 

--quiet

エラーのみを出力

 

--stdout

stderrではなくstdoutに出力

 

--log=FILE

-l FILE FILEにログを記録する

 

--log-verbose

詳細なログ出力

 

--disable-summary

summary表示をしない

 

--config-file=FILE

設定として読み込むclamav.confを明示する。clamdscanはclamdと同じclamav.confを使用する必要がある

 

引用元

 

 

 

RPMforgeリポジトリのインストール

 

RPMforgeリポジトリのインストール

 

rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm

 

 

 

clamAVのインストール

 

■clamdのインストール

yum install clamd

 

clamd、clamav、clamav-dbがインストールされます。

 

ユーザーマニュアル(英語)は
/usr/share/doc/clamav-***/clamdoc.pdfです。
そのフォルダには、その他サンプルファイルなどが有ります。

 

※clamav、clamav-dbのみを入れる場合

yum install --enablerepo=epel clamav

または

yum install --enablerepo=rpmforge clamav

 

clamav自体はepelの方が新バージョンでしたがfreshclamが有りませんでした。
また、clamavのみを入れた場合はclamdに関するファイル(clamd.confなど)は
インストールされません。

※epelのインストールは「yum install epel-release」です。

 

 

■RPMforgeリポジトリの無効化

vi /etc/yum.repos.d/rpmforge.repo

enabled = 1

enabled = 0

に変更

 

※今後、rpmforgeリポジトリを使用する際は

yum install --enablerepo=rpmforge パッケージ名

か、再度enable=1へ変更します。

 

 

■権限変更

root権限で動作するようにする。

 

vi /etc/clamd.conf

 

#User clamav

※コメントアウトする。195行目に有りました。

 

 

 

clamAVの起動と起動エラーの対処

 

■自動起動確認
systemctl is-enabled clamd

 

※自動起動させるには

systemctl enable clamd

 

※自動起動の停止は

systemctl disable clamd

 

 

■起動する
service clamd start

もしくは

systemctl start clamd

 

■現在起動しているかの確認
systemctl status clamd

 

■ログの確認
journalctl -u clamd
journalctl -r ※新しい順

 

/var/log/clamav/clamd.log
/var/log/clamav/freshclam.log

 

systemctlについては以下のページに記載しました。

 

 

clamdの起動エラーについて

 

その後、OSの再起動後に

systemctl restart clamd

するとclamdが起動出来ませんでした。
以下のエラーでした。

 

systemctl status clamd
ERROR: Can,t unlink the socket file /var/run/clamav/clamd.sock
LOCAL: Socket file /var/run/clamav/clamd.sock could not be bound: No such file or directory
Can,t unlink the socket file /var/run/clamav/clamd.sock

 

/var/runディレクトリにclamavディレクトリがそもそも有りませんでしたので
作成しました。

mkdir /var/run/clamav

 

その後clamdを正しく起動出来ました。

systemctl restart clamd

 

その後、OSの再起動を行うと、また起動できず
/var/run/clamavディレクトリも無くなっていました。
(tmpディレクトリのような動作)

 

そのため、systemdを使用してOS起動時に
/var/run/clamavディレクトリを作成しました。

 

■ディレクトリ移動
cd /etc/tmpfiles.d

 

■ファイルの作成

既に/tmpfiles.dディレクトリにscreen.confや
named.confが有ったので、それをコピーして作成しました。

 

cp screen.conf clamav.conf

 

vi clamav.conf

d /var/run/clamav 0755 root root -

 

その後はOSを再起動しても正常にclamdが起動しました。

 

別の対処方法として/etc/clamd.confで、ソケットやプロセスの作成場所を
全て違うディレクトリに変更しても良いのかもしれません。

83 # Path to a local socket file the daemon will listen on.
84 # Default: disabled (must be specified by a user)
85 LocalSocket /var/run/clamav/clamd.sock

 

 

clamconf、clamdtopについて

clamconfは、/etcのclamd.confとfreshclam.confの設定値や各バージョンの
確認ができます。

 

clamconf

Checking configuration files in /etc

 

Config file: clamd.conf
-----------------------
LogFile = "/var/log/clamav/clamd.log"

 

clamdtopはclamdの状況をモニタ出来ます。

 

 

 

 

ウィルス定義ファイルの更新

 

■ウィルス定義更新ファイルの有効確認

freshclam.confについて、8行目のExampleがコメントアウトされていることを確認します。

 

vi /etc/freshclam.conf

#Example

 

■ウィルス定義ファイル更新

※「/etc/cron.daily/freshclam」によっても
毎日に自動にて実施されます。

 

freshclamのオプション

--http-proxy=hostname[:port] プロキシを使用する
--proxy-user=user:password プロキシのユーザー、パスワード

※詳細は3.2. freshclamに記載されていました。

 

freshclam

ClamAV update process started at Wed Dec 21 09:34:10 2014
WARNING: Your ClamAV installation is OUTDATED!
WARNING: Local version: 0.98.4 Recommended version: 0.98.5
DON,T PANIC! Read http://www.clamav.net/support/faq
main.cld is up to date (version: 55, sigs: 2424225, f-level: 60, builder: neo)
daily.cvd is up to date (version: 19831, sigs: 1296117, f-level: 63, builder: neo)
bytecode.cvd is up to date (version: 244, sigs: 44, f-level: 63, builder: dgoddard)

 

アップデートパッケージが有るということでした。

 

yum update --enablerepo=rpmforge clamd

読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* rpmforge: ftp.riken.jp
* updates: ftp.iij.ad.jp
No packages marked for update

 

まだこちらには無さそうなので今回は放っておきました。
「yum update --enablerepo=rpmforge clamd」を含んだスクリプトをcronで
毎日実行させておこうかと思います。

 

 

 

手動スキャンの実施

 

cd /root

※スキャン対象とする任意のディレクトリへ移動します。

 

■テスト用擬似ウィルスファイルのダウンロード
wget http://www.trendmicro.com/ftp/products/eicar-file/eicar.com

もしくは

wget http://www.eicar.org/download/eicar.com

 

ls -al

※eicar.comが保存されたことを確認します。

 

■ウィルススキャンのテスト

 

clamscan -r --remove

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

 

----------- SCAN SUMMARY -----------
Known viruses: 3714829
Engine version: 0.98.4
Scanned directories: 153
Scanned files: 183
Infected files: 1
Data scanned: 44.14 MB
Data read: 55.26 MB (ratio 0.80:1)
Time: 18.217 sec (0 m 18 s)

 

 

ls -al

※正しくeicar.comが削除されたことを確認します。

 

 

 

スケジュールスキャンの設定方法

 

 

■スキャンログ格納ディレクトリを作成
mkdir /home/ユーザ名/clamav-scan-log

 

■スクリプト名は適当にclamav-scan.shとしました。
vi clamav-scan.sh
#!/bin/bash

 

yum update -y --enablerepo=rpmforge clamd

 

clamscan / -r --remove --exclude-dir='/sys|/proc' > /home/ユーザ名/clamav-scan-log/`date +%Y%m%d`.log

 

tail -10 /home/ユーザ名/clamav-scan-log/`date +%Y%m%d`.log | mail -s "SCAN SUMMARY - `hostname`" 送信先メールアドレス

 

※スキャン対象ディレクトリ、除外ディレクトリ等々、各環境で設定を変えて下さい。
ルートディレクトリをスキャンしたところ、/sysはエラーが出たため、除外としても
良いかもしれません。

 

上記(/sys、/proc以外を全スキャン)でログを取得したところ、ログファイルのサイズは
3MBでした。スキャン結果(スキャン サマリ)は最後の10行に記載されています。
メール後に以前のログを削除させるか、それか1か月位でログローテーションしても良いですね。

 

※clamscanではなく「clamdscan」を行う場合は、/etc/clamd.confに
除外ディレクトリを記載します。

 

 

 

※どのディレクトリをスケジュールスキャンするかは以下を参照にして下さい。

Linuxの各ディレクトリに格納されているファイルについて
bin  linuxに最初から有るコマンド群
dev  デバイスに関するファイル。接続デバイスは「fdisk -l」
home  root以外のユーザーごとのディレクトリ
mnt  ファイルシステムのマウントポイント
proc  プロセス(PID)やカーネルに関するファイル。PID表示は「ps -aux」
run  プロセスのデータ。/var/runは/runのシンボリックリンク。
sys  ドライバ関連のファイル。
usr  ユーザーが共通で使うプログラム群。
※/usr/share/applicationsがWindowsで言うとコントロールパネル
boot  ブートに関するファイル
etc  コンフィグファイル
lib  コマンドを実行するためのファイル
lib64  コマンドを実行するためのファイル。64ビット用
media  CDやDVDのマウントポイント
opt  パッケージのインストール先。
※Windowsで言うとProgram Filesのうち、後からインストールしたプログラム群。
root  rootユーザーのディレクトリ
sbin  管理者が使用するコマンド
srv  システムのサービスデータ。
tmp  テンポラリファイル
var  ログやApacheのデフォルトのドキュメントルートなど。

 

■実行権限の付与
chmod +x clamav-scan.sh

 

 

一度スクリプトを実行してみて、正しくメール受信出来ることを確認します。
また今後、翌日(翌週)3、4時頃にもメール受信することを確認し正しくクーロン、
スキャンが行えたことを確認しましょう。

 

./clamav-scan.sh

 

 

 

 

■/etc/cron.weeklyや/etc/cron.daily/への移動

1週間に1度スケジュールスキャンをする場合

mv clamav-scan.sh /etc/cron.weekly/

 

1日に1度スケジュールスキャンをする場合

mv clamav-scan.sh /etc/cron.daily/

 

■/etc/crontabの確認

CentOS6と同一で殆ど何も記載されていません。
CentOS5のように「cron.dailyは4時2分に実行」では有りません。
1台の物理サーバ上で全仮想サーバが4時2分にスクリプトを実行すると
負荷がかかるため、などの理由。

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

 

# For details see man 4 crontabs

 

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

 

■/etc/anacrontabの確認

[root@localhost /]# cat /etc/anacrontab

# /etc/anacrontab: configuration file for anacron

 

# See anacron(8) and anacrontab(5) for details.

 

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

 

#period in days delay in minutes job-identifier command
15cron.dailynice run-parts /etc/cron.daily
725cron.weeklynice run-parts /etc/cron.weekly
@monthly 45cron.monthlynice run-parts /etc/cron.monthly

 

以上のデフォルト設定により日次、週次ともに(スケジュールスキャンが)
午前3時~4時の間に実行されるかと思います。

 

実行時刻をランダムでは無く、固定するにはcronie-noanacronを
インストールして使用する感じかと思います。

 

以上で設定完了です。

 

 

 

リアルタイムスキャンの設定方法

リアルタイムスキャン(オンアクセススキャン)の設定方法です。

 

オンアクセススキャンの設定は/etc/clamd.confの526行目からです。
532行目と543行目の#を外し、543行目のOnAccessIncludePathを/rootとしてみました。

 

 

また利用するモジュールについては、
「Enable on-access scanning. Currently, this is supported via fanotify.
Clamuko/Dazuko support has been deprecated.」

 

「オンアクセススキャンを有効にします。現在、これはfanotifyを介して利用します。
Clamuko/Dazukoのサポートは廃止されました。」

 

fanotify一本となったとのことでした。
以前、CentOS5や6でリアルタイムスキャンによく使用されていたRedirFSDazuko
収束しており、現在はLinux 2.6.36以降のカーネルに最初から入っているfanotify
(filesystem wide access notification)を利用してのリアルタイムスキャンが
多くなっていっています。
IPAのサイトにdnotify・inotify・fsnotify・fanotifyの説明が有りました。

Linuxの無料のウィルス対策ソフトで言うとオンアクセススキャン時に
利用するモジュールは以下です。

Sophos Anti-Virus for Linux (Free Edition): Talpa、(fanotify)
AVG Anti-Virus free for Linux: RedirFS、Dazuko、fanotify
COMODO Antivirus: RedirFS、(fanotify)
ClamAV: fanotify

 

また、fanotifyの動作通りサブディレクトリは再帰的に見ないので
1つずつディレクトリを列挙すること、とありました。

 

そして/etc/clamd.confの編集後、fanotifyを利用するためSELinuxを
無効にしました。セキュアに実施するのであればSELinuxのポリシー変更の
方が良いかと思います。

 

vi /etc/selinux/config

SELINUX=enforcing

SELINUX=disabled

へ変更。

 

OS再起動後、eicar.comをダウンロードしました。

wget http://www.trendmicro.com/ftp/products/eicar-file/eicar.com

 

/rootディレクトリ、/root/aaaディレクトリそれぞれに
eicar.comを置きました。

 

clamdを再起動しました。

systemctl restart clamd

 

ログを見ておきます。

tail -f /var/log/messages

 

/root/フォルダを見ると同時にログが更新されました。

 

 

 

翻って/root/aaaフォルダを見ても何も起こりませんでした。
(≒再帰的では有りませんでした。)
初期設定状態でサブディレクトリもスキャン(再帰的スキャン)出来るという点では
AVGの方が優れていますね。

 

マウントポイント全体のリアルタイムスキャンなど