ssecutils
Network / Browser-native guide

ポート番号の基本

well-known、registered、dynamic/private の違いと、80、443、22など代表的な番号を整理します。

5Zero tracking reading surface

「:443」って何?

URL の中に https://example.com:443ssh user@host -p 22 のように出てくるポート番号。これが何のために必要で、なぜ「80 = HTTP」「443 = HTTPS」のように決まっているのかを整理します。

ポート番号は「アプリの受付窓口」

IP アドレスは「サーバーマシン本体の住所」を指しますが、1 台のサーバーには複数のサービス(Web、SSH、メール、DB...)が同時に動いていることが普通です。届いたパケットをどのサービスに渡すかを決めるための番号がポート番号です。

example.com (IP: 93.184.215.14)
├─ :22   → SSH デーモン
├─ :80   → HTTP サーバー
├─ :443  → HTTPS サーバー
├─ :3306 → MySQL
└─ :5432 → PostgreSQL

ポート番号は 0〜65535(16bit)の範囲で、TCP と UDP がそれぞれ独立して持っています。「TCP の 80 番」と「UDP の 80 番」は別物です。

IANA による 3 区分

IANA(Internet Assigned Numbers Authority)はポート番号を以下の 3 区分に分けて管理しています:

区分範囲用途
Well-known Ports0 - 1023定番プロトコル用に予約。Linux/Unix では root 権限が必要
Registered Ports1024 - 49151各アプリベンダーが申請して割り当てを受ける
Dynamic / Private / Ephemeral49152 - 65535クライアント側が一時的に使う(OS が自動割当)

覚えておきたい well-known ポート

ポートプロトコル用途
20 / 21FTPファイル転送(古典)
22SSH / SFTPセキュアな遠隔ログイン
25SMTPメール送信
53DNS名前解決(UDP/TCP両方)
67 / 68DHCPIP 自動割当
80HTTPWeb 通信(平文)
110POP3メール受信(古典)
123NTP時刻同期(UDP)
143IMAPメール受信
443HTTPSWeb 通信(暗号化)
465 / 587SMTPS暗号化メール送信
993 / 995IMAPS / POP3S暗号化メール受信

実務でよく使う registered ポートも覚えておくと便利:

  • 3000: Node.js / Next.js dev server
  • 3306: MySQL
  • 5432: PostgreSQL
  • 6379: Redis
  • 8080 / 8443: 代替 HTTP / HTTPS(管理画面・テスト用)
  • 9200: Elasticsearch
  • 27017: MongoDB

クライアント側のポート: ephemeral port

ブラウザでサイトにアクセスするとき、「サーバー側のポート」は 443 ですが、「クライアント側(あなたの PC)のポート」も必要です。これは OS が動的に空きポートを選んで割り当てます。

あなたのPC:54321  ←→  example.com:443
└── ephemeral
    ↑ OS が自動的に割り当てる

Linux のデフォルトは 32768-60999、Windows は 49152-65535 あたりです。ブラウザでタブを大量に開くと、このポートが枯渇して通信できなくなる場合もあります(実用上はほぼ起きないが、サーバー側で大量にコネクションを張る用途では考慮が必要)。

ポートスキャンの基本

セキュリティ調査の入口となるのが ポートスキャンです。「サーバーのどのポートが開いているか」を調べる行為で、定番ツールは nmap

# 一般的なスキャン(top 1000 ポート)
nmap example.com

# 特定ポートのみ
nmap -p 22,80,443 example.com

# UDP スキャン(遅い)
nmap -sU -p 53,123 example.com

# サービス検出 + バージョン特定
nmap -sV example.com

許可なく他人のサーバーをスキャンするのは法的にグレー〜違法です。学習目的なら自宅 LAN や scanme.nmap.org(Nmap 公式が用意した練習用ホスト)で試してください。

セキュリティ視点: ポートを「閉じる」

サーバー運用で最重要の習慣の 1 つが 「使わないポートを閉じる」 ことです。攻撃者が侵入経路として使えるポートが少ないほど、攻撃面(attack surface)が小さくなります。

  • クラウドのセキュリティグループ / ファイアウォール でインバウンドを 22 / 443 のみに絞る
  • 管理用ポート(DB の 3306、Redis の 6379 等)は絶対にインターネットに公開しない。VPC 内部 / SSH トンネル経由のみ
  • SSH ポート(22)を別番号に変えるのはセキュリティ強化にはならない(運用ノイズが減るだけ)。SSH 鍵認証 / Fail2ban の方が本質

おわりに

ポート番号は「サーバーが家、サービスが家の中の各部屋、ポートが部屋のドア番号」と例えるとイメージしやすいです。アクセス制御を考えるときは、「どのドアを誰に開けるか」を意識すると、ファイアウォール設計の話が腹落ちしやすくなります。