Linux管理・運用の基本
システム管理者のための実践ガイド
システム管理者のための実践ガイド
前回は、基本コマンド clamscan を使った手動スキャンの方法を解説しました。※定義ファイルは第1回で紹介した freshclam により、常に最新状態に保たれている前提で進めます。
実際に運用してみると「スキャンが始まるまでが遅い」と感じたのではないでしょうか。これは、実行のたびに巨大な定義データをメモリに読み込んでいるためです。この問題を解決し、スキャンを大幅に高速化させるのが、今回解説する clamd(Clam Antivirus Daemon) による常駐化です。
clamd.conf の必須設定とトラブル防止のポイントclamdscan の使い方結論から言うと、「定義ファイルの読み込み待ち」をゼロにするためです。
| 方式 | 実行コマンド | 特徴 |
|---|---|---|
| 単発実行 | clamscan |
実行のたびに定義をロード。メモリ消費は一時的だが起動が遅い。 |
| 常駐実行 | clamdscan |
常駐したclamdに検査を依頼。即座にスキャンが始まり高速。 |
clamd はあらかじめメモリ上に定義ファイルをロードして待機するため、スキャン指示を出した瞬間に検査が始まります。
設定ファイルはディストリビューションによって場所が異なりますが、基本的な書き方は共通です。
/etc/clamav/clamd.conf(Debian系)や /etc/clamd.d/scan.conf(RHEL系)を確認します。
# 初期設定の「Example」行はコメントアウトが必要
# Example
# 通信用のソケットファイル(clamdscanとのやり取りに使用)
LocalSocket /var/run/clamav/clamd.ctl
# 除外パス設定(パフォーマンスと安定性のために重要)
ExcludePath ^/proc/
ExcludePath ^/sys/
ExcludePath ^/dev/
# ログ出力先
LogFile /var/log/clamav/clamav.log
注意:ソケットディレクトリの権限
/var/run/clamavディレクトリが存在しない、あるいは権限が正しくない場合、デーモンが起動に失敗します。ディレクトリの所有者がclamavユーザーになっているか確認してください。
設定が完了したら、サービスとして起動・有効化します。
sudo systemctl start clamav-daemonsudo systemctl start clamd@scan注意:メモリ消費量について
clamdは常に1GB〜1.5GB程度のメモリを消費します。低スペックなVPS等ではメモリ不足(OOM Killer)に注意が必要です。
clamd が起動していれば、専用のコマンド clamdscan が使えます。
まずは設定ファイルが読み込まれる /etc あたりをスキャンしてみましょう。
sudo clamdscan /etc
clamd が正しく起動していれば、読み込み待ちがなく即座にスキャンが開始されます。
Tips: clamdに接続できない場合
Can't connect to clamdと表示される場合は、サービスが停止しているか、設定ファイルのLocalSocketパスがclamdscanの想定と食い違っている可能性があります。systemctl statusでサービスの状態を確認しましょう。
sudo clamdscan -r --multiscan /var/www/html
--multiscan: デーモンのマルチスレッド機能を利用し、並列でスキャンします。補足:clamdscanと削除操作
clamdscanは安全性の観点から、--removeオプションによるファイル削除が制限される場合があります。確実な処理を行いたい場合は、検知後に手動で対応するか、運用設計を慎重に行う必要があります。
sudo clamdscan --no-summary /home/user/upload
--no-summary: 最後に表示される長い統計情報を省略し、検知結果のみを確認しやすくします。第3回では、実務運用の要となる clamd による高速化について解説しました。
clamd は定義ファイルを常駐させ、スキャン開始をスムーズにする。clamscan ではなく clamdscan を使うのが基本。この記事で、ClamAVを「入れただけ」の状態から「実務で使える」状態へ一歩進めることができましたでしょうか。
しかし、手動でコマンドを打つだけでは運用は回りません。深夜や早朝に自動で、かつサーバーに優しく実行させるにはどうすればよいでしょうか。
次回は「運用編・定期スキャン」として、パフォーマンスを落とさずにスキャンを自動化するスケジュール設定(nice/ioniceの活用)について解説します。
ご覧いただきありがとうございました。