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

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


今月のコマンド

netsh set service

netsh show service/portopening/config/state

netsh reset


 今回より数回にわたってファイアウォール関連の
netshコマンドを紹介する。Windowsファイアウォールは、以前のインターネット接続ファイアウォール (ICF) からWindows XP SP2Windows Server 2003 SP1で大きく変更・拡張された機能であり、netshコマンドでもWindows XP SP2以降およびWindows Server 2003 SP1以降でfirewallコンテキストおよびファイアウォール関連コマンドが新設された。ここで紹介するコマンドはいずれもWindows XP SP2以降、Windows Server 2003 SP1以降でのみ利用できる。

 Windows XP SP2以降およびWindows Server 2003 SP1以降のWindowsファイアウォールでは、デフォルトで基本的にすべての着信ポートがブロックされており (インストールされているアプリケーションにより必要なポートが着信開放されている場合がある。また送信ポートはブロックされない)、そのままでは外部との通信がほとんどできない。したがって必要に応じてポートを開放してやる必要がある。


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

標準のファイアウォールサービスを設定するnetshサブコマンド

set service

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

リモート管理、ファイル・プリンタ共有、リモートデスクトップ・リモートアシスタンス、UPnPを設定

 「set service」サブコマンドは、Windowsの標準機能である「リモート管理」、「ファイルとプリンタの共有」、「リモートデスクトップ・リモートアシスタンス」、「UPnPフレームワーク」の着信ポートをファイアウォールによりブロックするかどうかを設定するコマンドだ。構文は次のとおり。

set service [type=]{fileandprint | remoteadmin | remotedesktop | upnp | all} [[mode=]{enable | disable} [scope=]{all | subnet | custom} [addresses=]Addresses [profile=]{current | domain | standard | all}]

 例えば、リモート管理を許可するならば

set service type=remoteadmin mode=enable

と入力する。あるいは

set service remoteadmin

と省略してもよい。この場合は、すべてのリモートPCから管理接続が可能になるので、セキュリティ的には好ましくない。そこで

set service remoteadmin enable subnet

とすると、サブネット内のPCからのみ管理接続ができるように限定できる。さらに

set service remoteadmin enable custom 192.169.1.10

のようにすれば、アドレス192.168.1.10PCからのみ管理接続ができるようになるのでより安全になる。許可するアドレスは「157.60.0.1,172.16.0.0/16,

10.0.0.0/255.0.0.0,LocalSubnet」のように「,」で区切って複数設定できる。

 逆に、リモート管理を禁止する場合は

set service remoteadmin disable

と入力する。

 リモート管理を許可したときは、TCP 135TCP 445のポート、およびRPCエンドポイントマッパーが動的に割り当てるポートが開放されるので、RPCDCOMを利用するシステム管理ツールやネットワーク管理ツールなどを使ってリモートからシステムの設定を変更したりすることができるようになる。またHP OpenViewなどのRPCDCOMを利用するサードパーティ製の管理ツールも使えるようになる。ただし、RPCDCOMを利用しない管理ツールであれば、リモート管理を禁止したままでもよい。

 ファイルとプリンタの共有を許可する場合は

set service fileandprint

でファイルとプリンタの共有が可能になる。やはり

set service fileandprint enable subnet

set service fileandprint enable custom 192.168.1.10

のようにsubnetIPアドレスを指定することもできる。

 ファイルとプリンタの共有を許可したときは、TCP 139およびTCP 445、それにUDP 137138のポートが開放される。

 リモートデスクトップ・リモートアシスタンスを利用する場合は

ser service remotedesktop

ser service remotedesktop enable subnet

ser service remotedesktop enable custom 192.168.1.10

などと入力すればよい。この場合は、TCP 3389のポートが開放される。

 UPnPフレームワークを使用する場合は

set service upnp

set service upnp enable subnet

set service upnp enable custom 192.168.1.10

などと入力する。この場合は、TCP 2869およびUDP 1900のポートが開放される。

 リモート管理、ファイルとプリンタの共有、リモートデスクトップ・リモートアシスタンス、UPnPフレームワークのすべてを許可したい場合は

set service all

set service all enable subnet

set service all enable custom 192.168.1.10

などと入力すればよい。

 なお、set serviceコマンドは、複数のインターフェースがある場合、すべてのインターフェースに適用され、インターフェースごとに設定することはできない。インターフェースごとに設定したい場合は「add portopening」、「set portopening」などのコマンドを使用する (後で説明する予定)。複数のインターフェースを持つPCではset serviceコマンドにより、予期しないインターフェースまでポートが開放されてしまう恐れがあるので注意して欲しい。set serviceコマンドは、あくまでも標準サービスに対するファイアウォール設定を簡単に行うためのものと言ってよい。

 set serviceコマンドの内、ファイルとプリンタの共有、リモートデスクトップ・リモートアシスタンス、UPnPフレームワークについては、「コントロールパネル」→「Windowsファイアウォール」→「例外」タブでGUIによる設定ができるが、リモート管理についてはGUI画面での設定ができない。

 グループポリシーを使うと、リモート管理を含めたファイアウォールの設定ができる。Active Directory環境であれば、多数のPCへの設定が楽にできるので、グループポリシーを使うことをお勧めする。


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

現在のファイアウォール設定を確認する

show service/portopening/config/state

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

現在のファイアウォール設定を確認

 「show service」コマンドを使うと、現在の標準サービスのファイアウォール設定が確認できる (画面1)。「show service enable」と入力した場合はさらにスコープを含めた詳細が表示される (画面2)

show serviceコマンドは、firewallコンテキストの他にrouting ipxコンテキストでも実行できるが構文は異なる。


画面1● show serviceコマンドの結果


画面2● show service enableコマンドの結果


 show portopening」と入力すると、現在開かれているポートが表示される (画面3)show serviceコマンドと違って、ここには標準のサービス以外のアプリケーションが開いているポートも表示される。「show portopening enable」と入力した場合は、さらに詳細が表示される (画面4)


画面3● show portopeningコマンドの結果


画面4● show portopening enableコマンドの結果 (一部)


 「show config」と入力すると、プロファイルの構成やログの構成を含めた標準サービスとポートの情報が表示される (画面5)。「show config enable」ではさらに詳細が表示される (画面6)

show configコマンドは、firewallコンテキストの他に、interface ipipsec dynamicras ipras ipxras netbeuiras appletalkaaaaコンテキストでも実行できるが構文は異なる。


画面5● show configコマンドの結果 (一部)


画面6● show config enableコマンドの結果 (一部)


 「
show state」と入力すると、現在のファイアウォールの状態と開いているポートが表示される (画面7)。「show state enable」ではさらに詳細が表示される (画面8)

show stateコマンドは、firewallコンテキストの他にinterface ipv6interface ipv6 6to4interface ipv6 isatapコンテキストでも実行できるが構文は異なる。


画面7● show stateコマンドの結果


画面8● show state enableコマンドの結果 (一部)


 これらのコマンドは必要に応じて最適なコマンドを使えばよい。なお、interface ipコンテキストなどの場合は「dump」コマンドで設定情報を表示したり、テキストファイルに設定情報を保存し、「exec」コマンドで保存した設定情報を取り込むことができるが、残念ながらfirewallコンテキストではdumpコマンドが使えない。ただし、この後で解説するようにnetfw.infファイルとresetコマンドを使うことで、設定情報を取り込むことが可能だ。


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

ファイアウォールをデフォルト設定状態に戻す

reset

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

ファイアウォールの設定をすべて一括してリセット

 ファイアウォールの設定が間違っているために正常にネットワークが動作しなかったり、動作が不安定になった場合は、「reset」コマンドですべてのファイアウォール設定をWindowsをインストールしたデフォルトの設定状態に戻すことができる。これはGUIではできないコマンドならではの機能だ。

firewallコンテキストでresetコマンドを実行するためには、interface ipコンテキストと違ってリセット情報を記録するログファイルの指定は必要ない。単に「reset」と入力するだけでよい。


画面9● resetコマンドを実行し、その結果をshow portopeningコマンドで確認


 さらにfirewallコンテキストでのresetコマンドには独自のかつ重要な機能がある。

Windows ファイアウォールのデフォルト設定は、「netfw.inf」ファイルに記述されている。この内容はWindowsのインストール時やSP2 (Windows XP)SP1 (Windows Server 2003) の適用時に読み込まれ、その記述にしたがってファイアウォールが設定される。resetコマンドを実行したときも同様に、%windir%\Infフォルダにあるnetfw.infファイルが読み込まれ、その内容にしたがってファイアウォールが設定される。

このことは、デフォルト設定として、あらかじめ望みどおりの設定をnetfw.infに記述しておいて、そのnetfw.infファイルを配布し、resetコマンドを実行すれば、そのとおりにファイアウォールが設定されるわけであり、多数のクライアントPCのファイアウォール設定を変更する場合にも利用できる。Active Directory環境であればグループポリシーで一括設定するほうが楽だが、Active Directoryのない環境ではnetfw.infファイルとresetコマンドが便利だ。

netfw.infファイルの内容についての説明、および編集の方法については

http://www.microsoft.com/downloads/details.aspx?FamilyId=EB982F8C-2391-429E-9B26-31E88EDFCDF9&displaylang=ja

からダウンロードできるdocファイルを参照して欲しい。

 resetコマンドは、interface ipinterface ipv6interface ipv6 6to4interface portproxyroutingrouting iprpcwinsockコンテキストでも実行できる。interface ip以外は構文は同じだ。



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

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


set service

標準サービスのファイアウォール構成を設定する。

[構文 firewallコンテキスト]

set service [type=]{remoteadmin | fileandprint | remotedesktop | upnp | all}
[[mode=]{enable | disable} [scope=]{all | subnet | custom} [addresses=]Addresses [profile=]{current | domain | standard | all}]

[パラメータ]

type

サービスの種類を次のいずれかで指定する。

remoteadmin リモート管理。

fileandprint ファイルとプリンタの共有。

remotedesktop リモートアシスタンスとリモートデスクトップ。

upnp UPnPフレームワーク。

all 上記すべて。

mode

サービスのモードを次のいずれかで指定する (省略可能)

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

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

scope

サービスの範囲を次のいずれかで指定する (省略可能)。「mode」が「disable」の場合は無視される。

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

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

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

addresses

許可する範囲のアドレスを指定する。「scope」が「custom」の場合のみ指定可能。

profile

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

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

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

standard 標準のプロファイル。

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

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

[入力例1]

set service type=remoteadmin mode=enable scope=subnet

[入力例2]

set service fileandprint

[入力例3]

set service type=remotedesktop mode=enable scope=custom addresses=157.60.0.1,172.16.0.0/16,10.0.0.0/255.0.0.0,LocalSubnet

[入力例4]

set service upnp enable custom 157.60.0.1,172.16.0.0/16,10.0.0.0/255.0.0.0,LocalSubnet


show service

標準サービスのファイアウォール構成を表示する。

[構文 firewallコンテキスト]

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

[パラメータ]

verbose

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

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

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

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


show portopening

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

[構文 firewallコンテキスト]

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

[パラメータ]

verbose

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

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

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

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


show config

ファイアウォールの構成を表示する。

[構文 firewallコンテキスト]

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

[パラメータ]

verbose

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

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

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

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


show state

現在のファイアウォールの状態を表示する。

[構文 firewallコンテキスト]

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

[パラメータ]

verbose

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

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

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

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


reset

ファイアウォールの構成をデフォルト設定に戻す。

[構文 firewallコンテキスト]

reset

 

[パラメータ]

なし

[実行できるコンテキスト] firewallinterface ipv6interface ipv6 6to4interface ipv6 isatapinterface portproxyroutingrouting iprpcwinsock