2007年2月20日追記
注:Ver. 0.90からスクリプトアップデート(差分更新)の仕組みが導入されました。
これにより、データベースの持ち方が変更になっています。
0.90以降を使用する場合、ローカルミラーを作るのは推奨しません
ローカルミラーではなく、プロキシーを活用される事を勧めます。
なお、既にローカルミラーを使用している場合は、ミラーするホストでは freshclam.conf に ScriptedUpdates No と設定してください。
おおげさに「作り方」とか書いていますが、 実はとても簡単です。
ローカルミラーを作るために必要な条件です。
freshclamを稼働させると、たとえばDebianの場合 /var/lib/clamav
というディレクトリに、main.cvd, daily.cvd という2つのファイルが
公式データベースから取得されて来ます。
ClamAVのウィルスデータベースはこの2つのファイルだけです。
この2つのファイルがクライアントで取得できれば良いという事になります。
クライアントでは、データベースサーバのルートディレクトリにあると仮定する main.cvd, daily.cvd という2つのファイルを取得しに行くだけですので、 後はクライアントが参照する先のサーバをローカルのサーバにすれば良い事になります。
Debian標準であれば、freshclamで取って来たファイルは /var/lib/clamavに、 httpdのドキュメントルートは /var/www になりますから、 この場合だと
# ln -s /var/lib/clamav/main.cvd /var/www/main.cvd # ln -s /var/lib/clamav/daily.cvd /var/www/daily.cvd
とすればおしまいです。
freshclam/ドキュメントルートが違うディストリビューション等では、
それぞれ適切なパスにしてください。
Windowsでも原理は一緒ですが、設定は良くわかりません(^^;
基本的にはClamWinで取得したmain.cvd, daily.cvdを
ルートディレクトリにあるように見えるように何らかの設定を行えば良いハズ。
/etc/clamav/freshclam.conf というファイルに
DatabaseMirror という行があると思います。
この行はデフォルトでは database.clamav.net になっていると思いますが、
ここをローカルのミラーサーバにして下さい。
後はfreshclamを立ち上げ直せばローカルのミラーからデータベースを取得するようになります。
ここで注意しなくてはいけないのは、
この設定はミラーサーバにはやってはいけない
という事です。
当り前の話ですが、ミラーサーバ自身は公式ミラーから新しいデータベースを持って来ないと意味がありません(^^;
Windowsで動く、ClamWinを使っている場合は、 OpenClamWinでウィンドを開き、PreferencesのInternet Updatesタブにある Download Siteにローカルのミラーサーバを指定します。
ローカルミラーサーバではfreshclamを動かしたくない、
あるいはデーモンを立ち上げる程の権限は無いという場合もあるかもしれません。
その場合wgetなどでデータを取得しても良いでしょうか?
答えとしては「悪くは無いが好ましくはない」です。
ClamAVのデータベースは、複数の公式ミラーサイトがエリア別にDNSラウンドロビンで割り当てられており、同じdatabase.clamav.netと指定されていても、
毎回違うサーバに接続されてしまう可能性があります(というか毎回違うはず)
そのため、If-Modified-Sinceヘッダを使った場合、
サーバの時刻設定のズレ等により、
正しく動作しない可能性もあります。
ですから、freshclamではmain.cvd, daily.cvd の最初の512byteをRange指定で取得し、
そこに書かれたデータベースのバージョンによって、
新たに取得すべきか否かを判断しています。
wgetではこのような動作ができませんので、
毎回全ファイルを取得してしまうか、
サーバの時刻のズレにより、取得すべきファイルが取得できないかの、
どちらかの事象が発生する可能性があります。
freshclamをデーモンとして立ち上げる事ができない場合は、
wgetの代わりにfreshclamをコマンドとして利用するのも一法です。
たとえば
$ freshclam --quiet --log=/any/where/freshclam.log --datadir=/var/www/
とすれば、1回だけ実行して常駐せずに終ります。
この時、実行するuidで/any/where, /var/wwwに書き込みができる権限が必要です。
もし、/var/wwwに書き込める権限で実行するのが好ましくなければ、
上で書いたサーバの設定に従い、
/var/wwwから/any/whereへのシンボリックリンクだけをhttpdの権限で作成しておき、
データベースの更新は --datadir=/any/whereとして、
/any/whereへ書き込みができる権限で実行するというのが良いかもしれません。
わかりません(^^;
最低を言えば、一日一度は更新すべきです。
5分に一度更新するのはやり過ぎです(^^;
最も頻繁にやったとして、ローカルミラーサーバは1〜2時間に一度、
クライアントは30分に一度ぐらいでいいんじゃないでしょうか?
もうちょっと遅くても良いとは思いますが。
ローカルミラーをすると最悪の場合、 ローカルミラーサーバの更新間隔+クライアントの更新間隔 分だけ更新が遅れる可能性がありますので、 クライアントは高頻度で更新した方が良いとは思いますが、 サイトのポリシーで決めて下さい。
公式ミラーになればpushしてもらえます(^^;
Clamav-virusdbメーリングリストに登録すると、データベースが更新される度にメールが来ます。
こちらの公式ミラーサイトへデータがpushされて来た時間と、
MLからのメールが来た時間を比較すると、
だいたいpushされた後にメールが来るようですので、
このメールが来たタイミングで更新するようにすればだいたい良い感じかもしれません。
ただし、何かタマにメールが抜けてる事がありますし (bulkメールなので、リトライせずに棄ててる?)、 「ウィルスとしてユーザから投稿されたけどコレはもう登録されてるよ」 というような情報もメールでやって来てしまいますから、 多少の抜け/冗長はあると思います。
まぁでも登録されなかったという情報は数日分をまとめて一通で送ってきますから、 冗長の方はあまり気にする必要は無いでしょう。
抜けちゃう方はイカンともし難いですが(^^;、 メールをきっかけにした更新以外に、 一日一度(or数度)更新するようにすれば良いのではないでしょうか?