概要  
コマンドで各種ネットワーク設定の設定や変更をするnetshコマンドのオプションの一つ。IPsecを使った通信の暗号化に関する設定,およびIPフィルタの追加・変更・削除ができる。netshのコンテキストとしてipsecは存在するが,このコンテキストで用意されているコマンドは,構成をスクリプトとして出力する「dump」しかない。しかも,筆者が確認したところdumpについても実際には機能しない。このため,dynamicとstaticのサブコンテキストを使って主要な設定をする。このうちdynamicコンテキストではアクティブなIPsecの構成を直接変更でき,staticコンテキストでは管理ツール「IPセキュリティ・ポリシー」での設定と「IPセキュリティ・モニター」による監視と同等の作業を実行できる。

netsh ipsecのサブコンテキストであるstaticでは,「IPセキュリティ・ポリシー」コンソールでの設定と同様に,稼働中のIPsecポリシーに直接の影響を与えずに,IPsecポリシーの作成と変更および割り当てができる。また,「IPセキュリティ・モニター」コンソールと同様にIPsecの状態も監視できる。


 netshコマンドのコマンド・モードとコンテキスト  

バッチ・モード:
通常のコマンドと同様に,コマンド・プロンプトの画面上から1行のコマンドを実行することで,必要な設定を実行するモード。

インタラクティブ・モード:
コマンド・プロンプト上で「netsh」と実行してから,専用のプロンプトで対話的に設定を変更するモード。必要なコンテキストに移動してから,そのコンテキストの設定を対話的に変更する。

スクリプト・モード:
コマンド・プロンプト上で「netsh exec」または「netsh -f」コマンドを使って,事前に用意したスクリプトを実行するモード。バッチ・モードに似ているが、複数の設定変更を1行のコマンドで実行できる。

コンテキストとサブコンテキスト:
netshコマンドは,広汎な設定項目に対応するために「コンテキスト」と呼ぶ設定のための名前空間をもっている。netshプログラム自身の設定をするnetshコンテキストがあり,コンテキストの配下にもコンテキストがある階層的な名前空間となっている。配下のコンテキストはサブコンテキストと呼び,Windows Server 2003 SP1の場合には以下のようなものがある。一部のサブコンテキストでは,さらにそのサブコンテキストが存在する。
(なし) netshプログラム自身の設定
aaaa IAS(RADIUS)サーバーの設定
bridge ネットワーク・ブリッジの設定
dhcp DHCPサーバーの設定
diag ネットワークを検査する設定
firewall Windowsファイアウォールの設定
interface ネットワーク・インタフェースの設定
ipsec IPsecの設定
ras RRASリモート・アクセスの設定
routinig RRASルーティングの設定
rpc リモート・プロシージャ・コールの設定
wins WINSサーバーの設定
winsock  Windows Socketプログラムの設定

上位コンテキストから引き継いだコマンド:
netshでは,各コンテキストごとに実行できるコマンドが決まっており,他のコンテキストでは実行できない。しかし,インタラクティブ・モードではコンテキストの移動による不便を解消するため,例えば上位のコンテキストで実行できるコマンドのうちのいくつかは下位のコンテキストでも実行することができる。helpコマンドを実行すれば,上位から引き継がれて実行可能なコマンドと,自身のコンテキストで実行可能なコマンドの一覧が表示される。


 構文  

バッチ・モード:
netsh ipsec static {set サブコマンド|add サブコマンド|delete サブコマンド|show サブコマンド|dump|exportpolicy|importpolicy|restorepolicyexamples|help}

または

netsh -c "ipsec static" {set サブコマンド|add サブコマンド|delete サブコマンド|show サブコマンド|dump|exportpolicy|importpolicy|restorepolicyexamples|help}

インタラクティブ・モード:
netsh [-c "ipsec static"]
ipsec static
{set サブコマンド|add サブコマンド|delete サブコマンド|show サブコマンド|dump|exportpolicy|importpolicy|restorepolicyexamples|help}

または

netsh -a エイリアス・ファイル名

スクリプト・モード:
netsh {exec|-f} スクリプト・ファイル名

※ [-c "ipsec static"]を指定した場合,インタラクティブ・モード内でのコンテキスト名指定は不要

 利用環境  
Windows 95 ×
Windows 98 ×
Windows Me ×
Windows NT 4.0 ×
Windows 2000 ×
Windows XP ×
Windows Server 2003 ○
※netsh ipsecはWindows Server 2003のみで利用可能。Windows XPでIPsecをコマンド・ベースで設定するにはサポート・ツールにあるipseccmd.exeを,Windows 2000ではWindows 2000 Serverリソースキットのipsecpol.exeを使用する

 netshのコマンド・オプション 
(なし)オプションをなにも指定しない場合,netshコンテキストでのインタラクティブ・モードとなる
-a エイリアス・ファイル名インタラクティブ・モードで入力するコマンド文字列を事前にエイリアス・ファイルとしてテキストで保存し,これを実行する。作業が終了するとコマンド・レベルに戻る。
-c "ipsec static(コンテキスト名)"特定のコンテキストを直接指定する場合に指定する。本オプションを用いることで,コマンド内やインタラクティブ・モード内でコンテキストを指定する必要がなくなる。
{exec|-f} スクリプト・ファイル名スクリプト・ファイルを実行し,その設定内容を反映させる。スクリプト・ファイルは事前にdumpコマンドで出力できる。
?または/?netshコマンド・ヘルプと,netshコンテキストで実行可能なコマンド・ヘルプを表示する。

 ipsec staticコンテキストのコマンド・オプション 
(なし)または?または/?またはhelpipsecコンテキスト・コマンドのヘルプを表示する。
set既存のIPsecポリシーとIPフィルタ,および関連情報を変更する。なお,「set」や「set defaultrule」などパラメータを指定しない,あるいは「?」を指定して実行すると,コマンド・レベルでのヘルプが表示される。

set defaultrule [policy=]ポリシー名 [qmpfs=]{yes|no} [activate=]{yes|no} [qmsecmethods=](セキュリティ・メソッド1 セキュリティ・メソッド2 … セキュリティ・メソッドn) [kerberos=]{yes|no} [psk=]事前共有キー名 [rootca=]"証明書名 certmap:{yes|no} excludecaname:{yes|no}"
「policy」で指定したポリシー名のIPsecポリシーにおける既定の応答規則を変更する。以下,「qmpfs」ではクイック・モードPFS(perfect forward secrecy)の有無を,「activate」では当該IPsecポリシーのアクティブ化を,それぞれ指定する。「qmsecmethods」ではセキュリティ・メソッドをESPとAHのどちらか,あるいは両方(AH+ESP)を指定し必要なパラメータを併せて設定する。AHの場合は,「AH[ハッシュ・アルゴリズム]:k/s」という形で,ハッシュ・アルゴリズムとしてMD5またはSHAを指定し,同時にk(KB)およびs(秒)で有効期間を指定する。ESPの場合は「ESP[暗号化アルゴリズム,整合性アルゴリズム]:k/s」という形式で,暗号化アルゴリズムとしてはDES/3DES/Noneを,整合性アルゴリズムではMD5/SHA1/Noneを指定する。k/sでは同様に有効期間を指定する。AH+ESPの場合は,「AH[ハッシュ・アルゴリズム]+ESP[暗号化アルゴリズム,整合性アルゴリズム]:k/s」といった形式となる。「kerberos」ではKerberos認証の使用有無を,「psk」では事前共有キーを使用する場合のキー名を指定し,「rootca」ではルート証明書とその他のパラメータを指定する。「rootca」では証明書とマッピングおよびCA名の設定はすべて引用符で囲み,埋め込み引用符は「\'」に置き換えられる。また,証明書のマッピングはドメイン環境でのみ有効で,「rootca」を複数指定することで複数の証明書を提供できる。

set filteraction {[name=]フィルタ・アクション名|[guid=]guid} [newname=]新規フィルタ・アクション名 [description=]フィルタ・アクションの説明 [qmpfs=]{yes|no} [inpass=]{yes|no} [soft=]{yes|no} [action=]{permit|block|negotiate} [qmsecmethods=]セキュリティ・メソッド1 セキュリティ・メソッド2 … セキュリティ・メソッドn)
名前もしくはGUIDで指定したフィルタ操作を変更する。「qmpfs」ではクイック・モードPFSの有無を指定し,「inpass」をyesとすると,セキュリティで保護されていない通信を許可する代わりに,応答には常にIPsecが用いられる。また「soft」ではIPsecに対応していないコンピュータとの通信を許可するかどうか指定し,「action」ではpermit(許可)/block(拒否)/negotiate(ネゴシエート)からアクションを選択する。なお「action」でpermitもしくはblockを指定した場合,「qmpfs」と「inpass」および「soft」をyesには設定できない。「qmsecmethods」の設定項目は,上記のset defaultruleの場合と同じ。

set filterlist {[name=]フィルタ一覧名|[guid=]GUID} [newname=]新規フィルタ一覧名 [description=]フィルタ一覧の説明
名前もしくはGUIDで指定したフィルタ一覧に,新しい名前もしくは簡単な説明を付加する。

set policy {[name=]ポリシー名|[guid=]GUID} [newname=]新規ポリシー名 [description=]ポリシーの説明 [mmpfs=]{yes|no} [qmpermm=]整数値 [mmlifetime=]整数値 [activatedefaultrule=]{yes|no} [pollinginterval=]整数値 [assign=]{yes|no} [gponame=]グループ・ポリシー・オブジェクト名 [mmsecmethods=](セキュリティ・メソッド1 セキュリティ・メソッド2 … セキュリティ・メソッドn)
ポリシー名もしくはGUIDで指定したIPsecポリシーを変更し,新規IPsecポリシーを作成する。「mmpfs」ではマスター・キーのPFS(perfect forward secrecy)を,「qmpermm」ではマスター・キーの作成に使用した情報がセッション・キー生成に使用できる回数を,「mmlifetime」ではマスター・キーの更新間隔を分単位で,「activatedefaultrule」ではこのIPsecポリシーで既定の規則をアクティブ化するかどうかを,「pollinginterval」ではポリシー・ストアの変更を確認する時間を,「asssign」ではこのIPsecポリシーを割り当てるかどうかを,それぞれ指定する。また「gponame」では後述するset storeでlocation=domainとした場合に,ポリシーを割り当てるグループ・ポリシー・オブジェクトを指定する。「mmsecmethods」ではキー交換のセキュリティ・メソッドを「ConfAlg{DES|3DES}-HashAlg{MD5|SHA1}-GroupNum{1|2|3}」の形式で指定する。

set rule {[name=]規則名|[id=]整数値} [policy=]ポリシー名 [newname=]新しい規則名 [description=]規則の説明 [filterlist=]IPフィルタ一覧名 [filteraction=]フィルタ・アクション名 [tunnel=]{IPアドレス|DNS名} [conntype=]{lan|dialup|all} [activate=]{yes|no} [kerberos=]{yes|no} [psk=]事前共有キー名 [rootca=]"証明書名 certmap:{yes|no} excludecaname:{yes|no}"
指定された規則を変更する。規則は「name」での規則名もしは「id」でのIDで指定し,IPsecポリシーは「policy」のポリシー名で指定する。「tunnel」でトンネルのあて先となるIPアドレスまたはDNS名を,「conntype」で接続の種類を,「kerberos」でKerberos認証の使用有無を,「psk」で事前共有キーを使用する場合のキー名を,それぞれ指定する。ルート証明書を指定する「rootca」での証明書および関連パラメータの設定は,上記のset defaultruleと同じ。

set store [location=]{local|persistent|domain} [domain=]ドメイン名
現在のIPsecポリシーの格納場所(ストア)を設定する。「local」でpersistentを選択すると,指定できる固定ストアとしてコンピュータ開始時におけるセキュリティ保護を行うためのIPsecポリシーが含まれる。

addIPsecポリシーやIPフィルタ一覧の新規作成,あるいはIPフィルタおよびフィルタの操作の追加をする。なお,「add」や「add filter」などパラメータを指定しない,あるいは「?」を指定して実行すると,コマンド・レベルでのヘルプが表示される。

add filter [filterlist=]フィルタ一覧名 [srcaddr=]{IPアドレス|DNS名|サーバーの種類} [dstaddr=]{IPアドレス|DNS名|サーバーの種類} [description=]フィルタの説明 [protocol=]{ANY|ICMP|TCP|UDP|RAW|整数値} [mirrored=]{yes|no} [srcmask=]{アドレス・マスク|プレフィックス} [dstmask=]{アドレス・マスク|プレフィックス} [srcport=]整数値 [dstport=]整数値
IPフィルタ一覧を指定し,IPフィルタを追加する。「srcaddr」で発信元の,「dstaddr」であて先のIPアドレスかDNS名またはサーバーの種類(WINS/DNS/DHCP/GATEWAYから選択)を,「protocol」でプロトコルを,「mirrored」でミラー(2つのフィルタを各方向へ作成するか)の有無を,「srcmask」で発信元の,「dstmask」であて先のマスクを,「srcport」で発信元の,「dstport」で宛先のポート(0の場合,任意)を指定する。

add filteraction [name=]フィルタ・アクション名 [description=]フィルタ・アクションの説明 [qmpfs=]{yes|no} [inpass=]{yes|no} [soft=]{yes|no} [action=]{permit|block|negotiate} [qmsecmethods=]ネゴシエーション・メソッド1 ネゴシエーション・メソッド2 … ネゴシエーション・メソッドn)
IPフィルタ操作を作成する。「qmpfs」「inpass」「soft」「action」「qmsecmethods」のオプションの内容は上記のset filteractionと同様。

add filterlist [name=]フィルタ一覧名 [description=]フィルタ一覧の説明
指定された名前でIPフィルタ一覧を作成する。

add policy [name=]ポリシー名 [description=]ポリシーの説明 [mmpfs=]{yes|no} [qmpermm=]整数値 [mmlifetime=]整数値 [activatedefaultrule=]{yes|no} [pollinginterval=]整数値 [assign=]{yes|no} [mmsecmethods=](セキュリティ・メソッド1 セキュリティ・メソッド2 … セキュリティ・メソッドn)
IPsecポリシーを既定の応答規則で作成する。「mmpfs」「qmpermm」「mmlifetime」「activatedefaultrule「pollinginterval」「assign」「mmsecmethods」で指定するオプションの内容は上記のset ruleと同じ。

add rule [name=]規則名 [policy=]ポリシー名 [filterlist=]IPフィルタ一覧名 [filteraction=]フィルタ・アクション名 [tunnel=]{IPアドレス|DNS名} [conntype=]{lan|dialup|all} [activate=]{yes|no} [description=]規則の説明 [kerberos=]{yes|no} [psk=]事前共有キー名 [rootca=]"証明書名 certmap:{yes|no} excludecaname:{yes|no}"
IPsecポリシーを指定し,その規則を作成する。「filterlist」「filteraction」「tunnel」「conntype」「activate」「description」「kerberos」「psk」「rootca」で指定するオプションの内容は上記のset ruleと同じ。

deleteIPsecポリシーやIPフィルタおよび関連した情報を削除する。

delete all
IPsecポリシー,IPフィルタ一覧およびフィルタ操作をすべて削除する。

delete filter [filterlist=]フィルタ一覧名 [srcaddr=]{IPアドレス|DNS名|サーバーの種類} [dstaddr=]{IPアドレス|DNS名|サーバーの種類} [protocol=]{ANY|ICMP|TCP|UDP|RAW|整数値} [srcmask=]{アドレス・マスク|プレフィックス} [dstmask=]{アドレス・マスク|プレフィックス} [srcport=]整数値 [dstport=]整数値 [mirrored=]{yes|no}
IPフィルタを,指定したIPフィルタ一覧から削除する。「srcaddr」「dstaddr」「protocol」「srcmask」「dstmask」「srcport」「dstport」「mirrored」で指定するオプションの内容は上記のadd filterと同じ。

delete filteraction {[name=]フィルタ名|all}
フィルタ・アクションを削除する。フィルタ・アクションの名前を指定するか,allですべてのフィルタ・アクションを削除する。

delete filterlist {[name=]フィルタ名|all}
IPフィルタ一覧を削除する。IPフィルタ一覧の名前を指定するか,allですべてのIPフィルタ一覧を削除する。

delete policy {[name=]フィルタ名|all}
IPsecポリシーとその規則を削除する。IPsecポリシー名を指定するか,allですべてのIPsecポリシーを削除する。

delete rule {[name=]規則名 |[id=]整数値|all} [policy=]ポリシー名
規則をIPsecポリシーから削除する。規則の指定は名前かID,あるいはallでそのIPsecポリシーにあるすべての規則を削除する。

showIPsecポリシー,IPフィルタおよびフィルタ操作の詳細を表示する。出力はテキスト・ファイルに保存することを推奨する。netshのインタラクティブ・モードの場合は,あらかじめ「set file open TextFileName.txt」とファイルを開いておき,その後に「ipsec static show all」などで表示内容を出力させてから「set file close」で出力を停止する。バッチ・モードの場合は「netsh ipsec static show all > TextFileName.txt」とパイプで出力させる。

show all [format=]{list|table} [wide=]{yes|no}
IPsecポリシー,IPフィルタおよびフィルタ操作に関する詳細情報をすべて表示する。「format」では表示を画面上(list)またはタブ区切り形式(table)から選択し,「wide」でnoを選択すると半角80文字の幅に合わせ名前や説明が切り捨てられる。

show filteraction {[name=]フィルタ・アクション名|[rule=]規則名|all} [level=]{verbose|normal} [format=]{list|table} [wide=]{yes|no}
フィルタ操作の詳細を表示する。フィルタ操作の名前または規則名を指定するかallですべてを表示させる。また,表示レベルを詳細(verbose)または標準(normal)から選択できる。「format」と「wide」のオプションの内容は上記のshow allと同じ。

show filterlist {[name=]フィルタ一覧名|[rule=]規則名|all} [level=]{verbose|normal} [format=]{list|table} [resolvedns=]{yes|no} [wide=]{yes|no}
IPフィルタ一覧の詳細を表示する。IPフィルタ一覧の名前もしくは規則名を指定するかallですべてを表示する。また,「resolvedns」をyesとした場合は,名前解決されたDNS名を表示する。「level」と「format」および「wide」のオプションの内容は上記のshow filteractionと同じ。

show gpoassignedpolicy [name=]グループ・ポリシー・オブジェクト名
現在選択されているストア上のグループ・ポリシー・オブジェクトに割り当てられたIPsecポリシーの詳細を表示する。現在のストアがドメインであった場合,「name」でGPO名を指定する必要がある。

show policy {[name=]ポリシー名|all} [level=]{verbose|normal} [format=]{list|table} [wide=]{yes|no}
IPsecポリシーの詳細を表示する。ポリシー名を指定するか,allですべてを表示する。「level」と「format」および「wide」のオプションの内容は上記のshow filterlistなどと同じ。

show rule {[name=]規則名|[id=]整数値]|all|default} [policy=]ポリシー名 [type=]{tunnel|tranport} [level=]{verbose|normal} [format=]{list|table} [wide=]{yes|no}
規則の詳細を表示する。規則名かIDを指定,あるいはallですべてを表示する。また「type」で規則の種類をトンネル(tunnel)またはトランスポート(tranport)から選択する。「level」と「format」および「wide」のオプションはshow filterlistなどと同じ。

show store
現在のIPsecポリシー・ストアを表示する。

exportpolicyポリシー・ストアからすべてのIPsecポリシーを指定したファイルにエクスポートする。

exportpolicy [file=]ファイル名

importpolicy指定したファイルからポリシー・ストアにIPsecポリシーをインポートする。

importpolicy [file=]ファイル名

restorepolicyexamples既定のサンプルとして用意されているIPsecポリシーを復元する。

restorepolicyexamples [release=]{win2k|win2003}
「relese」でサンプルOSの種別をWindows 2000(win2k)とWindows Server 2003(win2003)から選択する。

dump現在の構成を含むスクリプトを作成する。出力結果をファイルに保存し,構成を復元する際に利用できる。ただし,筆者の確認した限りでは,dump コマンドは有効に機能しない。

 使用例1:特定ポート(HTTP)での着信を拒否するIPsecポリシーを作成しコンピュータに割り当てる(クリックで詳細表示)  
netsh ipsec static add policy name=ポリシー名
netsh ipsec static add filterlist name=フィルタ・リスト名
netsh ipsec static add filter filterlist=フィルタ・リスト名 srcaddr=any dstaddr=Me protocol=tcp dstport=80
netsh ipsec static add filteraction name=フィルタ動作名 action=block
netsh ipsec static add rule name=ルール名 policy=ポリシー名 filterlist=フィルタ・リスト名 filteraction=フィルタ動作名
netsh ipsec static set policy name=ポリシー名 assign=yes

 使用例2:IPsecポリシーに既定で設定されたルールを無効にする(クリックで詳細表示)  
netsh ipsec static set defaultrule policy=ポリシー名 activate=no