ウィルスチェックのための Squid 用リダイレクタ “SquidClamAV” を導入した状態で、パフォーマンスを上げるために trust_cache というオプションがあります。このオプションの使用は諸刃の剣ですよ、というお話。(追記) trust_cache モードでのパフォーマンスについても測定してみました。

trust_cache モードの危険性

trust_cache 設定はウィルスチェックを一部省略して proxy としての動作を高速化するもので、 /etc/squidclamav.conf の中にあります。

  • trust_cache 0 になっていると、Web クライアントからの GET リクエストがくるたびに、そのオブジェクトがキャッシュされている、されていないに関わらず、ウィルスチェックします。
  • trust_cache 1 にすると、キャッシュに残っているオブジェクトを信用して、ウィルスチェックしません。

ここで、あるキャッシュオブジェクトがウィルスチェック済かどうかではなく、キャッシュにある = ウィルスチェック済と見なしてしまうのが、trust_cache の危ういところです。

trust_cache 1 のとき、

http_access allow localhost を書き忘れる

squidclamav の動作が失敗

1人目が GET したオブジェクトがウィルスだった

ウィルスがキャッシュされる

ここで Squid か SquidClamAV の設定ミスに気がつき修正し、新規オブジェクトについては正しくウィルスチェックできていたとしても、

次回、2人目が同じ URL を踏む

squidclamav はキャッシュ済オブジェクトをチェックせず通過

こうして、キャッシュに残っている限り、ウィルスが配布され続けてしまいます。

以下は、実際に trust_cache モードで、トラブル復旧後もテストウィルスを通過させてしまっている状態。

[code highlight=”10″ language=”bash”]
# /usr/local/bin/squidclamav
SquidClamav running as UID 0: writing logs to stderr
Sun Apr 5 23:38:51 2009 LOG Reading configuration from /etc/squidclamav.conf
Sun Apr 5 23:38:51 2009 LOG Anonymizing User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Sun Apr 5 23:38:51 2009 LOG SquidClamav (PID 6327) started
http://www.eicar.org/download/eicar_com.zip 192.168.0.1 myurl GET
Sun Apr 5 23:39:04 2009 DEBUG Request:http://www.eicar.org/download/eicar_com.zip 192.168.0.1 myurl GET
Sun Apr 5 23:39:04 2009 DEBUG regex matched: http://www.eicar.org/download/eicar_com.zip
Sun Apr 5 23:39:04 2009 DEBUG Curl will use proxy: http://127.0.0.1:3128
Sun Apr 5 23:39:04 2009 DEBUG HIT Cache found, trusted cached = already scanned, skipping…
[/code]

踏んだウィルスコンテンツの URL が分かっていれば、前述のように squidclient -m PURGE で明示的に PURGE することができますが、分からない場合は、キャッシュ丸ごと削除する必要があります。

(追記) ややリスキーな trust_cache モード、見返りのスピードアップは?

この取扱注意品な trust_cache モード、ON にすることでどれくらいの速度向上が認められるのか、手っ取り早くブロードバンドスピードテストで調べてみました。

VMware 上での仮想マシンで CentOS 5.3 + Squid 2.6 を動かす。cache_dir 用に ext3 + ufs を使用しています。比較しているのは 3種類で、まったく SquidClamAV をインストールしていない Squid 単体と、SquidClamAV かつ trust_cache 0 or 1 の状態です。

trust_cache 1 では、あらかじめブロードバンドスピードテストのページは一度読ませて、キャッシュしてあります。

下り速度 上り速度
Squid 単体 58.5Mbps 41Mbps
Squid + SquidClamAV
(trust_cache 0)
15.6Mbps 21.0Mbps
Squid + SquidClamAV
(trust_cache 1)
16.4Mbps 22.5Mbps

まず愕然とするのが、SquidClamAV を導入した瞬間にスピードが下り速度 3分の1強、上り半分程度にまで落ちてしまうことです。trust_cache によるスピード向上もそれほど認められませんでした。

クライアント数が多い環境ではテストしていないので分かりませんが、クライアント数が限られていて、単に自宅サーバ用のウィルスチェックゲートウェイとして軽く使う程度に、リスクを冒してわざわざ trust_cache 1 にする意味はないようです。