Mirroring the Virus Database

Luca Gibelli
日本語訳:池田 雅喜 (masaki at orange.co.jp)

ClamAVウィルスデータベースの提供に興味を持つ人へのガイドライン。

1. はじめに

1.1 この文書について

この文書の最新版は、常に [http://www.clamav.net/doc/mirrors/] にあります。
これ以降を読む前に、 あなたが最新バージョンを読んでいるかどうかをチェックしてください。

訳注:
この日本語訳は、上記URLにある 17-Apr-2004 04:56付けのTXTファイルを元に翻訳しています。
原文の更新に追い付いていない可能性もありますので、 この翻訳文書を参照する前に、 原文が更新されていないかどうかを確認してください。
また、この日本語訳には多少意訳も含まれています。

1.2 誰がウィルスデータベースに責任を持つのか

virusdbチームは、活動中の新規ウィルスをチェックし、 ウィルスデータベースを更新しています。

更新は頻繁に行われています。(多くの場合週に3回以上は更新されています) もし、あなたがウィルスデータベースの更新を知らせて欲しいのであれば、 lists.sourceforge.netのclamav-virusdb メーリングリストへ登録してください。

virusdbチームがウィルスデータベースを更新する度に、 メーリングリストへ変更点が投稿されます。

こちら [ http://lists.sourceforge.net/mailman/listinfo/clamav-virusdb ] にclamav-virusdbメーリングリストへの登録方法と、 過去のアーカイブがあります。

もし、virusdbチームへ連絡を取りたいのであれば、 virus-team at clamav.net 宛てにメールを送ってください。

1.3 ウィルスの報告

もしあなたがClamAVで検出できない新しいウィルスを発見したら、 virusdbチームへ送ってください。
virusdbチームは送られたウィルスを調査し、 データベースを更新します。 それにより、全てのClamAVユーザが恩恵を蒙る事ができます。

新しいウィルスを報告するには2つの方法があります。

  1. こちらのフォーム から送る。(おすすめ)
  2. 宛にメールで送る。

ClamAVのメーリングリストや、 開発者のメールアドレスへは決して送らないでください。

1.4 最新のウィルスデータベースの入手法

アンチウィルスで最も重要なのは、 (データベースを)更新することです。 ClamAVでは、freshclamという自動的に更新するツールがあります。

freshclamはfreshclam.confのDatabaseMirrorに列挙されたホストへ接続します。 最初に書かれたホストへ接続できない場合は、 10秒後に次に書かれたホストへ接続します(以下同様)

freshclamが新しいデータベースを発見すると、 それをダウンロードし、 (もし実行中であれば)clamdへnotifyを送りデータベースを再読み込みさせます。

注意点としては、ClamAVの動作しているマシンは、 インターネット上のサイトへ80番ポートで直接、または、 プロキシー経由で接続できる必要があります。 透過型プロキシー(トランスペアレントプロキシー)の中には、 キャッシュの問題があるものもある事が知られています。 もしこれらの問題があるのであれば、バグレポートをする前に、 プロキシーの設定を見直してみてください。

2. データベースのミラー

2.1 ミラーに必要な要件

ワーム(ウィルス)の増殖を防ぐために、 頻繁にアップデートを行う事が必要です。 ClamAVユーザには10分に一度更新するようfreshclamを設定している人も少なくありません。 (訳注:ClamWinなどは最短の設定で1時間間隔ですし、 アクセスログを見ても10分に一度という設定にしている人ってそれ程いないような感じですが・・・

指数的なClamAVユーザの増加に伴い、 ウィルスデータベースを提供しているサーバも簡単に過負荷になってしまいます。

ミラーなしで、メインサイトのみで月に100GBにもなっています。 (2003年5月時点)

2004年2月には11ヶ所のミラーが全て月120GBに達しています。 急激なトラフィックの増加に合わせて、 我々は常により多くのミラーを必要としています。

freshclamはデータベースを [http://database.clamav.net/] からダウンロードします。

database.clamav.netはラウンドロビンにより、 データベースミラーへのトラフィックを均等に振り分けます。 ラウンドロビンにより、ミラーリストの変更がリアルタイムに行えますし、 もしミラーが停止、または、更新ができなくなった場合には、 直ちにミラーリストから削除する事ができ、 ユーザの介入は不要です。

2004年3月以降、 ユーザのIPアドレスを見て最も近いミラーへ転送するよう試みています。

下記を参照してください。

いくつかの情報は、Walter Hop(from transip.nl)より提供され、 database.clamav.net.の名前解決に利用されています。

我々のDNSサーバはCNAMEで以下の名前に答える事ができます。

db.europe.clamav.net, db.america.clamav.net, db.asia.clamav.net or db.other.clamav.net.

我々はこの方法が正確ではない事を知った上で、 そのリスクを許容しています。

2.2 ミラーに要求される事

我々は高速で信頼性の高いミラーを必要としています。 ミラーは以下の条件を提供する必要があります。

ミラーサーバへのシェルアクセスを許されれば、 より感謝します(ただし必須ではありません)。 FTPでのアクセスにはもう対応しません。 virusdbチームは、そのアカウントをデータベースの更新のためだけに使います。

2.3 ミラーサイト構築の手順

以下の手順に従ってください

  1. [http://database.clamav.net/]および[http://db.*.clamav.net] でアクセスできるよう、 バーチャルホスト設定を行ってください。
    その他追加の名前を設定しても構いませんが必須ではありません。 もしネームベースのバーチャルホストを使用しているのであれば、 /etc/hostsに
    (ミラーサーバのIPアドレス)   database.clamav.net
    
    という行を追加し、http://database.clamav.net/へアクセスする事により、 ミラーの設定が正しくできているかどうかチェックをする事ができます。
    http://httpd.apache.org/docs/mod/core.html#serveralias こちらに情報があります。
    以下は、簡単な設定例です。
      <VirtualHost 10.1.2.3> 
      ServerAdmin john@clamav.foo.com 
      DocumentRoot /home/users/clamavdb/public_html 
      ServerName database.clamav.net
      ServerAlias db.*.clamav.net
      ServerAlias clamav.foo.com
      </VirtualHost>
    
    HTTP redirect(RedirectPermanent)では不十分です! freshcramはまだリダイレクトをサポートしていません。
  2. ログインアカウントclamavdbを作成し、 バーチャルホストのドキュメントルートへの書き込み権限を与えてください。
    パスワード認証はdisableにしても構いません。
      # passwd -l clamavdb
    
    clamavdbユーザのシェルは/bin/shまたは/bin/bashでなくてはいけません。 そうでなければsshの公開鍵に関連付けられたコマンドが実行できません。 詳しくは authorized_keys_noshell ファイルを見てください。 sshの公開鍵に関連付けられているコマンドは、~/bin/clam-clientsync だけです。 我々は、このスクリプトを実行するだけで、他には何も行いません。
    しかしながら、シェルアクセスを許してもらえるのであれば、 それはよりありがたく思います。 その場合は、authorized_keys_shell を代わりに使ってください。 これには Luca Gibelli と Tomasz Papszun の公開鍵が含まれています。
  3. 以下のファイルをダウンロードしてください。 署名の検証は以下のように行ってください
      $ gpg --verify authorized_keys_noshell.sig
      authorized_keys_noshell
      $ gpg --verify authorized_keys_shell.sig
      authorized_keys_shell
    
    私(訳注:Luca Gibelli)のPGP公開鍵は、 多くのキーサーバにありますし、ClamAVのウェブサイトにもあります。 電話で確認する事もできます。まずは電子メールでコンタクトをしてください。
  4. もし我々にシェルアクセスを許したくないのであれば、 authorized_keys_noshell ファイルを
      $ cp authorized_keys_noshell ~/.ssh/authorized_keys
    
    我々にシェルアクセスを許してくれるのであれば代わりにauthorized_keys_shellを
      $ cp authorized_keys_shell ~clamavdb/.ssh/authorized_keys
    
    ~clamavdb/.ssh/authorized_keys へコピーしてください。
  5. clam-clientsync を ~clamavdb/bin/ へコピー
    clam-clientsync.conf を ~clamavdb/etc/ へコピー
    chmod 600 ~clamavdb/etc/clam-clientsync.conf
    chmod 744 ~clamavdb/bin/clam-clientsync
    全てのファイルはユーザclamavdbの所有としてください。
    clam-clientsyncは"lockfile"プログラムを必要としています。 この"lockfile"はprocmailパッケージに含まれています。 これ以降の設定を行う前に、 "lockfile"が存在するかどうかを確かめておいてください。
  6. サーバの詳細(アカウント情報、IPアドレス、国、バーチャルホストのエリアス名、 回線の帯域、管理者のメールアドレス)を へメールしてください。
    あなたのサーバが要件を満たしていれば、我々のマスターサーバである rsyncX.clamav.net へのログインIDとパスワードが与えられます。
  7. ~clamavdb/etc/clam-clientsync.confを修正します。
    ドキュメントルートが/home/users/clamavdb/public_htmlで、 あなたのログインIDがfoo、パスワードがguessmeであれば、 clam-clientsync.confは以下のようになります。
      TO=/home/users/clamavdb/public_html
      RSYNC_USER=foo
      RSYNC_PASSWORD=guessme
      EXCLUDE="--exclude local_*"
    
  8. パケットフィルター (訳注:FireWallやルータも含めて) の設定を変更し、外からミラーサーバへの22/tcpのコネクション、 ミラーサーバから外への873/tcpと873/udpを許可してください。
    より強固な設定にするのであれば、 rsync.clamav.net[から|へ]の接続だけを許してください。
    rsync.clamav.netはラウンドロビンで我々のマスターミラーサーバを示しています。 このアドレスの変更はclamav-mirrorsメーリングリストで告知されます。
  9. あなたの会社のロゴをミラーに置く事は歓迎されます。 ドキュメントルートに"local_logo.png"という名前で置いてください。 index.htmlは全てのミラーサイトで共通です。 ドキュメントルートにある"local_*"にマッチしない名前のファイルは、 ミラーの同期を取った時に削除されます。
  10. lists.sourceforge.netのclamav-mirrorsメーリングリストに登録してください。 詳しくは [ http://lists.sourceforge.net/mailman/listinfo/clamav-mirrors] こちら。
    登録には認証が必要です。 我々はあなたのサーバ情報を確認した後、認証します。

これら全ての手順が終了すると、 あなたのサーバのIPアドレスはラウンドロビンレコードに追加され、 ミラーリストページにリストアップされます。


2.4 Statistics

Although it's not required, we really appreciate if you 
can make access statistics of your mirror available to 
us. They should be available at 
http://your-mirror-host-name/local_stats/ and they must 
be protected with login and password. You should use 
the same login and password you are using in your 
~clamavdb/etc/clam-clientsync.conf file.

If possible, please tell your statistics generator to 
ignore requests made by the "ClamAV-MirrorCheck" agent. 

If you are using Webalizer, you can add the following 
directive to your conf. file:

HideAgent ClamAV-MirrorCheck

If you are using AWStats, you can add this one instead:

SkipUserAgents="ClamAV-MirrorCheck"

Refer to your stats generator's manual for more info.

2.5 Admin's duty

* Scheduled downtimes should be announced on the 
  clamav-mirrors mailing-list in advance.

* IP address changes should be notified in advance too. 

* Changes in the ssh host public key of the mirror host 
  should be announced on the clamav-mirrors mailing-list.

* It is essential to be able to contact the sysadmin 
  responsible for the mirror server and get a quick 
  response. Whenever a problem with a mirror occurs we 
  need to immediately find out its cause and act consequently.

3 Notes for sigmakers

New sigmakers should send their ssh2 public key to luca 
at clamav.net . Their public key will be added to 
rsyncX.clamav.net authorized_keys (after being verified).

Sigmakers can upload a new database to either 
rsync1.clamav.net or rsync2.clamav.net using a 
(scp|sftp|rsync)-only account. 

The new database won't be available to other people 
immediately. First, sigmakers have to notify the 
rsyncX.clamav.net server that a new database is 
available. 

Here is the step-by-step procedure to release a new 
database version and propagate it around the world:

1. Assume your ssh private key is ~/.ssh/id_rsa and 
  you've just built a new daily.cvd. Assume you want to 
  use rsync1.clamav.net

2. In order to upload the new database, you have to run:
  $ rsync -tcz --stats --progress -e ssh -i 
  ~/.ssh/id_rsa daily.cvd 
  clamupload@rsync1.clamav.net:public_html/

3. Next, you need to notify rsync1.clamav.net that a 
  new database is available:
  $ ssh rsync1.clamav.net -i ~/.ssh/id_rsa -l clamavdb 
  sleep 1

4. rsync1.clamav.net will verify the digital signature 
  of the newly uploaded database using sigtool -i. If 
  it finds an error, it will refuse to distribute the 
  database to other mirrors.

5. rsync1.clamav.net will copy the previously uploaded 
  database to its rsync shared directory.

6. rsync1.clamav.net will generate the legacy 
  viruses.db/viruses.db2 databases (together with their 
  respective MD5 checksums)

7. rsync1.clamav.net will notify every mirror that a 
  new database is available

8. Every mirror will rsync its copy of the database 
  from rsync1.clamav.net::clamavdb (only mirrors can 
  access the rsync server at rsync1.clamav.net, it's 
  password protected)

As a fallback, every six hours, either 
rsync1.clamav.net or rsync2.clamav.net force an update 
on every mirror. 

If rsync1 can't reach rsync2 or viceversa, the 
automatic update doesn't take place. This is done to 
avoid propagating an old database.

To avoid conflicts, sigmakers should use rsync1 by 
default and if it fails, switch to rsync2. Whenever a 
sigmaker uses rsync2, he should announce it on the 
clamav-team mailing-list so that every other sigmaker 
uses rsync2 too, until the issues with rsync1 are over. 

4 Mirror status

Every mirror is continously monitored to ensure that 
every ClamAV user gets the latest virus database.

Every six hours we upload a file called timestamp on 
every mirror. Every hour we choose a random mirror and 
check that timestamp is fresh. If the file is one day 
old or unavailable, the mirror if marked as "old" and the 
ClamAV team receive a warning. If the situation 
persists for two days, the mirror is temporarily 
removed from the list. 

You can view the current status of every ClamAV 
database mirror at [http://www.clamav.net/mirrors.html] . 

ClamAVのページへ戻る
Translation by Masaki Ikeda
mailto:masaki@orange.co.jp