概要
この記事では、特定の動的ポート範囲を使用するように RPC を構成する方法と、インターネット プロトコル セキュリティ (IPsec) ポリシーを使用してその範囲内のポートをセキュリティで保護する方法について説明します。 既定では、RPC は、TCP エンドポイントでリッスンする必要がある RPC アプリケーションにポートを割り当てるときに、短期ポート範囲 (1024 - 5000) のポートを使用します。 この動作により、ネットワーク管理者にとってこれらのポートへのアクセスの制限が困難になる可能性があります。 この記事では、RPC アプリケーションが使用できるポートの数を減らす方法と、レジストリ ベースの IPsec ポリシーを使用してこれらのポートへのアクセスを制限する方法について説明します。
この資料の手順には、コンピューターを再起動する必要があるコンピューター全体の変更が含まれるため、これらの変更の結果として発生する可能性のあるアプリケーションの互換性の問題を特定するには、まず非運用環境でこれらの手順をすべて実行する必要があります。
追加情報
RPC ポートへのアクセスを再配置、削減、および制限するために完了する必要がある複数の構成タスクがあります。
まず、RPC の動的ポート範囲は、ファイアウォールまたは IPsec ポリシーを使用してブロックしやすい、小さく管理しやすいポート範囲に制限する必要があります。 既定では、RPC は、リッスンするポートを指定しないエンドポイントに対して、1024 - 5000 の範囲のポートを動的に割り当てます。
注
この記事では、5001 から 5021 のポート範囲を使用します。 これにより、RPC エンドポイントで使用できるポートの数が 3,976 から 20 に減ります。 ポートの数は任意に選択されたものであり、特定のシステムに必要なポート数の推奨事項ではありません。
次に、ネットワーク上のすべてのホストへのアクセスを拒否するには、このポート範囲へのアクセスを制限する IPsec ポリシーを作成する必要があります。
最後に、IPsec ポリシーを更新して、ブロックされた RPC ポートへのアクセス権を特定の IP アドレスまたはネットワーク サブネットに付与し、他のすべてのポートを除外できます。
RPC の動的ポート範囲を再構成するタスクを開始するには、RPC 構成ツール (RPCCfg.exe) をダウンロードし、再構成するワークステーションまたはサーバーにコピーします。 これを行うには、次のマイクロソフト Web サイトにアクセスします。
http://www.microsoft.com/download/details.aspx?FamilyID=0f9cde2f-8632-4da8-ae70-645e1ddaf369&DisplayLang=en IPsec ポリシーの作成に関する後続のタスクを実行するには、インターネット プロトコル セキュリティ ポリシー ツール (Ipsecpol.exe) をダウンロードし、再構成するワークステーションまたはサーバーにコピーします。 これを行うには、次のマイクロソフト Web サイトにアクセスします。
http://www.microsoft.com/download/details.aspx?displaylang=en&FamilyID=7D40460C-A069-412E-A015-A2AB904B7361 注: Microsoft Windows XP またはそれ以降のバージョンの Windows オペレーティング システム用の IPsec ポリシーを作成するには、Ipseccmd.exe を使用します。 Ipseccmd.exe は Windows XP サポート ツールの一部です。 IPseccmd.exe の構文および使用方法は、Ipsecpol.exe の構文および使用法と同じです。 Windows XP サポート ツールの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft サポート技術情報) をクリックしてください。
838079 Windows XP Service Pack 2 のサポート ツール
RPCCfg.exe を使用して RPC の動的ポート範囲を再配置して縮小する
RPCCfg.exe を使用して RPC 動的ポート範囲を再配置して縮小するには、次の手順を実行します。
構成するサーバーに RPCCfg.exe コピーする
コマンド プロンプトで、「rpccfg.exe -pe 5001-5021 -d 0」と入力します。
注: この範囲内のポートは、他のアプリケーションで使用するために割り当てられる可能性が低いため、RPC エンドポイントでこのポート範囲を使用することをお勧めします。 既定では、RPC はエンドポイントのポート割り当てに 1024 から 5000 のポート範囲を使用します。 ただし、この範囲内のポートは、Windows オペレーティング システムがすべての Windows ソケット アプリケーションに対して使用するために動的に割り当てられ、リモート システムへの多くの発信呼び出しを行うターミナル サーバーや中間層サーバーなど、使用頻度の高いサーバーで使い果たされる可能性があります。たとえば、Internet エクスプローラーがポート 80 の Web サーバーに接続すると、1024 から 5000 の範囲のポートでサーバーからの応答をリッスンします。 他のリモート サーバーへの発信呼び出しを行う中間層 COM サーバーも、その呼び出しへの着信応答にこの範囲内のポートを使用します。 RPC がエンドポイントに使用するポートの範囲を 5001 ポート範囲に移動すると、これらのポートが他のアプリケーションで使用される可能性が低くなります。
Windows オペレーティング システムでの短期ポートの使用の詳細については、次のマイクロソフト Web サイトを参照してください。- Windows 2000 の場合:
http://technet.microsoft.com/library/bb726981.aspx - Windows Server 2003 の場合:
http://technet2.microsoft.com/WindowsServer/en/library/823ca085-8b46-4870-a83e-8032637a87c81033.mspx?mfr=true
- Windows 2000 の場合:
IPsec またはファイアウォール ポリシーを使用して、影響を受けるホスト上の脆弱なポートへのアクセスをブロックします
次のセクションのコマンドで、パーセント記号 (%) で囲まれているテキストは、IPsec ポリシーの作成者が入力する必要があるコマンド内のテキストを表します。 たとえば、"%IPSECTOOL%" というテキストが表示される場合、ポリシーの作成者はそのテキストを次のように置き換える必要があります。
- Windows 2000 の場合は、"%IPSECTOOL%" を "ipsecpol.exe" に置き換えます。
- Windows XP 以降のバージョンの Windows の場合は、"%IPSECTOOL%" を "ipseccmd.exe" に置き換えます。
IPsec を使用してポートをブロックする方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft サポート技術情報) をクリックしてください。
813878 IPSec を使用して特定のネットワーク プロトコルとポートをブロックする方法
すべての IP アドレスに対する RPC エンドポイント マッパーへのアクセスをブロックする
すべての IP アドレスの RPC エンドポイント マッパーへのアクセスをブロックするには、次の構文を使用します。
注: Windows XP 以降のオペレーティング システムでは、Ipseccmd.exe を使用します。 Windows 2000 では、Ipsecpol.exe (Windows 2000) を使用します。
%IPSECTOOL% -w REG -p "Block RPC Ports" -r "Block Inbound TCP 135 Rule" -f *=0:135:TCP -n BLOCK
注: このコマンドに「%IPSECTOOL%」と入力しないでください。 "%IPSECTOOL%" は、コマンドのカスタマイズが必要な部分を表すことを目的としています。 たとえば、Windows 2000 では、Ipsecpol.exe を含むディレクトリから次のコマンドを入力して、TCP 135 へのすべての着信アクセスをブロックします。
ipsecpol.exe -w REG -p "Block RPC Ports" -r "Block Inbound TCP 135 Rule" -f *=0:135:TCP -n BLOCK
Windows XP 以降のオペレーティング システムでは、TCP 135 へのすべての着信アクセスをブロックする Ipseccmd.exe を含むディレクトリから次のコマンドを入力します。
ipseccmd.exe -w REG -p "Block RPC Ports" -r "Block Inbound TCP 135 Rule" -f *=0:135:TCP -n BLOCK
すべての IP アドレスの RPC 動的ポート範囲へのアクセスをブロックする
すべての IP アドレスの RPC 動的ポート範囲へのアクセスをブロックするには、次の構文を使用します。
注: Windows XP 以降のオペレーティング システムでは、Ipseccmd.exe を使用します。 Windows 2000 では、Ipsecpol.exe (Windows 2000) を使用します。
%IPSECTOOL% -w REG -p "Block RPC Ports" -r "Block Inbound TCP %PORT% Rule" -f *=0:%PORT%:TCP -n BLOCK
注: このコマンドには、「%IPSECTOOL%」や「%PORT%」と入力しないでください。 "%IPSECTOOL%" と "%PORT%" は、カスタマイズが必要なコマンドの一部を表すことを目的としています。 たとえば、Windows 2000 ホスト上で次のコマンドを入力すると、TCP 5001 へのすべての着信アクセスがブロックされます。
ipsecpol.exe -w REG -p "Block RPC Ports" -r "Block Inbound TCP 5001 Rule" -f *=0:5001:TCP -n BLOCK
TCP 5001 へのすべての着信アクセスをブロックするには、Windows XP ホストおよびそれ以降の Windows オペレーティング システムのホストで次のコマンドを入力します。
ipseccmd.exe -w REG -p "Block RPC Ports" -r "Block Inbound TCP 5001 Rule" -f *=0:5001:TCP -n BLOCK
このコマンドに記載されているポート番号を変更してブロックする必要がある RPC ポートごとに、このコマンドを繰り返します。 ブロックする必要があるポートは 5001 から 5021 の範囲です。
注: ルール名 (-r スイッチ) とフィルタ (-f スイッチ) のポート番号を変更することを忘れないでください。
オプション: アクセスが必要な場合は、特定のサブネットの RPC エンドポイント マッパーにアクセス権を付与する
特定のサブネットが制限付き RPC ポートにアクセスできるようにする必要がある場合は、まず、これらのサブネットに対して、以前にブロックした RPC エンドポイント マッパーへのアクセスを許可する必要があります。 RPC エンドポイント マッパーに特定のサブネット アクセスを許可するには、次のコマンドを使用します。
%IPSECTOOL% -w REG -p "Block RPC Ports" -r "Allow Inbound TCP 135 from %SUBNET% Rule" -f %SUBNET%/%MASK%=0:135:TCP -n PASS
注: このコマンドでは、次のステートメントが適用されます。
"%IPSECTOOL%" は使用するコマンドを表します。 このコマンドは "ipsecpol.exe" または "ipseccmd.exe" のいずれかです。どのコマンドを使用するかは、構成しているオペレーティング システムによって異なります。
"%SUBNET%" は、アクセスを許可するリモート IP サブネットを表します (10.1.1.0 など)。
"%MASK%" は使用するサブネット マスク (255.255.255.0 など) を表します。
たとえば、次のコマンドを使用すると、10.1.1.0/255.255.255.0 サブネットのすべてのホストがポート TCP 135 に接続できるようにします。 他のすべてのホストは、このポート用に以前に作成したデフォルトのブロック ルールによって接続が拒否されます。
%IPSECTOOL% -w REG -p "Block RPC Ports" -r "Allow Inbound TCP Port 135 from 10.1.1.0 Rule" -f 10.1.1.0/255.255.255.0=0:135:TCP -n PASS
オプション: アクセスが必要な場合は、特定のサブネットの新しい RPC 動的ポート範囲へのアクセスを許可する
以前に RPC エンドポイント マッパーへのアクセスを許可された各サブネットにも、新しい RPC 動的ポート範囲 (5001 - 5021) 内のすべてのポートへのアクセスを許可する必要があります。
サブネットが RPC エンドポイント マッパーに到達できるように有効にしているが、動的ポート範囲には到達できない場合、アプリケーションが応答しなくなるか、その他の問題が発生する可能性があります。
次のコマンドは、新しい RPC 動的ポート範囲内のポートへの特定のサブネット アクセスを許可します。
%IPSECTOOL% -w REG -p "Block RPC Ports" -r "Allow Inbound TCP %PORT% from %SUBNET% Rule" -f %SUBNET%/%MASK%=0:%PORT%:TCP -n PASS
注: このコマンドでは、次のステートメントが適用されます。
"%IPSECTOOL%" は使用するコマンドを表します。 このコマンドは "ipsecpol.exe" または "ipseccmd.exe" のいずれかです。どのコマンドを使用するかは、構成しているオペレーティング システムによって異なります。
"%PORT%" は、アクセスを許可する動的ポート範囲内のポートを表します。
"%SUBNET%" は、アクセスを許可するリモート IP サブネットを表します (10.1.1.0 など)。
"%MASK%" は使用するサブネット マスク (255.255.255.0 など) を表します。
たとえば、次のコマンドは、10.1.1.0/255.255.255.0 サブネットのすべてのホストをポート TCP 5001 に接続できるようにします。 他のすべてのホストは、このポート用に以前に作成したデフォルトのブロック ルールによって接続が拒否されます。
%IPSECTOOL% -w REG -p "Block RPC Ports" -r "Allow Inbound TCP Port 5001 from 10.1.1.0 Rule" -f 10.1.1.0/255.255.255.0=0:5001:TCP -n PASS
注: このコマンドは、新しい RPC 動的ポート範囲内の各サブネットとポートに対して繰り返す必要があります。
IPsec ポリシーを割り当てる
注: このセクションのコマンドは、すぐに有効になります。
構成された RPC ポートのすべてのブロック規則とすべてのオプションの許可規則を作成したら、次のコマンドを使用してポリシーを割り当てます。
%IPSECTOOL% -w REG -p "Block RPC Ports" –x
注: ポリシーの割り当てを直ちに解除するには、次のコマンドを使用します。
%IPSECTOOL% -w REG -p "Block RPC Ports" –y
注: レジストリからポリシーを削除するには、次のコマンドを使用します。
%IPSECTOOL% -w REG -p "Block RPC Ports" -o
変更を有効にするには、ホストを再起動する必要があります。
メモ
- RPC 構成を変更するには、再起動が必要です。
- IPsec ポリシーの変更は直ちに有効になり、再起動する必要はありません。
ワークステーションまたはサーバーの再起動後、ncacn_ip_tcpプロトコル シーケンスを使用し、バインドする特定の TCP ポートを指定しない RPC インターフェイスには、RPC サーバーの起動時に RPC ランタイムによってこの範囲からポートが割り当てられます。
注: サーバーは 20 個を超える TCP ポートを必要とする場合があります。 rpcdump.exe コマンドを使用して、TCP ポートにバインドされている RPC エンドポイントの数をカウントし、必要に応じてこの数を増やすことができます。 RPC ダンプ ツールを入手する方法の詳細については、次のマイクロソフト Web サイトを参照してください。