|
|
特集
Windows Server 2003 SP1レビュー
第2回 リモート・アクセス検疫機能
5.VPN接続と検疫スクリプト
デジタルアドバンテージ 打越 浩幸
2005/04/14 |
 |
|
VPN接続プロファイルのインストール
作成された接続プロファイルの実行ファイル(vpnconn.exe)をクライアント・コンピュータ上で実行すると、自動的に新しい接続用の設定ファイルがシステムにコピー、展開される。例えばWindows XP上では次のようになる。
 |
Windows XP上にインストールされた接続プロファイル |
プログラムを実行すると、このような接続プロファイルが自動的に作成される。 |
|
 |
作成されたプロファイル。 |
|
VPNサービスへのダイヤルアップ接続
作成されたVPN接続プロファイルをダブルクリックすると、VPN接続するためのダイアログが表示される。ユーザー名とパスワード、ドメイン名を指定する。ただしVPNサーバのローカル・アカウントでログオンするなら、ドメイン名ではなくVPNサーバのコンピュータ名を指定する。
 |
VPNサーバへの接続 |
接続プロファイルをダブルクリックして、VPNサーバへ接続してみる。 |
|
 |
ユーザー名。 |
|
 |
ドメイン名もしくはVPNサーバのコンピュータ名(このコンピュータのローカル・アカウントが使われる)。 |
|
 |
これをクリックすると、接続される。 |
|
[接続]をクリックすれば、VPNサーバに接続後、検疫用のプログラム(この例ではquarantine.cmd)が実行され、チェック項目にパスしていれば、検疫状態が解除されているはずである。
もし検疫の検査に合格しなければ、内部ネットワークへのアクセスは制限されている。例えば次のようになるであろう。
 |
検疫中のpingの実行例 |
検疫モードでは、リモート・アクセス・ポリシーで許可した特別なコンピュータ(検疫リソース)しかアクセスできない。 |
|
 |
検疫リソース・コンピュータへのping。成功している。 |
|
 |
検疫リソースではないコンピュータへのping。失敗している。 |
|
この例では、同じローカルのネットワーク・セグメント上に存在する2台のコンピュータへpingを行っている。上側の「10.20.1.11」は検疫モードでもアクセス可能なコンピュータ(検疫の入力フィルタで明示的に許可されているコンピュータ)であり、下側の「10.20.1.12」は許可されていないコンピュータなので、このような結果になっている。
またこのモードでは接続可能な時間に制限があり、120秒経つと、次のように切断されてしまう。
 |
検疫モードの猶予時間が終了した場合のダイアログ |
VPN接続後、検疫にパスしなければ、このように強制的にVPNサーバ側から切断されてしまう。 |
|
 |
これをクリックするとまたVPNサーバへ接続するが、検疫の検査にパスしなければ、やはり120秒で切断される。 |
|
検疫用のスクリプト・プログラムの例
いままでの例では、quarantine.cmdというプログラム(スクリプト)ファイルで検査と検疫モードからの解除を行っていた。この中で何を実行するかは、環境に応じて大きく変わる。非常に厳密でセキュアな環境を要求する組織では、例えばウイルス・チェックやOSのバージョン、パッチの適用状況、ファイアウォールの設定状態など、細かく検査するだろう。逆にあまり厳格でない組織ならば、OSのバージョンやService Packなどの状態を調べる程度かもしれない。
ただ、検査内容がどうであれ、最後には必ず、検疫サーバ(検疫サービス)に対して、検査の結果がパスしたか、そうでないかという状態を返す必要がある(何も返さない場合は、失敗したものとみなされる)。そのために利用されるのがrqc.exeというクライアント側のプログラムである。
次のリストは、最も単純なスクリプトの例である(これしか実行しないのでは検疫の意味がないが)。
※最もシンプルなquarantine.cmdの例
%1\rqc.exe /conn vpnconnections /sig "RASQuarantineConfigPassed" /log success |
「/sig "RASQuarantineConfigPassed"」は、照合用の文字列である。デフォルトではこの「RASQuarantineConfigPassed」という文字列が検疫サービスのレジストリに登録されており、それと同じ文字列を返さない限り検疫にはパスしない。必要ならばレジストリをカスタマイズして、組織ごとの文字列にしたり、プロファイルごとに異なる文字列を定義して、接続環境を使い分けたりすることができる(レジストリはHKLM\SYSTEM\CurrentControlSet の Services\rqs\AllowedSet)。
より複雑なスクリプトの例については、Windows Server 2003 SP1のドキュメントやISA Server 2004のドキュメントなどを参照していただきたい。なお、このスクリプトは、接続マネージャ管理キットによって自動的にパッケージ化され、配布されることからも分かるように、もしスクリプトを変更すると、接続プロファイルの再パッケージ化と再配布、再インストールが必要になる。これが面倒ならば、例えばスクリプトから検疫リソース上のスクリプトを呼び出すようにしておき、変更する場合は検疫リソース上に配置したスクリプトだけを変更するなどの工夫が必要になるだろう。
また実用的にするには、例えば検疫に失敗した場合は、検疫リソース上のWebサーバに誘導し、失敗の通知と可能な対処方法などをまとめたページを表示させたりするべきであろう。
※サンプルとして付属しているスクリプトの例
@echo off
:CLEARVARS
@rem ***
@rem * Clear all used environment variables in the current users's context
@rem * before starting the script
@rem *
set RQCLOC=
set RQC_CONNNAME=
set RQC_SIGNATURE=
set RQC_DOMAIN=
set RQC_USERNAME=
set RQC_PORT=
set RQS_LOGMESSAGE=
:INITIALIZATION
@rem ***
@rem * Define the locations for the source file (remove quarantine if this file exists) and
@rem * the target file (the file to copy if the source file does not exist).
@rem *
@rem Use %ServiceDir% macro to locate rqc.exe.
SET RQCLOC=%1\rqc.exe
@rem Use %ServiceName% macro.
if not -%2- == -- SET RQC_CONNNAME=/conn %2
@rem RQC_SIGNATURE string used to validate the client
@rem * Default String RASQuarantineConfigPassed
@rem *
if not -%3- == -- (SET RQC_SIGNATURE=/sig %3) else (set RQC_SIGNATURE=/sig RASQuarantineConfigPassed)
@rem Use %DOMAIN% macro.
if not -%4- == -- SET RQC_DOMAIN=/domain %4
@rem Use %USERNAME% CM macro for this value.
if not -%5- == -- SET RQC_USERNAME=/user %5
(以下省略) |
Windows Server Insider フォーラム 新着記事