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

netsh ipsecのサブコンテキストであるdynamicでは,アクティブなIPsecの状態を表示し,セキュリティ・ポリシー・データベース(SPD)を編集することで,稼働中のIPsecポリシー構成を直接変更できる。ipsec dynamicコンテキストのコマンドによる変更は,IPsecサービスが実行されている間のみ有効で,サービスが停止すると動的ポリシーの設定は破棄される。なお,実施した結果のほとんどは直ちに反映されるが,一部の項目は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 dynamic {set サブコマンド|add サブコマンド|delete サブコマンド|show サブコマンド|dump|help}

または

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

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

または

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

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

※resetコマンドはWindows 2000では利用できない
※ [-c "ipsec dynamic"]を指定した場合,インタラクティブ・モード内でのコンテキスト名の指定は不要

 利用環境  
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 dynamic(コンテキスト名)"最初から特定のコンテキストを直接指定する場合に設定する。このオプションを指定しておくと,コマンド内やインタラクティブ・モード内でコンテキスト名を指定する必要がない。
{exec|-f} スクリプト・ファイル名スクリプト・ファイルを実行し,その設定内容を反映させる。スクリプト・ファイルは事前にdumpコマンドで出力できる。
?または/?netshコマンド・ヘルプと,netshコンテキストで実行可能なコマンド・ヘルプを表示する。

 ipsec dynamicコンテキストのコマンド・オプション 
(なし)または?または/?またはhelpipsecコンテキスト・コマンドのヘルプを表示する。
setセキュリティ・ポリシー・データベース(SPD)内に格納されたIPsecポリシーやIPフィルタおよび操作を変更する。なお,「set」や「set config」などパラメータを指定しない,あるいは「?」を指定して実行すると,コマンド・レベルでのヘルプが表示される。

set config [property=]{ipsecdiagnostics | ipsecexempt | ipsecloginterval | ikelogging | strongcrlcheck | bootmode | bootexemptions} [value=]{整数値|{stateful|block|permit}|{none|"除外トラフィック1 除外トラフィック2 … 除外トラフィックn"}
IPsec構成および起動時のパラメータを設定する。「property」で指定した内容に対応する値を「value」で設定する。具体的には,ipsecdiagnostics(IPsec診断のログ記録レベル)では0~7,ipsecexempt(IPフィルタの適用除外トラフィックの指定)では0~3,ipsecloginterval(IPsecイベントのログ送信間隔秒)では60~86400,ikeloggingは0または1,strongcrlcheck(CRLチェック・レベル)は0~2,といった値を整数値で指定する。bootmodeの場合はコンピュータ起動からIPsecポリシー適用までの動作を,「stateful」(発信および対応する着信トラフィックとDHCPのみ許可)/「block」(拒否)/「permit」(すべて許可)の中から選択する。bootexemptionsではコンピュータ起動時のIPsecフィルタ処理から除外するトラフィックの種類を"プロトコル:送信ポート:あて先ポート:送り先"の形で指定する。このうち,ikeloggingとstrongcrlcheckで設定したプロパティはすぐに有効となるが,他のプロパティは次回起動時まで反映されない。

set mmpolicy [name=]メイン・モード・ポリシー名 [qmpermm=]セッション数(整数値) [mmlifetime=]整数値 [softsaexpirationtime=]整数値 [mmsecmethods=] (セキュリティ・メソッド1 セキュリティ・メソッド2 … セキュリティ・メソッドn) ]
SPD内のIPsecメイン・モード・ポリシー名を指定して内容を変更する。「mmlifetime」ではキー更新間隔を,「softsaexpirationtime」では保護されないSA(Security Association)の有効期限を,それぞれ分単位で指定する。また,「msecmethods」では「ConfAlg{DES|3DES}-HashAlg{MD5|SHA1}-GroupNum{1|2|3}」の形式でキー交換のセキュリティ・メソッドを指定する。

set qmpolicy [name=]クイック・モード・ポリシー名 [soft=]{yes|no} [pfsgroup=]{GRP1|GRP2|GRP3|GRPMM|NOPFS} [qmsecmethods=](セキュリティ・メソッド1 セキュリティ・メソッド2 … セキュリティ・メソッドn)
SPD内のIPsecクイック・モード・ポリシー名を指定し設定を変更する。このうち,softではIPsecに対応していないコンピュータとの通信を許可するかどうかを,「pfsgroup」ではセッション・キーPFSに使うDiffie-Hellmanグループを,「qmsecmethods」ではセキュリティ・メソッドをAHとESPのどちらかか両方(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」といった形式となる。

set rule [srcaddr=]{IPアドレス|DNS名|サーバーの種類} [dstaddr=]{IPアドレス|DNS名|サーバーの種類} [protocol=]{ANY|ICMP|TCP|UDP|RAW|整数値} [srcport=]整数値 [dstport=]整数値 [mirrored=]{yes|no} [conntype=]{lan|dialup|all} [srcmask=]{アドレス・マスク|プレフィックス} [dstmask=]{アドレス・マスク|プレフィックス} [tunneldstaddress=]{IPアドレス|DNS名} [mmpolicy=]メイン・モード・ポリシー名 [qmpolicy=]クイック・モード・ポリシー名 [actioninbound=]{permit|block|negotiate} [actionoutbound=]{permit|block|negotiate} [kerberos=]{yes|no} [psk=]事前共有キー名 [rootca=]"証明書名 certmap:{yes|no} excludecaname:{yes|no}"
SPD内の規則および関連したフィルタを変更する。発信元およびあて先のIPアドレスかDNS名またはサーバーの種類(WINS/DNS/DHCP/GATEWAYから選択),プロトコルと発信元およびあて先のポート(0の場合は任意),ミラー(二つのフィルタを各方向へ作成するか)の有無と接続の種類,発信元およびあて先のマスク,トンネルの宛先となるIPアドレスまたはDNS名,メイン・モードあるいはクイック・モード・ポリシー,受信パケットおよび送信パケットの扱い(許可/拒否/ネゴシエート),Kerberos認証の使用有無と事前共有キーもしくはルート証明書,といった内容を指定する。「rootca」において証明書とマッピングおよびCA名の設定はすべて引用符で囲み,埋め込み引用符は「\'」に置き換えられる。また,証明書のマッピングはドメイン環境でのみ有効で,「rootca」を複数指定することで複数の証明書を提供できる。

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

add mmpolicy [name=]メイン・モード・ポリシー名 [qmpermm=]セッション数(整数値) [mmlifetime=]整数値 [softsaexpirationtime=]整数値 [mmsecmethods=] (セキュリティ・メソッド1 セキュリティ・メソッド2 … セキュリティ・メソッドn) ]
IPsecメイン・モード・ポリシーをSPDに追加する。構文はset mmpolicyと同じ。

add qmpolicy [name=]クイック・モード・ポリシー名 [soft=]{yes|no} [pfsgroup=]{GRP1|GRP2|GRP3|GRPMM|NOPFS} [qmsecmethods=](セキュリティ・メソッド1 セキュリティ・メソッド2 … セキュリティ・メソッドn)
IPsecクイックモードポリシーをSPDに追加する。構文はset qmpolicyと同じ。

add rule [srcaddr=]{IPアドレス|DNS名|サーバーの種類} [dstaddr=]{IPアドレス|DNS名|サーバーの種類} [protocol=]{ANY|ICMP|TCP|UDP|RAW|整数値} [srcport=]整数値 [dstport=]整数値 [mirrored=]{yes|no} [conntype=]{lan|dialup|all} [srcmask=]{アドレス・マスク|プレフィックス} [dstmask=]{アドレス・マスク|プレフィックス} [tunneldstaddress=]{IPアドレス|DNS名} [mmpolicy=]メイン・モード・ポリシー名 [qmpolicy=]クイック・モード・ポリシー名 [actioninbound=]{permit|block|negotiate} [actionoutbound=]{permit|block|negotiate} [kerberos=]{yes|no} [psk=]事前共有キー名 [rootca=]"証明書名 certmap:{yes|no} excludecaname:{yes|no}"
規則および関連したフィルタをSPDに追加する。構文はset ruleと同じ。

deleteSPDからIPsecポリシーやIPフィルタおよび操作の設定を削除する。

delete all
SPD からIPsecポリシーやIPフィルタおよび認証方法をすべて削除する。

delete mmpolicy {[name=]メイン・モード・ポリシー名|all}
IPsecメイン・モード・ポリシーを削除する。「all」を指定するとすべてのIPsecメイン・モード・ポリシーが削除される。

delete qmpolicy {[name=]クイック・モード・ポリシー名|all}
IPsecクイック・モード・ポリシーを削除する。「all」を指定すればすべてのIPsecクイック・モード・ポリシーが削除される。

delete rule [srcaddr=]{IPアドレス|DNS名|サーバーの種類} [dstaddr=]{IPアドレス|DNS名|サーバーの種類} [protocol=]{ANY|ICMP|TCP|UDP|RAW|整数値} [srcport=]整数値 [dstport=]整数値 [mirrored=]{yes|no} [conntype=]{lan|dialup|all} [srcmask=]{アドレス・マスク|プレフィックス} [dstmask=]{アドレス・マスク|プレフィックス} [tunneldstaddress=]{IPアドレス|DNS名}
SPDから規則および関連したフィルタを削除する。構文はset ruleとほぼ同じだが,mmpolicy(メイン・モード・ポリシー),qmpolicy(クイック・モード・ポリシー),actioninbound(受信パケットの扱い),actionoutbound(送信パケットの扱い),kerberos(認証方式の指定),psk(事前共有キーの指定),rootca(ルート証明書の指定)は存在しない。

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

show all [resolvedns=]{yes|no}
SPDからIPsecポリシーやIPフィルタ,SAおよび統計を表示する。「resolvedns」をyesとした場合は,名前解決されたDNS名を表示する。

show config
現在のIPSec構成パラメータ,および起動時の動作設定を表示する。

show mmfilter [name=]{メイン・モード・フィルタ名|all} [type=]{generic|specific} [srcaddr=]{IPアドレス|DNS名|サーバーの種類} [dstaddr=]{IPアドレス|DNS名|サーバーの種類} [srcmask=]{アドレス・マスク|プレフィックス} [dstmask=]{アドレス・マスク|プレフィックス} [resolvedns=]{yes|no}
IPsecメイン・モード・フィルタの詳細をSPDから取得し表示する。発信元またはあて先のアドレスを指定すると,関連するフィルタのみが表示される。

show mmpolicy {[name=]メイン・モード・フィルタ名|all}
IPsecメイン・モード・ポリシーの詳細をSPDから表示する。

show mmsas [all] [srcaddr=]{IPアドレス|DNS名|サーバーの種類} [dstaddr=]{IPアドレス|DNS名|サーバーの種類} [format=]{list|table} [resolvedns=]{yes|no}
指定したアドレスのIPsecメイン・モード・セキュリティ・アソシエーション(SA)をSPDから表示する。「format」では表示を画面上またはタブ区切り形式から選択できる。

show qmfilter [name=]{クイック・モード・フィルタ名|all} [type=]{generic|specific} [srcaddr=]{IPアドレス|DNS名|サーバーの種類} [dstaddr=]{IPアドレス|DNS名|サーバーの種類} [srcmask=]{アドレス・マスク|プレフィックス} [dstmask=]{アドレス・マスク|プレフィックス} [protocol=]{ANY|ICMP|TCP|UDP|RAW|整数値} [srcport=]整数値 [dstport=]整数値 [actioninbound=]{permit|block|negotiate} [actionoutbound=]{permit|block|negotiate} [resolvedns=]{yes|no}
SPDからIPsecクイック・モード・フィルタの詳細を表示する。構文はmmfilterに似ているが,プロトコルと送信元およびあて先ポート,受信パケットおよび送信パケットの扱いに関する項目が追加されている。

show qmpolicy {[name=]クイック・モード・フィルタ名|all}
IPsecクイック・モード・ポリシーの詳細をSPDから表示する。

show qmsas [all] [srcaddr=]{IPアドレス|DNS名|サーバーの種類} [dstaddr=]{IPアドレス|DNS名|サーバーの種類} [protocol=]{ANY|ICMP|TCP|UDP|RAW|整数値} [format=]{list|table} [resolvedns=]{yes|no}
SPDからIPsecクイック・モード・セキュリティ・アソシエーション(SA)を表示する。構文はmmsasとほぼ同じであるが,プロトコルの指定が追加されている。

show rule [type=]{transport|tunnel} [srcaddr=]{IPアドレス|DNS名|サーバーの種類} [dstaddr=]{IPアドレス|DNS名|サーバーの種類} [srcmask=]{アドレス・マスク|プレフィックス} [dstmask=]{アドレス・マスク|プレフィックス} [protocol=]{ANY|ICMP|TCP|UDP|RAW|整数値} [srcport=]整数値 [dstport=]整数値 [actioninbound=]{permit|block|negotiate} [actionoutbound=]{permit|block|negotiate} [resolvedns=]{yes|no}
SPDから規則の詳細を表示する。「type」では表示するフィルタの種類をtransport(既定)またはtunnelのどちらかから選択する。

show stats [type=]{all|ike|ipsec}
SPDからIPSecおよびIKEの統計を表示する。

dump現在の現在の構成を含むスクリプトを作成する。出力結果をファイルに保存し,構成を復元する際に利用できる。

 使用例1:特定ポート(HTTP)の着信を拒否するようにIPsecのポリシーを設定する(クリックで詳細表示)  
netsh ipsec dynamic add rule srcaddr=Any dstaddr=IPアドレス mmpolicy=1 protocol=TCP srcport=0 dstport=80 mirrored=yes conntype=all actioninbound=block actionoutbound=permit

 使用例2:IPsecポリシーが適用されるまでトラフィックをブロックさせる(クリックで詳細表示)  
netsh ipsec dynamic set config bootmode value=block