As Good A Place As Any
Tim Thomas's Blog
CIFS および NFSv4 クライアント経由で OpenSolaris の ZFS 用ウィルススキャンサービスを設定
OpenSolaris には、CIFS クライアントまたは NFSv4 クライアントでアクセスし、ファイルのウイルススキャンが実行できる機能があります。このプロジェクトについては、OpenSolaris Project: VSCAN Service のホームページで情報を得られます。このスキャンのモデルは、ウイルス対策ソフトを実行している外部サーバーにファイルを送信 (ICAP プロトコルで) してスキャンするという点で、この記事で説明しているモデルに似ています。これは NAS 機器では一般的なモデルです。
ここに記載しているように、OpenSolaris CIFS を設定したため、このサービスを試してみたいと思いました。筆者は Sun での業務の一環として、NAS 製品で利用できるウイルス対策ソフトの認定を行っています。そのため、この種類のテストには慣れています。
前回と同様、Sun Fire X4500 に Solaris Nevada build 86 をインストールして作業しています。
root@isv-x4500b # uname -a
SunOS isv-x4500b 5.11 snv_86 i86pc i386 i86pc
使用したコマンドはほぼそのまま記載しましたが、一部のフィールドはこの記事のために編集しています。
Symantec Scan Engine Version 5.1 を筆者のラボにある Windows サーバー (ホスト名: scanengine) にインストールし、必要なスキャンサービスを用意しました。Symantec Scan Engine には標準で ICAPプロトコルインタフェースが備わっているため、OpenSolaris の VSCAN サービスを有効にして連係させます。
Symantec Scan Engine は「スキャンのみ」モードに設定しました。このモードではファイルがウイルスに感染しているかどうかを VSCAN サービスに通知するだけで、感染ファイルの修復 (つまりウイルスの削除) は行いません。ファイルが感染しているという通知を受けた場合、VSCAN サービスはファイルに属性を付加してアクセスできなくする (ファイルを隔離する) という処理をします。
VSCAN サービスは vscanadm コマンドで管理します。VSCAN サービスのデーモンである vscand はスキャンエンジンと連係してファイルをスキャンしようと、感染ファイルのデータを ICAP プロトコル経由でスキャンエンジンに送信します。
ZFS ファイルシステムの tank/cifs2 にある「cifs2」という CIFS 共有でウイルススキャンができるようにします。手順は次のとおりです。
1. VSCAN サービスを有効にする
root@isv-x4500b # svcadm enable vscan
root@isv-x4500b # svcs vscan
STATE STIME FMRI
online 7:38:08 svc:/system/filesystem/vscan:icap
2. ZFS ファイルシステムでウイルススキャンを有効にする
root@isv-x4500b # zfs set vscan=on tank/cifs2
注:次以降の手順では、scanengine の部分を、読者がウイルス対策ソフトを実行しているサーバーのホスト名に置き換えてください。
3. スキャンエンジンを追加する
root@isv-x4500b # vscanadm add-engine scanengine
root@isv-x4500b # vscanadm get-engine scanengine
scanengine:enable=on
scanengine:host=scanengine
scanengine:port=1344
scanengine:max-connection=32
注:ICAP ではポート 1344 がデフォルトですが、変更もできます。ただし変更した場合、ウイルス対策ソフトで使用しているポートも変更する必要があります。
4. 省略可能 - スキャン処理に送るファイルの最大サイズを設定する
巨大なファイルをスキャンするのは非効率です。1 ファイルでスキャンする最大サイズを 100M バイトに設定してみます。100M バイト以上のファイルをスキャンする必要がある場合、アクセスを許可または拒否するオプションを指定できます。いずれのオプションであってもファイルはスキャンされません。
root@isv-x4500b # vscanadm set -p max-size=100M
root@isv-x4500b # vscanadm set -p max-size-action=deny
root@isv-x4500b # vscanadm show
max-size=100M
max-size-action=deny
types=+*
scanengine:enable=on
scanengine:host=scanengine
scanengine:port=1344
scanengine:max-connection=32
5. 省略可能 - スキャン対象のファイルタイプ一覧を修正する
デフォルトではすべてのファイルタイプがスキャンされます。ここではスキャン対象のファイルタイプ一覧から「jpg」で終わるファイルを除外します。
root@isv-x4500b # vscanadm set -p types=-jpg,+*
root@isv-x4500b # vscanadm show
max-size=10M
max-size-action=deny
types=-jpg,+*
scanengine:enable=on
scanengine:host=scanengine
scanengine:port=1344
scanengine:max-connection=32
6. スキャンが機能しているか確認する
ウイルススキャンソフ���のテスト用ファイルは EICAR から入手できます。このファイルはウイルススキャンソフトからはウイルスに見えるのですが、使用しても安全です。
Windows サーバーに cifs2 共有をマウントし、その共有にファイルやフォルダをいくつか作成しましたが、問題ありませんでした。次に、ウイルス対策を解除している Windows サーバーのドライブから、共有上に EICAR のファイルをドラッグ&ドロップしました。共有上にある EICAR ファイルを開こうとしましたが、アクセスは拒否されました。
システムログに次のようなメッセージが記録されています。
Apr 9 08:13:09 isv-x4500b vscand:[ID 540744 daemon.warning] quarantine /tank/cifs2/eicar.com.txt 11101 - EICAR Test String
OpenSolaris を稼働しているサーバーに戻り、ファイルが実際にスキャンされたかどうか、次のように確認しました。
root@isv-x4500b # vscanadm stats
scanned=13
infected=6
failed=0
scanengine:errors=0
ファイルはスキャンされており、スキャンエラーもありません。
最後に Symantec Scan Engine の GUI 上の統計も確認しましたが、こちらでもファイルがスキャンされていることを確認できます。次の画像の数字は前述の vscanadm の出力結果と一致していませんが、これはあとでスクリーンショットをとったからです。
隔離用のビットが設定されているため、感染ファイルへのアクセスが拒否されます。隔離用ビットは次のようにして「q」の文字で確認します。
root@isv-x4500b # ls -/c eicar.com.txt
----------+ 1 2147483649 2147483650 68 Apr 9 08:13 eicar.com.txt
{A------mq-}
詳細情報
OpenSolaris Project: VSCAN Service のホームページ
Posted at 09:00AM Apr 29, 2008 in Storage |