Windows エフェメラルポート


ポートフィルタを考えるときの参考データなどをメモ。

Windowsに限らず、インターネットのサーバープログラムは、WellKnownポートなど特定のポートで、サービスを待ち受ける。たとえば、WebサーバーだとTCP80番ポート、SMTPサーバーだとTCP25番、SQLサーバーだとTCP1433番とか。

これに対して、接続に行くクライアント側で使われるポートは、そのとき空いてるポートが動的に決まる。この時に使われるポートが エフェメラルポート(ephemeral ports:短命なポート)と呼ばれるポート。このエフェメラルポートに割り当てられるのは、OSで定義された範囲になるようだが、歴史的な背景?などによりOSにより異なるもよう。

Windows XP/Server 2003以前 1025から5000
Windows Vista/Server 2008以降 49152から65535 ※IANAの提言範囲
IANA 49152から65535を”DYNAMIC AND/OR PRIVATE PORTS”(動的・私用ポート)として利用するように提言

 (参考: Wikipedia:ポート番号Wikipedia:エフェメラルポート

Windowsだから全部同じじゃないところは、意識しておかねば。また、変更も可能なのでインストールしているソフトや変更コマンドによって、デフォルトとは異なる可能性もある点は注意(自分のWin7 x64の場合は、次のようになってた:1025~65535)。

Vista/Server2008以降の確認方法 netsh interface ipv4 show dynamicportrange protocol=tcp
Vista/Server2008以降の変更方法 netsh interface ipv4 set DynamicPortRangeProtocol=tcp StartPort=1025 NumberOfPorts=3975 Store=active
※XP/Server 2003と合わせる場合, Store=persistent で再起動後も保持
XP/Server2003以前の変更方法 レジストリ設定(KB812873
資料:Vista/Server2008仕様(英語) TCP/IP Registry Values for Microsoft Windows Vista and Windows Server 2008

 (参考: http://www.netdive.jp/memo.asp、KB929851

いろいろ調べた結果、あまりクライアント側ポートに依存したフィルタ採用はせずに、サーバー側ポート or 動的フィルタリングをちゃんとかけるのが良いのかなぁという気になりました。

Vista(を踏み台にして)からWindowsが、標準?と呼ばれる側に歩み寄ってるところがわかったところは、ちょっといいなと思いました。他のOSが追従してないなれば、デファクトスタンダードじゃないのかもですが。そもそも自社のSQLServerの待ち受けと、動的ポートがバッティングしてるというおかしさもあったのかな?そのあたりは、また別の機会に調べることに。

,

Comments are closed.