最終更新日: 2014年 8月17日
Squid Home / FAQトップ

ウイルス対策の組込み(ClamAV)

Squid 3.0からはICAP(Internet Content Adaptation Protocol)を使った外部ソフトウェア連携が強化されており、市販品のウイルス対策ソフトやURLフィルタリングソフトなどをICAP連携によってSquid上から呼び出せるようになっています。 以下ではICAPの概要とともにフリーのウイルス検知ソフトであるClamAVと協力して、HTTPパケット上でのウイルス検知の実装ついて説明していきます。 なお、本環境はDebian 7を使って構築するものとします。


1章、ICAPの概要

■外部プログラムをProxyとして構成する例 ICAP
ICAPはプロキシ・キャッシュサーバから外部のソフトウェアを呼び出すためのプロトコルです。 Squidのようにプロキシ(キャッシュ)サーバ専用のソフトでは、HTTPパケット上に乗ってくるウイルス検知やURLフィルタリングを実施しようとした場合、何らかの外部ソフトウェアを利用する必要があります(トレンドマイクロやi-Filter等)
これら外部ソフトを利用する簡単な構成は、図のようにSquidの下段または上段に位置する場所にこれらのソフトウェアをProxyとして配置する構成を取る事でしょう。
この構成はお互いをProxyとして扱うため設定は非常に簡単で、例えば図の構成においては、Squidの上位Proxyとしてウイルス対策ソフトやコンテンツフィルタリングソフトを設定するだけで構成可能です。

反面、この構成では上段または下段のサーバにおいて障害が発生した場合にそれが単一障害点となってしまい、クライアントへのサービスが不可能になる可能性が考えられます。
また、上段のサーバにおいては下段のProxyによってクライアントIPアドレスやエージェントソフト(ブラウザ)の名称などが匿名化されてしまい、どのクライアントからのアクセスなのかを記録することが困難になります。

ICAPを使うことで、外部プログラムに障害などが発生しても最低限のWeb利用が可能になり、運用上の利便性を向上させることが可能になります。



■ICAPを使った外部プログラム利用 ICAP2
ICAPを使った場合、この図のようにProxy(Squid)に実装されたICAPクライアントを経由して、ICAPサーバと通信します。
ICAPサーバでは、要求されたリクエストに基づいて、ウイルス対策ソフトやコンテンツフィルタリングソフトの処理を実施します。
このとき、ICAPサーバと通信できない場合には、基本的なProxyとして機能を実施します。
ICAPサーバおよび外部プログラムを実行するサーバハードウェアは、Proxyと同じものでも構いませんし、別のサーバに構築しても構いません。
性能を考慮するならば、別のハードウェアにてICAPサーバを構築すると良いでしょう。

今回の構成では、同一のハードウェア上でProxyおよびICAPサーバ+ClamAVを構築することして説明を行っていきます。
なお、ClamAVを実行するマシンでは、性能面を考慮して最低でも1GB以上のメモリ(できれば2GB以上)を搭載するようにしてください。
メモリが少ない場合、最悪ClamAVを実行するためのメモリ不足によって機能が実現できないことが考えられま

2章、SquidでのICAP&ClamAVの組込み

以下の説明にあたり、既に Squid3 については正常に動作しているものとします。

2-1. ClamAVのインストール

最初に以下の手順でClamAVをインストールします。
# apt-get install clamav
上記コマンドでClamAVをインストールしたなら、以下のコマンドを実行してウイルスパターンファイルを入手します。 また、定期的(毎日2回)にダウンロードするようにしておきます。
# freshclam -d -c 2
ウイルスパターンは Debian の場合には、/var/lib/clamav 以下に「bytecode.cvd, daily.cvd, main.cvd」の3つのファイルが作成されます。以上で、コマンドレベルでウイルス検査を実行する環境が整いました。 続いて、バックグラウンド(サービスとして)でウイルスを検知させるために clamav-daemon をインストールしておきます。なお、clamav-daemonをインストールするにあたり、サーバのメモリが十分かを確認してください。
# apt-get install clamav-daemon
clamav-daemonをインストールすることで、/etc/clamav/clamd.conf が出来ているハズです。 このファイルの以下の部分を確認しておきます。(LocalSocketの値)
#Automatically Generated by clamav-daemon postinst
#To reconfigure clamd run #dpkg-reconfigure clamav-daemon
#Please read /usr/share/doc/clamav-daemon/README.Debian.gz for details
LocalSocket /var/run/clamav/clamd.ctl ---他のプロセスとClamAVが通信するためのインターフェース
FixStaleSocket true
LocalSocketGroup clamav
LocalSocketMode 666
# TemporaryDirectory is not set to its default /tmp here to make overriding
# the default with environment variables TMPDIR/TMP/TEMP possible
User clamav
::
::

2-2. ICAPサーバのインストール

Debianで利用できるClamAV用のICAPサーバとしては、c-icapが存在します。 SquidからClamAVを利用するにはc-icap経由でClamAVにアクセスするためのヘルパーモジュールとして「srvClamAV」または「squidclamav」のいづれかを利用します。

ICAP3

どちらのモジュールを使ってもウイルス対策が可能になりますが、squidclamavはパッケージ化されていないので、ソースファイルを入手してコンパイルする必要があります。
以下では、それぞれのモジュールの利用法を説明していきます。