この記事を読むことで、以下の知識を得ることができます。
- ClamAVのウイルス定義ファイル(シグネチャ)の重要性
- 公式の更新ツール
freshclamを使用した自動および手動での更新方法 freshclam.conf設定ファイルによるカスタマイズ方法- インターネットに接続できない環境でのオフライン更新手順
- 複数台のClamAVサーバーを効率的に運用するためのプライベートミラーの構築方法
- 定義ファイル更新時に発生する一般的な問題とそのトラブルシューティング
オープンソースのアンチウイルスソフトウェアであるClamAVは、多くのシステムでマルウェア対策の重要な役割を担っています。その効果を最大限に引き出すためには、ウイルス定義ファイル(シグネチャとも呼ばれます)を常に最新の状態に保つことが不可欠です。この記事では、ClamAVの定義ファイルを更新するための様々な方法を、初心者から上級者まで幅広く理解できるよう、詳細に解説していきます。
ClamAV定義ファイルの基本
ClamAVのウイルススキャンは、定義ファイルに記述されたシグネチャとファイルを比較することで行われます。新しい脅威が日々出現するため、定義ファイルが古いままでは最新のマルウェアを検知できません。
定義ファイルは主に以下の3つのファイルで構成されています。
- main.cvd: 比較的変更頻度の低い、基本的なウイルス定義ファイルです。
- daily.cvd: 毎日更新される、新しい脅威に対応するための定義ファイルです。
- bytecode.cvd: バイトコード署名を含み、より複雑な脅威を検出するために使用されます。
これらのファイルは、デフォルトでは /var/lib/clamav/ (Linux環境) などのディレクトリに保存されます。 これらのファイルを最新に保つための公式ツールが freshclam です。
freshclamによる定義ファイルの更新
freshclam は、ClamAVの定義ファイルをインターネット経由で公式配布サーバーからダウンロードし、更新するためのコマンドラインツールです。 主に「デーモンモードによる自動更新」と「手動実行」の2つの方法で利用されます。
1. 自動更新(デーモンモード)
freshclam をデーモンとしてバックグラウンドで常時実行させることで、定期的に更新をチェックし、定義ファイルを自動で最新の状態に保つことができます。
デーモンを起動するには、以下のコマンドを実行します。
# freshclam -d -c 12 上記の例では、-d オプションでデーモンモードを指定し、-c 12 で1日に12回(約2時間おきに)更新をチェックするように設定しています。 システム起動時に自動で開始させたい場合は、systemd のサービスとして登録したり、起動スクリプトに追記したりします。
2. 自動更新(cronを使用)
デーモンとして常駐させる代わりに、cronジョブを使って定期的に freshclam コマンドを実行する方法もあります。 この方法は、より柔軟なスケジュール管理が可能です。
例えば、毎時15分に更新を実行し、ログをファイルに出力する場合は、/etc/crontab に以下のように記述します。
15 * * * * clamav /usr/bin/freshclam --quiet -l /var/log/clamav/freshclam.log clamav ユーザー権限で実行することが推奨されます。 また、ログファイルへの書き込み権限を適切に設定する必要があります。 3. 手動更新
即座に定義ファイルを更新したい場合は、手動で freshclam コマンドを実行します。
# sudo freshclam インストール直後や、長期間オフラインだったサーバーをオンラインにした際などに、まず手動で更新を行うのが一般的です。
エラー対処法: freshclam の自動更新サービスが既に実行中の場合、手動で freshclam を実行すると「log file is locked」といったエラーが発生することがあります。 その場合は、一度サービスを停止してから手動更新を行い、完了後に再度サービスを開始します。
# systemctl stop clamav-freshclam
# sudo freshclam
# systemctl start clamav-freshclam freshclam.conf 設定ファイルの詳細
freshclam の動作は、設定ファイル /etc/clamav/freshclam.conf (パスは環境により異なる場合があります) によって細かく制御できます。 主要な設定項目について解説します。
| ディレクティブ | 説明 | 設定例 |
|---|---|---|
Example | この行は必ずコメントアウト(行頭に#)してください。有効になっていると freshclam が動作しません。 | #Example |
DatabaseMirror | 定義ファイルのダウンロード元となるミラーサーバーを指定します。以前は地理的に近いサーバー(例: db.jp.clamav.net)を指定することが推奨されていましたが、現在はCDN(コンテンツ配信ネットワーク)の database.clamav.net がデフォルトであり、自動的に最適なサーバーへ接続されるため、変更の必要は基本的にありません。 | DatabaseMirror database.clamav.net |
Checks | 1日に更新をチェックする回数を指定します。デーモンモード(-dオプション)で実行する場合に有効です。デフォルトは12です。 | Checks 24 |
LogFile | ログファイルのパスを指定します。 | LogFile /var/log/clamav/freshclam.log |
LogTime | ログにタイムスタンプを記録するかどうかを設定します。 | LogTime yes |
LogSyslog | ログをsyslogに出力するかどうかを設定します。 | LogSyslog yes |
NotifyClamd | 定義ファイル更新後、稼働中のclamd(スキャンデーモン)に通知し、新しい定義ファイルをリロードさせるための設定です。clamd.confのパスを指定します。 | NotifyClamd /etc/clamav/clamd.conf |
HTTPProxyServer | プロキシサーバー経由でインターネットに接続する場合に、プロキシサーバーのアドレスを指定します。 | HTTPProxyServer proxy.example.com |
HTTPProxyPort | プロキシサーバーのポート番号を指定します。 | HTTPProxyPort 8080 |
オフライン環境での手動更新
インターネットに接続されていない閉域網(スタンドアロン環境)のサーバーでも、手動で定義ファイルを更新することが可能です。
手順は以下の通りです。
- 定義ファイルのダウンロード:
インターネットに接続できる別のPCで、以下のURLから最新の定義ファイルをダウンロードします。http://database.clamav.net/main.cvdhttp://database.clamav.net/daily.cvdhttp://database.clamav.net/bytecode.cvd
- ファイルの転送:
ダウンロードした3つの.cvdファイルを、USBメモリなどの媒体を使用して、更新対象のオフラインサーバーに転送します。 - ファイルの配置:
転送したファイルを、ClamAVの定義ファイルが格納されているディレクトリ(通常は/var/lib/clamav/)にコピーまたは移動させます。 既存の古いファイルは上書きしてください。
この作業を定期的に行うことで、オフライン環境のセキュリティを維持できます。スクリプトを作成して、共有フォルダからのコピーを自動化することも有効な手段です。
プライベートミラーの構築と利用
組織内に多数のClamAVサーバーが存在する場合、各サーバーが個別にインターネットへ定義ファイルをダウンロードしに行くと、ネットワーク帯域の浪費や、公式ミラーサーバーへの過剰なアクセスにつながります。 公式のCDNは、短時間に多数のアクセスがあると、一時的に接続を拒否(HTTPステータスコード 429 “Too Many Requests” や 403 “Forbidden”)することがあります。
このような問題を解決するため、プライベートミラー(ローカルミラー)を構築することが強く推奨されます。 プライベートミラーは、組織内の1台のサーバーが代表して公式サーバーから定義ファイルを取得し、それを組織内の他のClamAVサーバーへ再配布する仕組みです。
プライベートミラーの構築方法
プライベートミラーの構築には、Webサーバー(ApacheやNginxなど)と、定義ファイルを定期的に取得するための freshclam または cvdupdate ツールが必要です。
cvdupdateツールの利用:cvdupdate は、公式ミラーと同様に差分ファイル(.cdiff)も提供できるミラーを構築するためのPythonベースのツールです。 これにより、クライアント側の更新時のダウンロード量をさらに削減できます。
ここでは、Webサーバーと freshclam を使った基本的な構築手順の概要を説明します。
- Webサーバーの準備:
ミラーサーバーにApacheなどのWebサーバーをインストールし、外部からアクセス可能なディレクトリ(ドキュメントルートなど)を用意します。 - freshclamによる定義ファイルの取得:
ミラーサーバー上でfreshclamを実行し、/var/lib/clamav/に最新の定義ファイルを取得します。 - Webサーバーへの配置:
取得したmain.cvd,daily.cvd,bytecode.cvdを、Webサーバーのドキュメントルートにコピーまたはシンボリックリンクを設置します。 - 定期的な更新:
cronなどを使って、ミラーサーバー上のfreshclamを定期的に実行し、定義ファイルを常に最新に保ちます。
クライアント側の設定
プライベートミラーを利用するクライアント側のサーバーでは、freshclam.conf を編集して、定義ファイルの取得先をプライベートミラーに向けます。
# 公式ミラーの行をコメントアウト
#DatabaseMirror database.clamav.net
# プライベートミラーのURLを指定
PrivateMirror http://your-private-mirror.internal/ PrivateMirror ディレクティブを使用して、構築したプライベートミラーのURLを指定します。 これにより、クライアントは公式サーバーではなく、内部のミラーサーバーから定義ファイルを取得するようになります。
トラブルシューティング
定義ファイルの更新時には、いくつかの一般的な問題が発生することがあります。
問題1: CDNによるブロック (Error 429/403)
原因: 短時間に何度も freshclam を実行するなど、公式のCDNに対して過剰なアクセスを行うと、IPアドレスが一時的にブロックされることがあります。 これは特に、NAT環境下で多数のサーバーが同じグローバルIPアドレスからアクセスする場合に発生しやすくなります。
対策:
freshclamの実行頻度を下げてください。1時間に1回以上実行しないことが推奨されています。- 可能であれば、前述のプライベートミラーを構築し、インターネットへのアクセスを集約してください。
- ClamAVのバージョンが古い場合もこの問題が発生することがあるため、最新バージョンへのアップデートを検討してください。
問題2: プロキシ環境での接続失敗
原因: プロキシサーバーを経由しないと外部へアクセスできない環境で、freshclam.conf のプロキシ設定が正しく行われていない。
対策: freshclam.conf ファイルに、HTTPProxyServer と HTTPProxyPort の設定が正しく記述されているか確認してください。
問題3: ファイルのパーミッションエラー
原因: freshclam を実行するユーザー(通常は clamav)が、定義ファイルディレクトリ(/var/lib/clamav/)やログファイルへの書き込み権限を持っていない。
対策: chown や chmod コマンドを使い、ディレクトリとファイルの所有者とパーミッションを適切に設定してください。
# chown -R clamav:clamav /var/lib/clamav/
# chown clamav:clamav /var/log/clamav/freshclam.log まとめ
ClamAVのウイルス定義ファイルの更新は、システムのセキュリティを維持するための根幹となる作業です。この記事では、基本的な freshclam の使い方から、設定ファイルのカスタマイズ、オフライン環境での対応、そして大規模環境向けのプライベートミラー構築まで、網羅的に解説しました。
環境に応じた最適な更新方法を選択し、設定することで、ClamAVを安定して、かつ効率的に運用することが可能になります。特に複数のサーバーを管理している場合は、公式ミラーへの負荷を軽減し、安定した運用を実現するために、プライベートミラーの導入を積極的に検討することをお勧めします。