ネットワークコマンドで管理が変わる!
第9回 netshでファイアウォールを管理する (その1)
今月のコマンド
netsh set service
netsh show service/portopening/config/state
netsh reset
今回より数回にわたってファイアウォール関連のnetshコマンドを紹介する。Windowsファイアウォールは、以前のインターネット接続ファイアウォール (ICF) からWindows XP SP2、Windows 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.10のPCからのみ管理接続ができるようになるのでより安全になる。許可するアドレスは「157.60.0.1,172.16.0.0/16,
10.0.0.0/255.0.0.0,LocalSubnet」のように「,」で区切って複数設定できる。
逆に、リモート管理を禁止する場合は
set service remoteadmin disable
と入力する。
リモート管理を許可したときは、TCP 135とTCP 445のポート、およびRPCエンドポイントマッパーが動的に割り当てるポートが開放されるので、RPCやDCOMを利用するシステム管理ツールやネットワーク管理ツールなどを使ってリモートからシステムの設定を変更したりすることができるようになる。またHP OpenViewなどのRPCやDCOMを利用するサードパーティ製の管理ツールも使えるようになる。ただし、RPCやDCOMを利用しない管理ツールであれば、リモート管理を禁止したままでもよい。
ファイルとプリンタの共有を許可する場合は
set service fileandprint
でファイルとプリンタの共有が可能になる。やはり
set service fileandprint enable subnet
set service fileandprint enable custom 192.168.1.10
のようにsubnetやIPアドレスを指定することもできる。
ファイルとプリンタの共有を許可したときは、TCP 139およびTCP 445、それにUDP 137と138のポートが開放される。
リモートデスクトップ・リモートアシスタンスを利用する場合は
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 ip、ipsec dynamic、ras ip、ras ipx、ras netbeui、ras appletalk、aaaaコンテキストでも実行できるが構文は異なる。
画面5● show configコマンドの結果 (一部)
画面6● show config enableコマンドの結果 (一部)
「show state」と入力すると、現在のファイアウォールの状態と開いているポートが表示される (画面7)。「show state enable」ではさらに詳細が表示される (画面8)。
show stateコマンドは、firewallコンテキストの他にinterface ipv6、interface ipv6 6to4、interface 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 ip、interface ipv6、interface ipv6 6to4、interface portproxy、routing、routing ip、rpc、winsockコンテキストでも実行できる。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
[パラメータ]
なし
[実行できるコンテキスト] firewall、interface ipv6、interface ipv6 6to4、interface ipv6 isatap、interface portproxy、routing、routing ip、rpc、winsock