AVG for Linuxの導入

Linux用のアンチウィルスは、ClamAVがスタンダードな感じだけれど、Windowsでよく使われているAVGは、Linux版がある。

CnetOS 6.5にAVG for Linuxをインストールする手順について。

<環境>

OS:CentOS 6.5/64bit
kernel:2.6.32-431.el6.x86_64.rpm

AVGは、以下からダウンロード。
http://free.avg.co.jp/download/files/alf

※URLが変更になった場合は、Webサイトのトップから探す

インストール

インストールはRPMパッケージなので簡単。

# cd /usr/local/src/
# wget http://download.avgfree.com/filedir/inst/avg2013flx-r3118-a6926.i386.rpm
# rpm -ivh aavg2013flx-r3118-a6926.i386.rpm
準備中...                ########################################### [100%]
   1:avg2013flx             ########################################### [100%]
Installing 'avgd' service initscripts...
Registering 'avgd' service to runlevels...
Please do configuration with /opt/avg/av/bin/avgsetup
Generating unique user id
Processing command line ...
Cfg file not specified using /opt/avg/av/cfg/diagcfg.xml.
New installation ID succesffully generated.
Starting AVG AV
Starting avgd[  OK  ]


以下のファイルは、コメントのみで内容は空。

/etc/avg.conf

設定ファイルは下記のディレクトリにある。

/opt/avg/av/cfg/


サービスの起動と停止は以下のようにする。

起動

# /etc/init.d/avgd start

停止

# /etc/init.d/avgd stop


ウィルス定義の更新。初回は少し時間がかかる。cronで定期的に自動更新する。

# avgupdate

スキャン

スキャンは以下のようにする。/tmp 以下にテスト用ウィルス(eicar)を置いてテスト。

# avgscan /tmp/
AVG command line Anti-Virus scanner
Copyright (c) 2013 AVG Technologies CZ

Virus database version: 3722/7313
Virus database release date: Mon, 07 Apr 2014 14:32:00 +0900

/tmp/eicar.com  Virus identified EICAR_Test

Files scanned     :  92(92)
Infections found  :  1(1)
PUPs found        :  0
Files healed      :  0
Warnings reported :  0
Errors reported   :  0

テスト用のウィルスファイル(EICAR_Test)が検知された。

リアルタイムスキャン

Linux版のAVGでは、リアルタイムスキャン(リアルタイム保護、オンアクセス保護とも呼ばれると思う)に対応している。

/opt/avg/av/doc/README を見ると、

For on-access scanning feature either redirfs, dazuko or dazukofs is needed.
Please follow the avgoad(1) man page for more detail description.

と記載がある。「avgoad」が該当するプロセスらしい。

確認しても、デフォルトではこのプロセスは動作していないようである。

# ps aux | grep avgoad


/opt/avg/av/doc/README.oad に手順が記載してあった。

DazukoFS/Dazuko on Linux/RedirFS/Fanotify のいずれかを使う。

Dazuko on LinuxAVGでは非推奨。Fanotifyは、kernel 2.6.36 以上でなければ使えない。

CentOS6.5の場合、DazukoFS または RedirFSとなる。

ここでは、DazukoFSによりリアルタイムスキャンがされるよう設定する。


まずはカーネルソースの入手

# yum install kernel-devel

DazukoFSの入手

# wget http://dazuko.dnsalias.org/files/dazukofs-3.1.4.tar.gz
 →ビルドできないので、古いバージョンに・・・
# wget http://dazuko.dnsalias.org/files/dazukofs-3.1.2.tar.gz

展開

# tar zxf dazukofs-3.1.2.tar.gz
# cd dazukofs-3.1.2

ビルド

# make
make -C /lib/modules/`uname -r`/build SUBDIRS="`pwd`" modules
make[1]: ディレクトリ `/usr/src/kernels/2.6.32-431.el6.x86_64' に入ります
  CC [M]  /usr/local/src/dazukofs-3.1.2/super.o
/usr/local/src/dazukofs-3.1.2/super.c: In function ‘dazukofs_statfs’:
/usr/local/src/dazukofs-3.1.2/super.c:62: 警告: passing argument 1 of ‘vfs_statfs’ from incompatible pointer type
include/linux/fs.h:2026: note: expected ‘struct path *’ but argument is of type ‘struct dentry *’
  CC [M]  /usr/local/src/dazukofs-3.1.2/inode.o
  CC [M]  /usr/local/src/dazukofs-3.1.2/file.o
  CC [M]  /usr/local/src/dazukofs-3.1.2/dentry.o
  CC [M]  /usr/local/src/dazukofs-3.1.2/mmap.o
  CC [M]  /usr/local/src/dazukofs-3.1.2/group_dev.o
  CC [M]  /usr/local/src/dazukofs-3.1.2/ign_dev.o
  CC [M]  /usr/local/src/dazukofs-3.1.2/ctrl_dev.o
  CC [M]  /usr/local/src/dazukofs-3.1.2/dev.o
  CC [M]  /usr/local/src/dazukofs-3.1.2/event.o
  LD [M]  /usr/local/src/dazukofs-3.1.2/dazukofs.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /usr/local/src/dazukofs-3.1.2/dazukofs.mod.o
  LD [M]  /usr/local/src/dazukofs-3.1.2/dazukofs.ko.unsigned
  NO SIGN [M] /usr/local/src/dazukofs-3.1.2/dazukofs.ko
make[1]: ディレクトリ `/usr/src/kernels/2.6.32-431.el6.x86_64' から出ます


モジュールのインストール

# make dazukofs_install
make -C /lib/modules/`uname -r`/build SUBDIRS="`pwd`" modules
make[1]: ディレクトリ `/usr/src/kernels/2.6.32-431.el6.x86_64' に入ります
  Building modules, stage 2.
  MODPOST 1 modules
make[1]: ディレクトリ `/usr/src/kernels/2.6.32-431.el6.x86_64' から出ます
mkdir -p /lib/modules/`uname -r`/kernel/fs/dazukofs
cp dazukofs.ko /lib/modules/`uname -r`/kernel/fs/dazukofs
/sbin/depmod -ae

下記へモジュールがコピーされる。

/usr/src/kernels/2.6.32-431.el6.x86_64/kernel/fs/dazukofs/dazukofs.ko

モジュールのロード

# modprobe dazukofs

確認

# /sbin/lsmod | grep dazuko
dazukofs               35843  0

# dmesg | grep dazukofs
dazukofs: loaded, version=3.1.2


AVGの設定で、Default.setup.features.oad=true となっているか確認する。

# avgcfgctl | grep Default.setup.features.oad
Default.setup.features.oad=true

モジュールを指定する。

# avgcfgctl | grep Default.oad.use
Default.oad.use=fanotify

上記を変更する。変更は、下記のコマンドで行う。

DazukoFSの場合

# avgcfgctl -w Default.oad.use=dazukofs

RedireFSの場合

# avgcfgctl -w Default.oad.use=avflt


DazukoFSを使う場合の設定を確認する。

# avgcfgctl | grep Default.oad.dazuko
Default.oad.dazuko.cache.hashtable_size=4096
Default.oad.dazuko.cache.max_items_number=65536
Default.oad.dazuko.events.close=false
Default.oad.dazuko.events.close_modified=true
Default.oad.dazuko.events.exec=true
Default.oad.dazuko.events.open=true
Default.oad.dazuko.paths.exclude=|/dev|/proc|/sys|
Default.oad.dazuko.paths.include=

/tmp 以下をリアルタイムスキャン対応にする。

# avgcfgctl -w 'Default.oad.dazuko.paths.include=|/tmp|'

設定確認

# avgcfgctl | grep Default.oad.dazuko.paths.include
Default.oad.dazuko.paths.include=|/tmp|

AVGサービスを再起動

# /etc/init.d/avgd restart

プロセス確認

# ps aux | grep avgoad
root     22833  0.2  0.6 101104  3388 pts/0    Sl   11:51   0:00 /opt/avg/av/bin/avgoad

対象ディレクトリをDazukoFSでマウントする。

# mount -t dazukofs /tmp /tmp

リアルタイムスキャンに対応しているか動作確認

# cat /tmp/eicar.com.txt
cat: /tmp/eicar.com.txt: 許可されていない操作です

対象ディレクトリのアンマウント

# umount /tmp/
umount /tmp: デバイスがビジーです。
 →AVGサービスを停止しなければならない

# /etc/init.d/avgd stop
# umount /tmp/
 →AVGサービスを停止するとアンマウントできる

リアルタイムスキャンに対応していない状態でファイルを開いてみる。

# cat /tmp/eicar.com.txt
 →内容が表示される(保護されていない)


リアルタイムスキャンに対応させる場合の注意点としては・・・

DazukoFSでマウント→AVGプロセスを起動の順では動作しない。

AVGプロセス起動→DazukoFSでマウントの順である必要がある。


PostfixなどMTAとの連携や、GUI管理インターフェースについては未調査。