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

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


今月のコマンド

set portopening

add portopening

delete portopening


 前回紹介した「set servicenetshサブコマンドは、「リモート管理」、「ファイルとプリンタの共有」、「リモートデスクトップ・リモートアシスタンス」、「UPnPフレームワーク」の着信ポート設定するコマンドだが、その他のポートの設定ができないことと、インターフェースごとの設定ができないといった制限がある。こうした細かな設定を行いたい時は「set portopening」コマンドや「add portopening」コマンドを使用すればよい。

なお前回と同様に、今回紹介するnetshサブコマンドもすべてWindows XP SP2以降、Windows Server 2003 SP1以降でのみ利用できる。

Windowsファイアウォールでは、静的または動的という2つの方法でポートの開放を行うことができる。1つは決まったポートを常に開放しておく方法だ。アプリケーションやサービスが決まったポートだけを使うのであれば、そのポートを静的に開放しておけばよい。一方、アプリケーションが使うポートがその都度変わるような場合や、アプリケーションが必要としたときだけ一時的にポートを開放したい場合は、普段はポートを閉じておき、必要なときだけ動的にポートを開放する方法をとることもできる。

今回は静的にポートを開放するためのコマンドを紹介する。


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

ファイアウォールでブロック/オープンするポートを設定する

set portopening

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

ポートごとにファイアウォールを設定

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

set portopening [protocol=]{TCP | UDP | all}
[port=]1-65535
[[name=]Name
[mode=]{enable | disable}
[scope=]{all | subnet | custom [[addresses=]Addresses]}
[profile=]{current | domain | standard | all}
[interface=]Name]

 パラメータの内、protocolportは必須だが、他は省略できる。nameには設定したファイアウォールルールに対して任意の名前を付けることができる。

 Windowsファイアウォールは複数のプロファイルをサポートしているので、コンピュータが管理されたネットワーク (イントラネット) に接続しているときに適用するものと、そうでないとき (インターネット) に適用するものという2つのファイアウォールルールを設定できる。コンピュータがイントラネットに接続しているときには、一連のビジネスアプリケーションが動作するように、より緩やかな設定を行い、インターネットに接続するときは、よりセキュリティの高いルールを設定するといった使い方ができる。ただし、複数のプロファイルが適用されるのはドメインに参加しているコンピュータの場合のみで、ワークグループ内のコンピュータには、1つのプロファイルだけが適用される。

 実際の使用方法としては、例えばTCPのポート1000をリッスンするabcサービスがあるとするなら、

set portopening protocol=TCP port=1000 name=abc mode=enable

と入力する。

set portopening TCP 1000 abc

と省略しても同じだ。設定した結果は「show portopening」コマンド (前号参照) で確認できる (画面1)

 また

set portopening protocol=TCP port=1000 name=abc mode=enable scope=custom addresses=157.60.0.1,172.16.0.0/16,10.0.0.0/255.0.0.0,LocalSubnet

と入力すればポートを開放する相手を限定することができる。

複数のインターフェースがあって、その内の「ローカル エリア接続」だけに設定したい場合は、

set portopening protocol=TCP port=1000 name=abc mode=enable  interface="ローカル エリア接続"

と入力すればよい (画面2)

なお、インターフェースを指定した場合、nameで設定した名前は変更できない (画面3) ので、変更するためには、一旦削除してから再度設定する必要がある。

参考:http://support.microsoft.com/kb/884908


画面1● >set portopening TCP 1000 abc の結果


画面2● set portopening protocol=TCP port=1000 name=abc mode=enable interface="ローカルエリア接続" の結果


画面3● set portopening protocol=TCP port=1000 name=def mode=enable interface="ローカルエリア接続" としても名前が変更されない


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

ファイアウォールでブロック/オープンするポートを追加する

add portopening

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

ファイアウォールルールを追加

 add portopeningコマンドの書式は次のとおり。

add portopening [protocol=]{TCP | UDP | all}
[port=]1-65535
[name=]Name
[[mode=]{enable | disable}
[scope=]{all | subnet | custom [[addresses=]Addresses]}
[profile=]{current | domain | standard | all}
[interface=]Name]

 set portopeningコマンドとの書式の違いは、nameが必須になっているだけだ。

 add portopeningコマンドは、set portopeningコマンドとよく似ており、実際にほとんど違いがない。一応set portopeningコマンドは既に設定されているファイアウォールルールを変更するときに使い、add portopeningコマンドはファイアウォールルールを追加するときに使うということになっている。

しかし実際に試してみると、既存のルールがない状態でset portopeningコマンドを使うと新規にルールを作成できるので、add portopeningコマンドと同じ結果になる (画面4)。また既にルールが存在する状態でadd portopeningコマンドを使うとルールの内容が変更されるので、これもset portopeningコマンドと同じ結果になる (画面5)

 ただ、set portopeningコマンドではnameが必須でないため、名前のないルールを作成/変更できるが、add portopeningコマンドではnameが必須のため、名前のないルールの作成/変更ができないという点だけが異なる。


画面4● set portopeningコマンドでもルールの新規作成ができる


画面5● add portopeningコマンドでもルールの変更ができる


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

ファイアウォールルールを削除する

delete portopening

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

ファイアウォールルールを削除

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

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

delete portopening [protocol=]{TCP | UDP | all}
[port=]1-65535
[[profile=]{current | domain | standard | all}
[interface=]Name]

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


画面6● delete portopeningコマンドでファイアウォールルールを削除する


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



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

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

set portopening

ファイアウォールポートの構成を設定する。

[構文]

set portopening [protocol=]{TCP | UDP | all} [port=]1-65535 [[name=]Name [mode=]{enable | disable}
[scope=]{all | subnet | custom [[addresses=]Addresses]}
[profile=]{current | domain | standard | all} [interface=]Name]

 

[パラメータ]

protocol

ポートのプロトコルを次のいずれかの値で指定する。

TCP Transmission Control Protocol (TCP)

UDP User Datagram Protocol (UDP)

all すべてのプロトコル。

port

ポート番号を指定する。

name

ポート名を指定する (省略可能)

mode

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

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

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

scope

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

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

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

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

addresses

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

profile

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

current 現在のプロファイル (既定)

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

standard 標準のプロファイル。

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

interface

インターフェイス名を指定する (省略可能)profileまたはscopeと同時に指定できない。

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

[入力例1]

set portopening protocol=TCP port=80 name=MyWebPort

[入力例2]

set portopening protocol=ALL port=53 name=DNS mode=ENABLE scope=CUSTOM addresses=157.60.0.1,172.16.0.0/16,10.0.0.0/255.0.0.0,LocalSubnet

add portopening

ファイアウォールポートの構成を追加する。

[構文]

add portopening [protocol=]{TCP | UDP | all} [port=]1-65535 [name=]Name [[mode=]{enable | disable}
[scope=]{all | subnet | custom [[addresses=]Addresses]}
[profile=]{current | domain | standard | all} [interface=]Name]

 

[パラメータ]

protocol

ポートのプロトコルを次のいずれかの値で指定する。

TCP Transmission Control Protocol (TCP)

UDP User Datagram Protocol (UDP)

all : すべてのプロトコル。

port

ポート番号を指定する。

name

ポート名を指定する。

mode

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

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

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

scope

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

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

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

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

addresses

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

profile

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

current 現在のプロファイル (既定)

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

standard 標準のプロファイル。

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

interface

インターフェイス名を指定する (省略可能)profileまたはscopeと同時に指定できない。

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

[入力例1]

add portopening protocol=TCP port=80 name=MyWebPort

aadd portopening protocol=ALL port=53 name=DNS mode=ENABLE scope=CUSTOM addresses=157.60.0.1,172.16.0.0/16,10.0.0.0/255.0.0.0,LocalSubnet

delete portopening

ファイアウォールポートの構成を削除する。

[構文]

delete portopening [protocol=]{TCP | UDP | all} [port=]1-65535
 [[profile=]{current | domain | standard | all} [interface=]Name]

 

[パラメータ]

protocol

ポートのプロトコルを次のいずれかの値で指定する。

TCP Transmission Control Protocol (TCP)

UDP User Datagram Protocol (UDP)

all すべてのプロトコル。

port

ポート番号を指定する。

profile

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

current 現在のプロファイル (既定)

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

standard 標準のプロファイル。

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

interface

インターフェイス名を指定する (省略可能)profileと同時に指定することはできない。

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

[入力例]

delete portopening protocol=TCP port=80