ネットワークポートとは?TCP、UDPと開いているポート
ネットワークポートとは、TCPやUDPなどのトランスポートプロトコルが、通信を適切なサービスに振り分けるために使う番号です。プロトコル、IPアドレス、ポートの組み合わせが、実際の接続の端点になります。ポートは論理的な識別子であり、ルーターにある物理的な差し込み口のことではありません。
番号と主な用途
ポート番号は0から65535までの16ビットの値です。IANAはこれを、システムポート(0〜1023)、ユーザーポート(1024〜49151)、動的・プライベートポート(49152〜65535)に分けています。HTTPは一般にTCPの80番、HTTPSはTCPの443番を使いますが、サービスを別の番号で動かすように設定することもできます。
TCPとUDPのポート空間はそれぞれ独立しています。そのため、同じ番号のポートでも、プロトコルごとに別の用途に使われることがあります。クライアントは通常、サーバーが待ち受けている宛先ポートに接続する際、一時的な送信元ポートを選びます。クライアント側で大きな番号のポートが見えるのは普通のことで、公開されたサービスが開いているという意味ではありません。
「開いている」とはどういうことか
TCPの場合、外部からのテストで待ち受け中のプログラムとの接続を確立できれば、そのポートは開いていると判定されます。閉じているという応答、パケットの破棄、タイムアウトはそれぞれ意味が異なりますが、ファイアウォールがあると区別しにくくなります。UDPのテストは結論を出しにくいものです。サービスが動いていても、プローブに応答しないだけということがあるからです。
ローカルのアドレスで待ち受けているプログラムに、インターネットから自動的にアクセスできるわけではありません。ホストのファイアウォール、ルーターのポートフォワーディング、プロバイダーのフィルタリング、キャリアグレードNATのすべてが結果に影響します。まず待ち受けているアドレスとプロトコルを確認し、そのうえでローカルネットワークの外からテストしましょう。
ポートを開けるときの心構え
公開するのは必要なサービスだけにしましょう。認証を設定し、ソフトウェアを最新の状態に保ち、可能であれば接続元のアドレスを制限します。接続テストに成功しても、アプリケーションが安全か、正しく設定されているかまではわかりません。逆に、テストに失敗しても、それだけでどの層でブロックされているかを正確に特定することはできません。
ローカルでだけ使うサービスなら、ループバックやプライベートなインターフェースにバインドし、不要なポートフォワーディングは避けてください。ファイアウォールのルールを変更する前に、想定しているプロトコルと宛先ポートを記録しておきます。変更後は別のネットワークから再確認し、サービスを廃止したら不要になったルールを削除しましょう。
問題を記録するときは、サービス名、トランスポートプロトコル、宛先ポート、テストした場所を書き留めておきます。ルーターが自分自身のパブリックアドレス宛ての通信を別扱いすることがあるため、自宅のネットワーク内でのテスト結果は、モバイル回線経由のテスト結果と異なる場合があります。プロバイダーに変更を依頼する前に、本当の意味で外部のネットワークからもう一度テストしてください。
TCPとUDPでは別々のテストが必要
同じポート番号がTCPとUDPの両方に存在することはありますが、両者は別のトランスポートです。TCPで接続に成功しても、同じ番号のUDPのサービスについては何もわかりません。TCPとUDPの比較とopen、closed、filteredのポートの記事もご覧ください。