Clam Anti Virusはオープンソースのアンチウイルスソフトです。
使いこなすことができれば、プロプライエタリ アンチウイルスソフトと遜色のない能力を発揮します。
LinuxはもとよりWindowsやMACにも移植されています。
今回はDebianのパッケージを使って、ClamAV(Clam Anti Virus)をインストールする方法を解説します。
本家の最新バージョンをインストールしたいのであればhttps://www.fumibu.com/howto-use-latest-clamav/を参照してください。
ディストリビューションのパッケージをインストールする
ClamAVをインストールした経験がない場合は、一度パッケージをインストールしてみることで、configやログの設定例を習得できるのでお勧めです。
apt update
apt -y install clamav
PCやVMへのインストールではfreshclamがすでに起動しています。
Dockerの場合は次のようにfreshclamを起動します。
/etc/init.d/clamav-freshclam start
インターネットにつながる状態でしばらく待つと /var/lib/clamav/ ディレクトリー内にウイルス データベースがダウンロードされます。
ls -l /var/lib/clamav/
合計 575184
-rw-r--r-- 1 clamav clamav 293670 5月 20 15:14 bytecode.cvd
-rw-r--r-- 1 clamav clamav 184760832 5月 28 18:58 daily.cld
-rw-r--r-- 1 clamav clamav 69 5月 20 15:14 freshclam.dat
-rw-r--r-- 1 clamav clamav 170479789 5月 20 15:14 main.cvd
データベースのダウンロード状況はログで確認することができます。
cat /var/log/clamav/freshclam.log
Sun May 29 17:17:01 2022 -> --------------------------------------
Sun May 29 17:17:01 2022 -> freshclam daemon 0.103.6 (OS: linux-gnu, ARCH: x86_64, CPU: x86_64)
Sun May 29 17:17:01 2022 -> ClamAV update process started at Sun May 29 17:17:01 2022
Sun May 29 17:17:01 2022 -> daily database available for download (remote version: 26555)
Sun May 29 17:17:11 2022 -> Testing database: '/var/lib/clamav/tmp.616cdcecf4/clamav-b5a0a5f070d4d2bb76c94dc5bd79d728.tmp-daily.cvd' …
Sun May 29 17:17:23 2022 -> Database test passed.
Sun May 29 17:17:23 2022 -> daily.cvd updated (version: 26556, sigs: 1984920, f-level: 90, builder: raynman)
Sun May 29 17:17:23 2022 -> main database available for download (remote version: 62)
Sun May 29 17:17:47 2022 -> Testing database: '/var/lib/clamav/tmp.616cdcecf4/clamav-8a0ca90b7f877e7a1f9f4975bf3cc915.tmp-main.cvd' …
Sun May 29 17:18:02 2022 -> Database test passed.
Sun May 29 17:18:02 2022 -> main.cvd updated (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr)
Sun May 29 17:18:02 2022 -> bytecode database available for download (remote version: 333)
Sun May 29 17:18:02 2022 -> Testing database: '/var/lib/clamav/tmp.616cdcecf4/clamav-e885071e4acc2564dcb4e93d3075a797.tmp-bytecode.cvd' …
Sun May 29 17:18:02 2022 -> Database test passed.
Sun May 29 17:18:02 2022 -> bytecode.cvd updated (version: 333, sigs: 92, f-level: 63, builder: awillia2)
Sun May 29 17:18:02 2022 -> ERROR: NotifyClamd: Can't find or parse configuration file /etc/clamav/clamd.conf
Sun May 29 17:18:02 2022 -> --------------------------------------
freshclamは定期的に(例えば1時間おきに)ウイルス データベースを更新するdaemonです。
これでウイルススキャンの準備ができました。
clamscan でウイルスを検出する
ウイルス検出をテストしてみます。
万国共通のアンチウイルス テストファイル EICARを使います。
ウイルスバスターで有名なトレンドマイクロのサイトや下記のEICARのサイトからダウンロードできます。
ただし、アンチウイルスソフトが入っているPCではダウンロードできないかもしれません。
模擬ウイルスは次の文字列です。
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
ダウンロードもしくは、この文字列をファイルに書き込んで拡張子を.comとして保存します。
/tmp ディレクトリー内でテストしてみましょう。
必要なディレクトリとEICARファイルを用意します。
mkdir -p /tmp/clamav_test/virus
mkdir /tmp/virusdir
cat <<'EOF' >/tmp/virusdir/eicar.com
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
EOF
clamscan で/tmp/virusdir をスキャンすると、検出結果が表示されます。
clamscan --infected --database=/var/lib/clamav --move=/tmp/clamav_test/virus --recursive --log=/tmp/clamav_test/clamscan.log /tmp/virusdir/
/tmp/virusdir/eicar.com: Eicar-Signature FOUND
/tmp/virusdir/eicar.com: moved to '/tmp/clamav_test/virus/eicar.com'
----------- SCAN SUMMARY -----------
Known viruses: 14305021
Engine version: 0.103.6
Scanned directories: 1
Scanned files: 1
Infected files: 1
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 15.751 sec (0 m 15 s)
Start Date: 2022:05:29 19:55:50
End Date: 2022:05:29 19:56:06
見やすいようにコマンドをフォールドしてみます。
clamscan --infected \
--database=/var/lib/clamav \
--move=/tmp/clamav_test/virus \
--recursive \
--log=/tmp/clamav_test/clamscan.log \
/tmp/virusdir/
clamscan のオプションの意味は次の通りです。
オプション | 意味 |
---|---|
–infected | ウイルスが見つかった時だけ状況を表示する |
–database=/var/lib/clamav | /var/lib/clamav ディレクトリのパターンファイルを使う |
–move=/tmp/clamav_test/virus | 検出したウイルスファイルは /tmp/clamav_test/virus に移動する |
–recursive | サブ ディレクトリー もスキャンする |
–log=/tmp/clamav_test/clamscan.log | ログを /tmp/clamav_test/clamscan.log に書き込む |
/tmp/virusdir/ | /tmp/virusdir/ 内を(再帰的に)スキャンする |
ほかにもたくさんのオプションがあります。
man clamscan でマニュアルを表示するか clamscan –help で詳細を表示できます。
ウイルスの状態を確認すると、/tmp/virusdir/ に置いたeicar.com が /tmp/clamav_test/virus/ に移動しています。
ls -l /tmp/virusdir/
合計 0
ls -l /tmp/clamav_test/virus/
合計 4
-rw-r--r-- 1 fumi fumi 69 5月 29 18:06 eicar.com
ログにはコマンド実行時に出力された情報が記録されています。
cat /tmp/clamav_test/clamscan.log
-------------------------------------------------------------------------------
/tmp/virusdir/eicar.com: Eicar-Signature FOUND
/tmp/virusdir/eicar.com: moved to '/tmp/clamav_test/virus/eicar.com'
----------- SCAN SUMMARY -----------
Known viruses: 14305021
Engine version: 0.103.6
Scanned directories: 1
Scanned files: 1
Infected files: 1
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 15.751 sec (0 m 15 s)
Start Date: 2022:05:29 19:55:50
End Date: 2022:05:29 19:56:06
clamscan はオーバーヘッドが大きい
clamscan で /tmp/virusdir/ 内のたった1つのファイルを検索しました。
この検索に十数秒を要します。(15.751秒と出力されています。)
先ほど見たように /var/lib/clamav/ のパターンファイルは400MBほどあります。
clamscanは、これらのファイルを読み込んでからスキャンを始めます。
clamscan はゲートウェイでメールやウェブデータをスキャンする用途には向きません。
リアルタイム検索にも向きません。
バッチでディレクトリーごと検索するような場合は力を発揮します。
ウイルス検出は重い
ClamAV でのウイルス検出には最低でも下記のスペックが必要です。
- 2~3GBのメモリ
- 2.0Ghz以上CPU1コア
- 5GB以上のディスクスペース
ウイルス検索は、かなり重たいタスクだといえます。
リアルタイム検索には clamdscan を使う
電子メールやウェブ閲覧をゲートウェイで見張る場合やリアルタイム検索をする場合は clamdscan を使います。
コマンドが似ていますが、 clamscan ではなく clamdscan になります。
clamdscan を使うには、パターンファイルを読み込んだ状態で常に待機しているサーバー(デーモン)が必要です。
Debian のパッケージ名は clamav-daemon です。
デーモンをインストールします。
apt -y install clamav-daemon
Dockerコンテナにインストールした場合は、手動で起動する必要があります。
/etc/init.d/clamav-daemon start
起動を確認します。
ps -A |grep clam
439 ? 00:00:00 freshclam
459 ? 00:00:30 clamd
freshclam にくわえて clamd が起動しています。
clamdscan でウイルスを検出する
先ほど clamscan で移動したEICARファイルを元の場所に戻します。
mv /tmp/clamav_test/virus/eicar.com /tmp/virusdir/
configファイルを用意します。
cat <<'EOF' >/tmp/clamav_test/clamd.localsocket.conf
LocalSocket /var/run/clamav/clamd.ctl
EOF
clamdscan でスキャンします。
clamscan の時のように待たされることはありません。
一瞬で結果が出ます。(0.001秒)
clamdscan --fdpass --infected --config-file=/tmp/clamav_test/clamd.localsocket.conf --move=/tmp/clamav_test/virus --log=/tmp/clamav_test/clamdscan.log /tmp/virusdir/
--------------------------------------
/tmp/virusdir/eicar.com: Eicar-Signature FOUND
/tmp/virusdir/eicar.com: moved to '/tmp/clamav_test/virus/eicar.com'
----------- SCAN SUMMARY -----------
Infected files: 1
Time: 0.001 sec (0 m 0 s)
Start Date: 2022:05:29 21:53:20
End Date: 2022:05:29 21:53:20
コマンドを見やすくフォールドすると次のようになります。
clamdscan \
--fdpass \
--infected \
--config-file=/tmp/clamav_test/clamd.localsocket.conf \
--move=/tmp/clamav_test/virus \
--log=/tmp/clamav_test/clamdscan.log \
/tmp/virusdir/
ここで使った clamdscan のオプションの意味は次の通りです。
オプション | 意味 |
---|---|
–fdpass | clamd デーモンの実行ユーザー(clamav)と違うユーザーでスキャンする場合に必要なオプション |
–infected | ウイルスであった場合のみ標準出力やログに表示 |
–config-file= | clamd デーモンにアクセスするための設定ファイル |
–move= | 検出したウイルスファイルの移動先ディレクトリー |
–log= | ログファイルの場所 |
/tmp/virusdir/ | /tmp/virusdir/ ディレクトリー内を再帰的にスキャンする |
ウイルスファイルが移動しています。
ls -l /tmp/virusdir/
合計 0
ls -l /tmp/clamav_test/virus/
合計 4
-rw-r--r-- 1 fumi fumi 69 5月 29 18:06 eicar.com
標準出力と同じものがログが書き込まれています。
cat /tmp/clamav_test/clamdscan.log
--------------------------------------
/tmp/virusdir/eicar.com: Eicar-Signature FOUND
/tmp/virusdir/eicar.com: moved to '/tmp/clamav_test/virus/eicar.com'
----------- SCAN SUMMARY -----------
Infected files: 1
Time: 0.001 sec (0 m 0 s)
Start Date: 2022:05:29 21:53:20
End Date: 2022:05:29 21:53:20
clamdscan の config ファイル
clamd.localsocket.conf は clamavのサーバーにアクセスするための設定ファイルです。
今回はホストのローカルソケットを使う設定でした。
ホストのTCPでサービスを受ける場合は設定が異なります。
例えばリモートホストclamavsv1のTCPを使う場合は次のようになります。
cat <<'EOF' >/tmp/clamav_test/clamd.remote.conf
TCPSocket 3310
TCPAddr clamavsv1
EOF
clamdscan \
--fdpass \
--infected \
--config-file=/tmp/clamav_test/clamd.remote.conf \
--move=/tmp/clamav_test/virus \
--log=/tmp/clamav_test/clamdscan.log \
/tmp/virusdir/
clamav の設定ファイル
ここまでは初期設定のままClamAVを使いました。
設定ファイルを編集することで動作をカスタマイズすることができます。
confファイルを直接編集することもできますが、Debianのパッケージを使う場合は
dpkg-reconfigure で設定できます。
freshclam の設定
freshclam を設定は次のコマンドで可能です。
dpkg-reconfigure clamav-freshclam
設定する項目は大まかに次のようなものがあります。
- ウイルスデータベースの更新方法
- データベースを取得するためのミラーサイトの選択
- プロキシの設定
- 一日当たりの更新回数
- データベースの更新後にclamd にプッシュするかどうか
- バイトコード データベースをダウンロードするかどうか
- プライベートミラーを使うか
- ログのローテーションをするか
ウイルスデータベースの更新方法
ウイルスデータベースの更新は、デーモンを起動するかcronを使うかを選択できます。
データベース ミラーサイトの選択
2022年5月現在、どのミラーサイトも Cloudflare, Inc. が管理する同じカリフォルニアのサーバーにアクセスします。
なぜかというとClamAVのミラーはCDN(コンテンツデリバリーネットワーク)に代わっているためです。
database.clamav.net 以外のdb.○○を設定しても database.clamav.net に置き換わりますが、初期設定で問題ありません。
下記の設定で大丈夫です。
DatabaseMirror db.jp.clamav.net
DatabaseMirror db.local.clamav.net
DatabaseMirror database.clamav.net
プロキシ サーバーの設定
プロキシを使う場合は設定が必要です。
HTTPProxyServer http://proxy.example.com
HTTPProxyPort 1234
HTTPProxyUsername myusername
HTTPProxyPassword mypass
一日当たりのデータベース更新回数
一日当たりの更新回数を12回以上に設定すると接続を拒否されることが多々あります。
clamd への更新通知
プッシュ通知はデータベースの変更を即座に clamd デーモンに反映させることができます。
clamd (clamav-daemon) がインストールされていないときにこの設定を有効にしていると次のようなエラーがログに記録されます。
ERROR: NotifyClamd: Can't find or parse configuration file /etc/clamav/clamd.conf
バイトコード データベース ダウンロード の有無
バイトコード データベースは必須です。
スキャンの精度を向上させるプラグイン モジュールです。
プライベート ローカルミラー を使うかどうか
社内や自宅で複数のClamAVを使う場合は、プライベートミラーを設置するべきでしょう。
同じ接続元から頻繁にデータベースの更新を試みると、接続を拒否されることがあります。
ログに以下のように記録されます。
WARNING: FreshClam previously received error code 429 or 403 from the ClamAV Content Delivery Network (CDN).
WARNING: You are still on cool-down until after: 2022-05-24 12:15:01
429 はToo Many Requests 、403 は Forbidden です。
ログを確認して更新できていない場合には更新頻度を12回/日より小さく設定します。
プライベート ミラーはfreshclamとApacheで簡単に作れるので、設置することをお勧めします。
プライベートミラーの作り方についてはhttps://www.fumibu.com/clamantivirus-private_mirror/を参照してください。
ログ ローテーション の有効/無効
ログのローテーションは、デフォルトで有効になります。
ログは重要なので、実運用ではlogrotate などで別途管理します。
初期状態で問題ない
以上のことから、普通に使う場合は初期状態で問題ありません。
/etc/clamav/freshclam.conf は以下のようになります。
DatabaseOwner clamav
UpdateLogFile /var/log/clamav/freshclam.log
LogVerbose false
LogSyslog false
LogFacility LOG_LOCAL6
LogFileMaxSize 0
LogRotate true
LogTime true
Foreground false
Debug false
MaxAttempts 5
DatabaseDirectory /var/lib/clamav
DNSDatabaseInfo current.cvd.clamav.net
ConnectTimeout 30
ReceiveTimeout 0
TestDatabases yes
ScriptedUpdates yes
CompressLocalDatabase no
Bytecode true
NotifyClamd /etc/clamav/clamd.conf
# Check for new database 24 times a day
Checks 24
DatabaseMirror db.jp.clamav.net
DatabaseMirror db.local.clamav.net
DatabaseMirror database.clamav.net
clamd (clamav-daemon)の設定
Debian の clamd の設定は以下のコマンドで行います。
dpkg-reconfigure clamav-daemon
次の項目を設定します。
- 設定ファイルを自動で管理するか
- リッスンするソケット形式(UNIXソケットかTCPソケット)
- メールを走査するか
- アーカイブを走査するか
- 走査する最大のサイズ
- 走査するディレクトリーの深度
- シンボリックを追いかけるか
- スレッドスキャンのタイムアウト
- デーモンのスレッド数
- 許可する接続待ち数
- syslog を使うか
- ログファイルの場所
- ログに時間を記録するか
- ログのローテーションをするか
- セルフチェックの間隔
- clamd を実行するユーザー
- clamd を実行するグループ
- バイトコードを読み込むか
- バイトコードに対するセキュリティーレベルの選択
- バイトコードの実行タイムアウト時間(ミリ秒)
一般的な使用では変更するところはほとんどありません。
LocalSocket (UNIX) か TCPSocket (TCP) か
リモートからの接続を許可する場合は、ソケット形式を LocalSocket (UNIX) から TCPSocket (TCP) に変更する必要があります。
リモートからの大量のデータをスキャンする場合は、大きなネットワーク負荷になる可能性があります。
また、セキュリティーの観点からLocalSocket (UNIX) を使うことが推奨されています。
TCPSocket を使う場面はDockerのコンテナ間での接続などに限られるでしょう。
LocalSocket (UNIX) の場合の /etc/clamav/clamd.conf は以下の通りです。
#Automatically Generated by clamav-daemon postinst
#To reconfigure clamd run #dpkg-reconfigure clamav-daemon
#Please read /usr/share/doc/clamav-daemon/README.Debian.gz for details
LocalSocket /var/run/clamav/clamd.ctl
FixStaleSocket true
LocalSocketGroup clamav
LocalSocketMode 666
# TemporaryDirectory is not set to its default /tmp here to make overriding
# the default with environment variables TMPDIR/TMP/TEMP possible
User clamav
ScanMail true
ScanArchive true
ArchiveBlockEncrypted false
MaxDirectoryRecursion 15
FollowDirectorySymlinks false
FollowFileSymlinks false
ReadTimeout 180
MaxThreads 12
MaxConnectionQueueLength 15
LogSyslog false
LogRotate true
LogFacility LOG_LOCAL6
LogClean false
LogVerbose false
PreludeEnable no
PreludeAnalyzerName ClamAV
DatabaseDirectory /var/lib/clamav
OfficialDatabaseOnly false
SelfCheck 3600
Foreground false
Debug false
ScanPE true
MaxEmbeddedPE 10M
ScanOLE2 true
ScanPDF true
ScanHTML true
MaxHTMLNormalize 10M
MaxHTMLNoTags 2M
MaxScriptNormalize 5M
MaxZipTypeRcg 1M
ScanSWF true
ExitOnOOM false
LeaveTemporaryFiles false
AlgorithmicDetection true
ScanELF true
IdleTimeout 30
CrossFilesystems true
PhishingSignatures true
PhishingScanURLs true
PhishingAlwaysBlockSSLMismatch false
PhishingAlwaysBlockCloak false
PartitionIntersection false
DetectPUA false
ScanPartialMessages false
HeuristicScanPrecedence false
StructuredDataDetection false
CommandReadTimeout 30
SendBufTimeout 200
MaxQueue 100
ExtendedDetectionInfo true
OLE2BlockMacros false
AllowAllMatchScan true
ForceToDisk false
DisableCertCheck false
DisableCache false
MaxScanTime 120000
MaxScanSize 100M
MaxFileSize 25M
MaxRecursion 16
MaxFiles 10000
MaxPartitions 50
MaxIconsPE 100
PCREMatchLimit 10000
PCRERecMatchLimit 5000
PCREMaxFileSize 25M
ScanXMLDOCS true
ScanHWP3 true
MaxRecHWP3 16
StreamMaxLength 25M
LogFile /var/log/clamav/clamav.log
LogTime true
LogFileUnlock false
LogFileMaxSize 0
Bytecode true
BytecodeSecurity TrustSigned
BytecodeTimeout 60000
OnAccessMaxFileSize 5M
TCPSocket (TCP) の場合の /etc/clamav/clamd.conf は以下の通りです。
#Automatically Generated by clamav-daemon postinst
#To reconfigure clamd run #dpkg-reconfigure clamav-daemon
#Please read /usr/share/doc/clamav-daemon/README.Debian.gz for details
TCPSocket 3310
# TemporaryDirectory is not set to its default /tmp here to make overriding
# the default with environment variables TMPDIR/TMP/TEMP possible
User clamav
ScanMail true
ScanArchive true
ArchiveBlockEncrypted false
MaxDirectoryRecursion 15
FollowDirectorySymlinks false
FollowFileSymlinks false
ReadTimeout 180
MaxThreads 12
MaxConnectionQueueLength 15
LogSyslog false
LogRotate true
LogFacility LOG_LOCAL6
LogClean false
LogVerbose false
PreludeEnable no
PreludeAnalyzerName ClamAV
DatabaseDirectory /var/lib/clamav
OfficialDatabaseOnly false
SelfCheck 3600
Foreground false
Debug false
ScanPE true
MaxEmbeddedPE 10M
ScanOLE2 true
ScanPDF true
ScanHTML true
MaxHTMLNormalize 10M
MaxHTMLNoTags 2M
MaxScriptNormalize 5M
MaxZipTypeRcg 1M
ScanSWF true
ExitOnOOM false
LeaveTemporaryFiles false
AlgorithmicDetection true
ScanELF true
IdleTimeout 30
CrossFilesystems true
PhishingSignatures true
PhishingScanURLs true
PhishingAlwaysBlockSSLMismatch false
PhishingAlwaysBlockCloak false
PartitionIntersection false
DetectPUA false
ScanPartialMessages false
HeuristicScanPrecedence false
StructuredDataDetection false
CommandReadTimeout 30
SendBufTimeout 200
MaxQueue 100
ExtendedDetectionInfo true
OLE2BlockMacros false
AllowAllMatchScan true
ForceToDisk false
DisableCertCheck false
DisableCache false
MaxScanTime 120000
MaxScanSize 100M
MaxFileSize 25M
MaxRecursion 16
MaxFiles 10000
MaxPartitions 50
MaxIconsPE 100
PCREMatchLimit 10000
PCRERecMatchLimit 5000
PCREMaxFileSize 25M
ScanXMLDOCS true
ScanHWP3 true
MaxRecHWP3 16
StreamMaxLength 25M
LogFile /var/log/clamav/clamav.log
LogTime true
LogFileUnlock false
LogFileMaxSize 0
Bytecode true
BytecodeSecurity TrustSigned
BytecodeTimeout 60000
OnAccessMaxFileSize 5M
この違いは次のようになります。
diff clamd.conf.unix clamd.conf.tcp
4,7c4
< LocalSocket /var/run/clamav/clamd.ctl
< FixStaleSocket true
< LocalSocketGroup clamav
< LocalSocketMode 666
---
> TCPSocket 3310
上記の設定項目にはデフォルト値が含まれています。
デフォルト値と大差ないものを取り除くと、LocalSocket (UNIX) の場合の clamd.conf は次のものでよいのです。
LocalSocket /var/run/clamav/clamd.ctl
LocalSocketGroup clamav
User clamav
DatabaseDirectory /var/lib/clamav
SelfCheck 3600
LogFile /var/log/clamav/clamav.log
LogTime true
BytecodeTimeout 60000
TCPSocket (TCP) の場合は次のものになります。
User clamav
DatabaseDirectory /var/lib/clamav
LogFile /var/log/clamav/clamav.log
LogTime true
BytecodeTimeout 60000
TCPSocket 3310
初期状態で問題ない
以上から clamd も一般的な使用では設定を変更する必要はありません。
ログの管理
実運用ではログを厳密に管理するべきです。
ファイルが大きくなりすぎないように、ログをローテーションすることが必要です。
ログのローテーションは logrotate で管理します。
logrotate の設定
/etc/logrotate.d/clamav-freshclam は以下のようになっています。
/var/log/clamav/freshclam.log {
rotate 12
weekly
compress
delaycompress
missingok
create 640 clamav adm
postrotate
if [ -d /run/systemd/system ]; then
systemctl -q is-active clamav-freshclam && systemctl kill --signal=SIGHUP clamav-freshclam || true
else
invoke-rc.d clamav-freshclam reload-log > /dev/null || true
fi
endscript
}
/etc/logrotate.d/clamav-daemon は以下の通りです。
/var/log/clamav/clamav.log {
rotate 12
weekly
compress
delaycompress
create 640 clamav adm
postrotate
if [ -d /run/systemd/system ]; then
systemctl -q is-active clamav-daemon && systemctl kill --signal=SIGHUP clamav-daemon || true
else
invoke-rc.d clamav-daemon reload-log > /dev/null || true
fi
endscript
}
いずれも、毎週ログファイルが更新され、古いものは圧縮されて12週分が保存される設定です。
logrotate はログファイルの更新に合わせて、cramdプロセスにシグナルを送って新しいファイルをつかみなおします。
これらの設定はDockerコンテナではうまく動作しないので注意が必要です。
logrotate はsystemd.timer または cron で定期的に実行されます。
まとめ
ClamAV には2つサーバー(daemon)があります。
ミラーサーを参照してデータベースを更新する freshclam とウイルスを走査する clamd です。
ClamAVには clamscan と clamdscan の2つのウイルス検索方法があります。
clamscan は clamd を使わずにその都度データベースを読み込んでウイルスを走査します。
clamdscan はclamd サーバーに依頼してウイルスを走査します。
ディストリビューションのパッケージを使うことで、手間をかけずにClamAVをインストールすることができます。
一般的な用途においてはインストールするだけで必要十分な状態になります。
ですが、ディストリビューションの ClamAV パッケージはしばらくすると古くなってしまいます。
セキュリティーを確保するためには、本家の最新バージョンを検討してもいいでしょう。