ネットワークコマンドで管理が変わる!

第11回 netshでファイアウォールを管理する (その3)


今月のコマンド

set allowedprogram

add allowedprogram

delete allowedprogram

show allowedprogram


 前回紹介した「set portopening」および「add portopening」サブコマンドは、静的にポートを開放するコマンドだが、静的にポートを開放した場合、常にそのポートが開かれているため、悪意あるプログラムがそのポートを利用する危険がある。

これに対して、Windowsファイアウォールでは特定のプログラムだけがそのポートを利用するようにポートを開放するという機能がある。それが動的なポート開放機能だ。

例えば、あるアプリケーションが通信のためにTCP 445ポートを利用する場合、そのアプリケーションを例外プログラムとしてファイアウォールに登録しておけば、そのアプリケーションが必要とするときだけTCP 445ポートを開くことができる。他のプログラムが同じTCP 445ポートを利用しようとしても、そのときにはポートが閉じられるので、悪意あるプログラムによる侵入を防ぐことができる。

また、アプリケーションが利用するポートがその都度変わる場合にも、この動的なポート開放機能が利用できる。

ただ、動的なポート開放のためにアプリケーションを登録する場合は、必要なプログラムをすべて登録しなければならないので、その分の手間がかかることが欠点だろう。大きなアプリケーションでは複数のプログラムを登録する必要がある。例えば、Hitachi JP1CA UnicenterTivoli Management Frameworkなどのネットワーク/システム管理ツールなどでは、たいてい3〜8個程度のプログラムを登録する必要がある。どのプログラムを登録するかは、そのアプリケーションのマニュアル等を参照していただきたい。

netshサブコマンドには、動的なポート開放を行うためのコマンドとして「set allowedprogram」および「add allowedprogram」が用意されている。なお今回紹介するnetshサブコマンドはすべてWindows XP SP2以降、Windows Server 2003 SP1以降でのみ利用できる。

 set allowedprogramあるいはadd allowedprogramを利用してファイアウォールの例外を設定するためには、グループポリシーの「ローカルコンピュータポリシー」−「コンピュータの構成」−「管理用テンプレート」−「ネットワーク」−「ネットワーク接続」−「Windowsファイアウォール」の「ドメインプロファイル」または「標準プロファイル」の「Windowsファイアウォール: ローカルプログラムの例外を許可する」が「有効」になっているか、「未構成」になっていなければならない。「未構成」の場合は、さらに「Windowsファイアウォール: プログラムの例外を定義する」が「未構成」になっている必要がある。デフォルトでは両者共に「未構成」なので問題ないが、グループポリシーを変更している場合は要注意だ。


---------------------------------------------------------------------------

ファイアウォールを動的に開放するプログラムを設定する

set allowedprogram/add allowedprogram

---------------------------------------------------------------------------

プログラムを登録してファイアウォールを設定

 set allowedprogramコマンドの構文は次のとおり。

set allowedprogram [program=]Path [[name=]Name
[mode=]{enable | disable}
[scope=]{all | subnet | custom
[[addresses=]Addresses]}
[profile=]{current | domain | standard | all}]


 これはset portopeningコマンドとよく似ており、protocolおよびportの代わりにprogramを指定すると覚えておけばよい。またinterfaceの指定はできない。

 例えば、外部からの着信を待ち受けるMyApp.exeというプログラムがある場合は、

set allowedprogram program=C:\MyApp\MyApp.exe name=MyApp mode=enable scope=subnet

あるいは

set allowedprogram program=C:\MyApp\MyApp.exe name=MyApp mode=enable scope=custom addresses=157.60.0.1,172.16.0.0/16,10.0.0.0/255.0.0.0,LocalSubnet

という具合に入力する。

set allowedprogram C:\MyApp\MyApp.exe MyApp enable subnet

あるいは

set allowedprogram C:\MyApp\MyApp.exe MyApp enable custom 157.60.0.1,172.16.0.0/16,10.0.0.0/255.0.0.0,LocalSubnet

でも同じだ。なお、プログラムのパスはルートからの絶対パスで指定する必要がある。


画面1● set allowedprogramコマンドでMyApp.exeを登録


 add aloowedprogramコマンドの構文は次のとおり。

add allowedprogram [program=]Path [name=]Name
[[mode=]{enable | disable}
[scope=]{all | subnet | custom
[[addresses=]Addresses]}
[profile=]{current | domain | standard | all}]


 これもadd portopeningコマンドのprotocol=およびport=program=に変わったものと覚えればよい。やはりinterface=の指定はできない。

 set allowedprogramコマンドとの書式の違いは、nameが必須になっているだけであり、set allowedprogramでもadd allowedprogramでも同じようにプログラムの追加・変更ができる。


---------------------------------------------------------------------------

ファイアウォールを動的に開放するプログラムを登録削除する

delete allowedprogram

---------------------------------------------------------------------------

ファイアウォールからプログラムを登録削除

 set allowedprogramあるいはadd allowedprogramコマンドでmode=disableとすれば、ファイアウォールを動的に開放するプログラムが無効になり、利用するポートがブロックされる。しかし、この場合はプログラムの登録自体が残ったままになる。無効のプログラムが残っていても実害はないと思うが、無駄なプログラムは削除してすっきりしたいというのであれば、「delete allowedprogram」コマンドでプログラムの登録自体を削除することができる。

 delete allowedprogramコマンドの書式は次のとおり。

delete allowedprogram [program=]Path [[profile=]{current | domain | standard | all}]


 これもdelete portopeningコマンドのprotocol=およびport=program=に変わったものと覚えればよい。やはりinterface=の指定はできない。

 このコマンドに関しては特に使い方で難しいところはないだろう。


画面2● delete allowedprogramコマンドでMyApp.exeを登録削除


 なお、set allowedprogramadd allowedprogramdelete allowedprogramと同じことは「コントロールパネル」の「Windowsファイアウォール」→「例外」タブで、GUIでの操作ができるが、コマンドを使うとより簡単であり、プロファイルを指定できることと、ログオンスクリプトなどでも実行できるという長所がある。


---------------------------------------------------------------------------

ファイアウォールを動的に開放するプログラムを表示する

show allowedprogram

---------------------------------------------------------------------------

登録されているプログラムを表示・確認

 既に画面1および画面2でコマンドの使用例を示しているが、set allowedprogramあるいはadd allowedprogramコマンドで設定されたプログラムは「show allowedprogram」コマンドで表示・確認できる。

show allowedprogramコマンドの構文は次のとおり。

show allowedprogram [[verbose=]{disable | enable}]


show allowedprogramと入力した場合はmodenameprogramに相当するパラメータが表示されるが、verbose=enableを指定した場合は、画面3のようにscopeなどの他のパラメータも表示される。必要に応じて使い分けるとよいだろう。


画面3● show allowedprogramコマンドで登録されたプログラムを詳細モードで表示・確認



netshサブコマンドリファレンス

netshサブコマンドは、実行できるコンテキストが異なる。そのため、ダイレクトコマンドモードの場合、-cオプションによって実行可能なコンテキストを指定する必要がある。シェルモードの場合は、実行できるコンテキストに移動してからコマンドを実行するか、コンテキスト名をコマンドといっしょに指定して実行する必要がある。


set allowedprogram

ファイアウォールで許可するプログラムを設定する。

[構文]

set allowedprogram [program=]Path [[name=]Name [mode=]{enable | disable}
[scope=]{all | subnet | custom [[addresses=]Addresses]}
[profile=]{current | domain | standard | all}]

 

[パラメータ]

program

プログラムパス名およびファイル名を指定する。

name

プログラム名を指定する (省略可能)

mode

ポート開放のモードを次のいずれかの値で指定する (省略可能)

enable ファイアウォール経由の通信を許可する (デフォルト)

disable ファイアウォール経由の通信を許可しない。

scope

ポート開放のスコープを次のいずれかの値で指定する (省略可能)

all ファイアウォール経由のトラフィックをすべて許可する (デフォルト)

subnet ローカルネットワーク (サブネット) のトラフィックのみ許可する。

custom 指定したファイアウォール経由の通信のみ許可する。

addresses

カスタムのスコープアドレスを指定する (省略可能)scopecustumの場合のみ指定可能。

profile

構成プロファイルを次のいずれかの値で指定する (省略可能)

current 現在のプロファイル (デフォルト)

domain ドメインのプロファイル。

standard 標準のプロファイル。

all すべてのプロファイル。

[実行できるコンテキスト] firewall


add allowedprogram

ファイアウォールで許可するプログラムを追加する。

[構文]

add allowedprogram [program=]Path [name=]Name [[mode=]{enable | disable}
[scope=]{all | subnet | custom [[addresses=]Addresses]}
[profile=]{current | domain | standard | all}]

 

[パラメータ]

program

プログラムパス名およびファイル名を指定する。

name

プログラム名を指定する。

mode

ポート開放のモードを次のいずれかの値で指定する (省略可能)

enable ファイアウォール経由の通信を許可する (デフォルト)

disable ファイアウォール経由の通信を許可しない。

scope

ポート開放のスコープを次のいずれかの値で指定する (省略可能)

all ファイアウォール経由のトラフィックをすべて許可する (デフォルト)

subnet ローカルネットワーク (サブネット) のトラフィックのみ許可する。

custom 指定したファイアウォール経由の通信のみ許可する。

addresses

カスタムのスコープアドレスを指定する (省略可能)scopecustumの場合のみ指定可能。

profile

構成プロファイルを次のいずれかの値で指定する (省略可能)

current 現在のプロファイル (デフォルト)

domain ドメインのプロファイル。

standard 標準のプロファイル。

all すべてのプロファイル。

[実行できるコンテキスト] firewall


delete allowedprogram

ファイアウォールで許可されたプログラムを削除する。

[構文]

delete allowedprogram [program=]Path [[profile=]{current | domain | standard | all}

 

[パラメータ]

program

プログラムパス名およびファイル名を指定する。

profile

 構成プロファイルを次のいずれかの値で指定する (省略可能)

current 現在のプロファイル (デフォルト)

domain ドメインのプロファイル。

standard 標準のプロファイル。

all すべてのプロファイル。

[実行できるコンテキスト] firewall


show allowedprogram

ファイアウォールで許可されたプログラムの構成を表示する。

[構文]

show allowedprogram [[verbose=]{disable | enable}]

 

[パラメータ]

verbose

表示モードを次のいずれかの値で指定する (省略可能)

disable 概要情報のみを表示する (デフォルト)

enable すべての情報を表示する。

[実行できるコンテキスト] firewall