■パッケージ(Debian/Ubuntu) clamav - コマンドラインインターフェース clamav-base - 基本パッケージ clamav-daemon - スキャナデーモン clamav-docs - ドキュメント clamav-freshclam - ウイルスデータベース更新ユーティリティ clamav-milter - sendmail 統合 clamdscan - clamscan に似た clamd のコマンドライン クライアント clamav-testfiles - テストファイル libclamav-dev - 開発ファイル libclamav9 - ライブラリ libclamunrar9 - unrar サポート ※「9」の部分はClamAVのバージョンによる。 ■スキャンの種類 clamd 実行スレッド ウィルスデータベースのロードタイミング ①clamscan 不要 シングルスレッド 実行時 ②clamdscan 必要 マルチスレッド clamd起動時 ③On-Access Scanning ※clamonacc がカーネルの fanotify 通知機能によりファイルシステムの変化を検知し、 ウイルススキャナーデーモンの clamd にウイルススキャン判定を依頼する。 ★基本はclamscanで定期スキャン。追加するとすれば、On-Access Scanning。これでいいかな。 ■インストール apt install clamav clamav-daemon ls -l /var/lib/clamav/ main.cvd daily.cvd systemctl restart clamav-daemon.service ※libclamunrar11 は、圧縮された RAR ファイルのスキャンが必要な場合にいるが、 完全にフリーでなくライセンスの制限がある。リバースエンジニアリングや再配布など しないなら問題なさそうだが商用利用など100%問題ないとはいえないので、使わない。 https://www.win-rar.com/winrarlicense.html?&L=0 ■AppArmor UbuntuならAppArmor有効にしていれば、clamdのプロファイルをaa-complain clamdしないといけない。 ■ウイルス定義を手動で更新 systemctl stop clamav-freshclam freshclam systemctl enable --now clamav-freshclam ■ウイルススキャンする ・特定のファイルをウイルススキャンする clamscan /path/to/file ・特定のディレクトリのスキャンとログ保存 clamscan -r /path/to/file -l /path/to/logfile ・感染したファイルをスキャンして削除する clamscan /path/to/file --remove ・特定のフォルダを除外する clamscan -r --exclude-dir=^/sys/ --exclude-dir=^/proc/ --exclude-dir=^/dev/ / -r 特定のディレクトリのスキャン -l ログ保存 --exclude は、ファイルを名前やパターンに基づいて除外します。 --exclude-dir は、ディレクトリを名前やパスに基づいて除外します。 --remove 感染したファイルを削除する ※感染していると特定されたファイルを完全に削除するため、慎重に使用してください。 ----------------------------------------------------------- clamdscan -m --fdpass / -m マルチスレッドで実行します --fdpass clamdscanコマンドの実行ユーザーとclamdデーモンの実行ユーザーが異なる場合に必要 ■各設定ファイル(On-Access Scanningはなしの場合) ・freschclam.conf ・Clam AntiVirus のウィルスデータベース更新ツールの設定 ・一般的なオプション ★「Checks」以外は基本的に変更しなくてOK LogTime 時間を記録する LogRotate ログローテーションする。 LogFileMaxSizeのサイズに達するとfreshclam自身がする。 Ubuntu Server 24.04 ではLogFileMaxSizeが0(無制限)なので 実質freshclam自身のローテーションはない。 Notifyclamd ウィルスデータベース更新時に実行中のclamdに再ロードするように通知する。 DatabaseOwner ウィルスデータベースのオーナー Checks 1日あたりのデータベースチェック回数 ※プロキシを使っている場合は、以下確認が必要 HTTPProxyServer、HTTPProxyPort、HTTPProxyUsername、および HTTPProxyPassword ・clamd.conf ・ClamAVデーモンと関連ツールの動作を設定 ・一般的なオプション ★ファイルサイズは気になる。そこはClamAVのデフォルトにするか。あとはExcludePath ぐらいかないじるのは。 LogTime 時間を記録する LogClean クリーンなファイルをログに記録する LogRotate ログローテーションする。 LogFileMaxSizeのサイズに達するとfreshclam自身がする。 Ubuntu Server 24.04 ではLogFileMaxSizeが0(無制限)なので 実質freshclam自身のローテーションはない。 MaxScanSize 指定したファイルサイズ以上の圧縮ファイルをスキップします (Ubuntu では「100M」の設定。デフォルトは「400M」) MaxFileSize 指定したファイルサイズ以上のファイルをスキップします (Ubuntu では「25M」。デフォルトは「100M」) User clamdの実行ユーザ。全ファイル検索するにはroot ExcludePath 一致するファイルとディレクトリをスキャンしません(ExcludePath ^/proc/) ■On-Access Scanning(リアルタイムスキャンもする場合) ・clamonacc On-Access Scanning では、clamdとclamonacc(clamav-clamonacc.service) を起動させないといけない ・clamd.conf OnAccessIncludePath リアルタイムスキャンの対象ディレクトリを指定(/home) ※これは正規表現の指定ではなさそう OnAccessPrevention ウイルス検知したファイルへのアクセスをブロックする OnAccessExtraScanning ファイル作成、移動時のスキャンを実施する。 これを有効にしないと、ファイルにアクセスがあったときのみのスキャンとなる。 OnAccessExcludeUname オンアクセス スキャン クライアントを使用するときにユーザー名による除外が可能になります。 オンアクセススキャンでは除外設定としてどれか設定しないといけないが、 clamdインスタンスUIDまたはunameを除外するのがよいかと。なので、OnAccessExcludeUname とした。 ・sysctl fs.inotify.max_user_watches リアルタイムスキャンの対象ファイルがこの上限を超えるとエラーが発生するよう。 ・logrotate clamonaccのログローテの設定がデフォルトで入らない。なので、clamav-daemon などほかのファイルからコピーして作成する。 ローテ後(postrotate)にclamav-clamonaccにHUPを送ってもダメだった。なので、restart にした。 # cat /etc/logrotate.d/clamav-clamonacc /var/log/clamav/clamonacc.log { rotate 12 weekly compress delaycompress create 640 root root postrotate systemctl restart clamav-clamonacc endscript } #