メインコンテンツまでスキップ

コラム: なぜポート443なのか

所要時間: 15分


はじめに

Webブラウザで https://example.com にアクセスするとき、暗黙的にポート443に接続しています。HTTPは80、HTTPSは443。この数字はどこから来たのでしょうか?

http://example.com   → example.com:80
https://example.com → example.com:443

この「当たり前」の裏には、インターネット標準化の歴史があります。


Well-Known Ports(0-1023)

特権ポートの概念

ポート番号0〜1023は「Well-Known Ports」または「特権ポート」と呼ばれます。

┌─────────────────────────────────────────────────────┐
│ ポート番号の区分 │
├─────────────────────────────────────────────────────┤
│ 0 - 1023 │ Well-Known Ports(特権ポート) │
│ │ → root権限が必要(Unix系OS) │
├─────────────────────────────────────────────────────┤
│ 1024 - 49151│ Registered Ports(登録済みポート) │
│ │ → IANAに登録されたサービス用 │
├─────────────────────────────────────────────────────┤
│ 49152 - 65535│ Dynamic/Private Ports │
│ │ → 一時的な接続用(エフェメラルポート)│
└─────────────────────────────────────────────────────┘

Unix系OSでは、1023以下のポートでリッスンするにはroot権限が必要です。これはセキュリティ上の設計で、一般ユーザーが重要なサービスを偽装することを防ぎます。

# 一般ユーザーでは失敗
$ python -m http.server 80
PermissionError: [Errno 13] Permission denied

# rootなら成功
$ sudo python -m http.server 80
Serving HTTP on 0.0.0.0 port 80 ...

歴史的な割り当て

初期のインターネットでは、ポート番号は必要に応じて割り当てられました。

ポートサービス割り当て時期備考
20, 21FTP1971年頃データ転送(20)と制御(21)
22SSH1995年Telnet(23)の次の空き番号
23Telnet1969年頃最古のプロトコルの一つ
25SMTP1982年メール送信
53DNS1983年名前解決
80HTTP1991年Tim Berners-Leeが選択
443HTTPS1994年Netscapeが申請

なぜ80と443なのか

HTTPとポート80

1989年、Tim Berners-LeeがCERNでWorld Wide Webを発明しました。HTTPプロトコルを設計する際、ポート番号が必要でした。

当時の状況:

  • ポート1〜79は既に主要サービスで使用済み
  • ポート80は未使用
  • 「80」という覚えやすい数字

Tim Berners-Leeは特に深い理由なく80を選んだとされています。「たまたま空いていた」というのが実情です。

HTTPSとポート443

1994年、Netscape Communications社がSSL(Secure Sockets Layer)を開発しました。HTTPをSSLで暗号化した「HTTPS」には新しいポートが必要でした。

なぜ443か?

ポート400番台の状況(1994年当時):
400 - 未使用
401 - 未使用
...
443 - 未使用 ← Netscapeが取得
444 - SNPP(Simple Network Paging Protocol)
...

Netscapeは400番台の空きポートからHTTPSが「Secure HTTP」を略したような位置づけから443を選択し、IANAに登録申請しました。

実は「SHTTP」という別のセキュアHTTPプロトコル(ポート80を使用)も存在しましたが、NetscapeのHTTPS/SSLが事実上の標準となりました。


IANAの役割

Internet Assigned Numbers Authority

ポート番号の管理はIANA(Internet Assigned Numbers Authority)が行っています。

┌─────────────────────────────────────────────────────┐
│ IANA │
│ (Internet Assigned Numbers Authority) │
├─────────────────────────────────────────────────────┤
│ 管理対象: │
│ ├── IPアドレス空間 │
│ ├── ドメイン名システム(ルートゾーン) │
│ ├── プロトコルパラメータ │
│ │ ├── ポート番号 ← ここ │
│ │ ├── プロトコル番号 │
│ │ └── その他の識別子 │
│ └── 自律システム番号(ASN) │
├─────────────────────────────────────────────────────┤
│ 運営: ICANN(Internet Corporation for Assigned │
│ Names and Numbers)の一部門 │
└─────────────────────────────────────────────────────┘

ポート番号の登録プロセス

新しいサービスでポート番号が必要な場合、IANAに申請します。

1. 申請書提出
└── サービス名、プロトコル(TCP/UDP)、用途説明

2. レビュー
└── 既存サービスとの重複確認
└── 技術的妥当性の評価

3. 割り当て
└── Service Name and Transport Protocol Port Number Registry に登録

4. 公開
└── https://www.iana.org/assignments/service-names-port-numbers/

興味深いポート番号の由来

SSH(ポート22)の誕生

1995年、フィンランドのTatu Ylönen氏がSSHを開発しました。

当時の状況:
- Telnet(23)とFTP(21)の間のポート22が空いていた
- Ylönen氏は「21と23の間だから22」で申請
- IANAは即座に承認(セキュリティの重要性から)

Ylönen氏本人の言葉:

「22は21と23の間にあって、空いていた。それだけの理由だ」

MySQL(ポート3306)

3306 の由来:
- MySQLの共同創設者 Monty Widenius が選択
- 彼の誕生日が 1962年3月30日
- 3月30日 → 330 → 3306(末尾に6を追加)

PostgreSQL(ポート5432)

5432 の由来:
- Ingres データベース(PostgreSQLの前身)がポート1524を使用
- 1524 + 3908 = 5432
- 3908 は Ingres の開発チームのオフィス番号だった

代替ポートの使用

なぜ8080や8443を使うのか

開発環境やリバースプロキシでは、80/443以外のポートがよく使われます。

┌─────────────────────────────────────────────────────┐
│ よく使われる代替ポート │
├─────────────────────────────────────────────────────┤
│ 8080 │ HTTP代替(開発サーバー、プロキシ) │
│ 8443 │ HTTPS代替(開発サーバー、プロキシ) │
│ 3000 │ Node.js開発サーバー(Express等) │
│ 4200 │ Angular開発サーバー │
│ 5173 │ Vite開発サーバー │
│ 9090 │ 管理インターフェース(Prometheus等) │
└─────────────────────────────────────────────────────┘

理由:

  1. 特権不要: 1024以上はroot権限が不要
  2. 共存: 本番サービスと開発サービスを同一マシンで動作
  3. 慣習: 8080は「もう一つの80」として広く認知

コンテナ環境でのポートマッピング

# docker-compose.yml
services:
web:
image: nginx
ports:
- "8080:80" # ホストの8080 → コンテナの80
- "8443:443" # ホストの8443 → コンテナの443

コンテナ内部では特権ポートを使用しつつ、ホストでは非特権ポートで公開する設計が一般的です。


現代の課題

ポート443への集約

現代のインターネットでは、ファイアウォールやプロキシの制限により、ポート443以外が使えない環境が増えています。

┌─────────────────────────────────────────────────────┐
│ ポート443への集約トレンド │
├─────────────────────────────────────────────────────┤
│ HTTPS (従来) │ ポート443 │
│ HTTP/2 │ ポート443(ALPN) │
│ HTTP/3 (QUIC) │ ポート443(UDP) │
│ WebSocket │ ポート443(wss://) │
│ gRPC │ ポート443(HTTP/2ベース) │
│ VPN (一部) │ ポート443に偽装 │
└─────────────────────────────────────────────────────┘

ALPN(Application-Layer Protocol Negotiation)により、同じポート443で複数のプロトコルを多重化できるようになりました。

QUIC/HTTP3とUDP

HTTP/3はUDPベースのQUICプロトコルを使用しますが、ポートは同じ443です。

HTTP/1.1, HTTP/2: TCP ポート443
HTTP/3: UDP ポート443

これにより、ファイアウォールで「ポート443のTCPは許可するがUDPはブロック」という設定が問題になることがあります。


まとめ

ポイント内容
Well-Known Ports0-1023は特権ポート、root権限が必要
80の由来Tim Berners-Leeが「空いていたから」選択
443の由来Netscapeが400番台から選択、IANAに登録
IANAの役割ポート番号の公式な管理・登録
現代のトレンドポート443への集約(HTTP/2, HTTP/3, WebSocket)

ポート番号の歴史を知ることで、なぜ特定の設定が必要なのか、なぜ特定のポートが「標準」とされるのかが理解できます。


参考資料