Linux で利用できるフリーのアンチウイルスソフト ClamAV で下のようなエラーをログに残して、ウィルス定義ファイルのアップデートが時々失敗していることがあります。
Mar 3 03:47:23 test freshclam[17356]: getfile: daily-19996.cdiff not found on remote server (IP: 203.178.137.175) Mar 3 03:47:23 test freshclam[17356]: getpatch: Can't download daily-19996.cdiff from db.jp.clamav.net
ウィルス定義ファイルのダウンロード先のサーバへの接続が失敗しているようです。
サーバは /etc/freshclam.conf の DatabaseMirror 行で指定します。
CentOS6 のデフォルトでは下記のようになっています。
(注:後でこの行を修正します)
/etc/freshclam.conf
DatabaseMirror db.jp.clamav.net DatabaseMirror db.local.clamav.net
DatabaseMirror を複数書いていると、先頭のサーバから順にアクセスします。
サーバへの接続に失敗すると、次のサーバへアクセスします。
アクセスは、DatabaseMirror 毎に MaxAttempts の回数リトライします。
さて、上記 CentOS6 のデフォルトのサーバ指定ですが、サーバを2つ指定しているにも関わらず、ウィルス定義ファイルのアップデートが時々失敗していました。
db.jp.clamav.net , db.local.clamav.net は DNSラウンドロビンで複数サーバからどれかが割りあたります。
nslookup db.jp.clamav.net , nslookup db.local.clamav.net コマンドを実行して見ると、両方とも下記になっていました。
120.29.176.126 203.178.137.175 203.212.42.128 218.44.253.75 219.94.128.99 27.96.54.66
これでは、db.jp.clamav.net での接続に失敗した場合、続けて db.local.clamav.net にアクセスしても、6分の1の確率で同じサーバにアクセスして失敗してしまいます。
また、いずれも日本のサーバなので cronで一斉にサーバにアップデートに行く等、ある時間帯にアクセスが集中する為に、サーバへのアクセスが失敗するのではないかと考えました。
そこで、DatabaseMirror 行で指定するサーバの1つは、アクセスが集中する時間帯をずらせるように、海外のものを指定してみました。
次のように db.us.clamav.net を指定します。
DatabaseMirror db.jp.clamav.net DatabaseMirror db.us.clamav.net
これでしばらく様子を見て、結果をこのブログでお知らせします。
コメント
同じエラー出ました。結果知りたいです。
以前のことのなので前後のログは残っていません・・が、現在は問題なく動いています。
エラーは連続して発生していなければ問題ありません。
あるサーバでエラーが出ても、別のサーバでリトライし、そちらで成功するので。
ちょっと確証はありませんが、本記事執筆時点と現在では挙動が違うようで、db.jp.clamav.net で定義されている複数のサーバに、リトライごとにどれかに接続しなおしているようです。