ネットワークポート(Port)とは?

ポートとは一般的には「港」を意味する。しかし IT 業界で使われるポートは意味が異なる。IT におけるポートは、データが外へ出たり中へ入ったりするための出入口のようなものだ。このページではポートについて分かりやすく説明する。

ポートとは?

ポートは港

ポート(Port)とは本来「港」を意味する。港は船が町に入るために必要な場所であり、海と町との出入口になる。

ポート

IT 業界で使われるポートもこれに似ている。港では、どの荷物をどこで降ろすかが決められる。番号を付けて使えば、さらに明確になるだろう。 IT でも同じように、インターネット全体を海、コンピューターを町と考えると、インターネットから届くデータを降ろす場所が決まっている。 Web ページ閲覧のデータは何番港、メールは何番港というような形である。

ネットワーク

これが「ポート」に該当する。

実際に TCP や UDP で通信を行うときは、コンピューター 1 台を単位にするのではなく、「プログラム単位」、つまり「プロセスやスレッド単位」で通信が行われる。そのため、プロセス間で正しく届ける必要がある。 このとき通信するプロセスには「ポート番号」が割り当てられる。プロセスやスレッドはこのポート番号を参照し、どのアプリケーションとどのアプリケーションが通信すべきかを判断する。

建物に例える

ポートは建物に例えると分かりやすい。

ネットワーク通信には「プロトコル」「IP アドレス」「ポート番号」が必要である。

IP アドレスを建物の住所に例えるなら、ポート番号は「部屋番号」に例えられる。 コンピューターネットワークにおけるプロトコル、IP アドレス、ポート番号を例えると、「どの方法(プロトコル)で」「どの建物(コンピューター、IP)の」「何号室(何番ポート)に」連絡(通信)するのか、という形に置き換えられる。

通信にとって重要なポート番号であるため、ポートを開くことは特定の部屋のドアを開けることに近い。サービスを提供するサーバーでない限り、基本的には不要なポートを開かないように設定しておくべきである。

より正確にはポートはサービス窓口

ポートは「サーバーアプリケーションを特定するときに使う番号」であり、「サーバーで提供されているサービスの窓口」である。 たとえば、HTTP プロトコルは 80 番を使用するのが一般的である。

ポートが開放されている場合、その部屋の窓口は利用可能な状態になる。サーバーとしては、相手にサービスを提供するために、窓口を常に開けておく必要がある。 たとえば、HTTP で一般的な Web サービスを提供する場合は、80 番ポートを開放する必要がある。HTTP 通信に必要な窓口を開く作業である。

では、ポートが閉じたままだとどうなるだろうか。サーバーの窓口は閉じられている。つまり営業停止なので、サービスを提供できなくなる。したがって「サービスに応じて必要な窓口を開く作業」がポート開放である。

代表的なポート番号とプロトコル

「どのプロトコルがどのポート番号で運用されるか」の代表例は次のとおりである。

  • TCP 20: FTP(データ)
  • TCP 21: FTP(制御)
  • TCP 22: SSH
  • TCP 23: Telnet
  • TCP 25: SMTP
  • UDP 53: DNS
  • UDP 67: DHCP(サーバー)
  • UDP 68: DHCP(クライアント)
  • TCP 80: HTTP
  • TCP 110: POP3
  • UDP 123: NTP
  • TCP 443: HTTPS
  • WELL KNOWN PORT NUMBERS 0~1023

ポート、IP アドレス、プロトコルの例としては Web サーバーなどがある。

特定の IP アドレス上で公開されているサーバーで、HTTP というプロトコルに従うアプリケーション、たとえば Apache などが 80 番ポートでクライアントからの通信を待ち、要求に応じて Web ページの情報を送信する、という流れである。

他のサービスも同様に、特定のサーバーでプロトコルを実装するアプリケーションが任意のポートまたは Well Known Port を開いてサービスを提供する。

ウェルノウンポート番号(WELL KNOWN PORT NUMBERS)

実際のポート番号は 0 から 65535 まで存在するが、その中でも 0~1023 までを「ウェルノウンポート番号」と呼ぶ。文字どおり「よく知られたポート番号」という意味である。 これらの番号は IANA という団体によって管理されている。

TCP/IP や UDP において通信で利用されるポート番号のうち、主要なサービスやプロトコルが利用するために予約されているポート番号である。

80 が HTTP、22 が SSH であるように、主要なサービスではポート番号が一般的に決められている。

これらの番号は、サービスごとに設定ファイルを編集して待ち受けポート番号を変更することもできる。セキュリティ上、意図的にポート番号を変更する場合もあるが、基本的にはウェルノウンポート番号を使用するようにしよう。

登録済みポート番号

1024~49151 の番号も IANA によって管理されている。

特定のアプリケーションなどが使用することを想定したポート群である。IANA が登録を受け付け、公開している。

その他のポート番号

49152~65535 はユーザーが自由に使用できるポート番号である。IANA に登録する必要もない。

ポート番号については、「実際にどのサービスをどのポートで動かすのか」という絶対的な決まりが存在するわけではないため、任意に管理、比較して使用することもできる。

ポート開放とセキュリティ

窓口を開けたままにするということは、窓に鍵をかけないということである。 当然、情報を盗もうとする泥棒、つまり「クラッカー」などに狙われやすい状態になる。

この状態は非常に望ましくないため、むやみにポートを開いてはいけない。セキュリティ対策をきちんと行い、最小限のポートだけを開放するようにすべきである。

最近のコンピューターは処理能力が非常に高く、個人用マシン上でもサーバーとして常駐するアプリケーションが増えている。 サーバーとして機能するアプリケーションの場合、ローカル内だけでなく外部からの情報にも応答するようになっていることが多いだろう。このようなサーバーとして機能するアプリケーション、つまりサーバーアプリケーションは、サービスを提供するために必然的にポートを開放する。

しかし、サーバーアプリケーションにセキュリティ脆弱性がある場合、最悪の場合はサーバーが乗っ取られたり、サービスを提供できなくなったりすることもある。サーバーとして機能するアプリケーションは慎重に検討する必要がある。 その他にも、サーバーとして動作しているコンピューターでは「どのポートが開放されているか」「意図しないポートが開いていないか」などを確認する必要がある。実際の運用前にペネトレーションテストを行い、実際にポートスキャンして状態を把握することが重要である。