概要
この記事では、特定の動的ポート範囲を使用するように 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 アドレスまたはネットワーク サブネットに付与し、他のすべての IP アドレスを除外できます。
RPC ダイナミック ポート範囲を再構成するタスクを開始するには、RPC 構成ツール (RPCCfg.exe) をダウンロードし、ワークステーションまたは再構成するサーバーにコピーします。 これを行うには、次のマイクロソフト Web サイトにアクセスします。
DisplayLang=en の http://www.microsoft.com/download/details.aspx?FamilyID=0f9cde2f-8632-4da8-ae70-645e1ddaf369& 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 サポート技術情報の記事を参照してください。
Windows XP Service Pack 2 サポート ツールの838079
RPCCfg.exe を使用して RPC ダイナミック ポート範囲を再配置して減らす
RPCCfg.exe を使用して RPC ダイナミック ポート範囲を再配置して縮小するには、次の手順に従います。
構成するサーバーに RPCCfg.exe をコピーする
コマンド プロンプトで、「rpccfg.exe -pe 5001-5021 -d 0」と入力します。
注 このポート範囲は、他のアプリケーションで使用するために割り当てられる可能性が高くないため、RPC エンドポイントで使用することをお勧めします。 既定では、RPC は、エンドポイントにポートを割り当てる際に 1024 から 5000 のポート範囲を使用します。 ただし、この範囲のポートは、すべての Windows ソケット アプリケーションに対して Windows オペレーティング システムで使用するために動的に割り当てられ、リモート システムに対して多数の発信呼び出しを行うターミナル サーバーや中間層サーバーなどの使用頻度の高いサーバーで使い果たすことができます。たとえば、インターネット エクスプローラーがポート 80 上の Web サーバーに接続すると、1024 から 5000 の範囲のポートでサーバーからの応答をリッスンします。 他のリモート サーバーへの発信呼び出しを行う中間層 COM サーバーでは、その呼び出しへの受信応答にもこの範囲のポートが使用されます。 RPC がエンドポイントに使用するポート範囲を 5001 ポート範囲に移動すると、これらのポートが他のアプリケーションで使用される可能性が低くなります。
Windows オペレーティング システムでのエフェメラル ポートの使用状況の詳細については、次の Microsoft 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 では、TCP 135 へのすべての受信アクセスをブロックする Ipsecpol.exe を含むディレクトリから次のコマンドを入力します。
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 ダンプ ツールを取得する方法の詳細については、次の Microsoft Web サイトを参照してください。