はじめに
AWS SAA(Solutions Architect Associate)合格に向けた学習で、「エフェメラルポートって何?」という疑問にぶち当たったので、調べながらまとめていきたいと思います!
エフェメラルポートとは
定義
エフェメラルポート(Ephemeral Port)とは、クライアント側のアプリケーションが一時的に使用する動的に割り当てられるポート番号のことです。
「ephemeral」という単語は「一時的な、はかない」という意味を持ち、その名前の通り通信セッションの期間中のみ存在する短命なポートです。
通常のサーバーアプリケーションは固定されたウェルノウンポート(HTTPなら80番、HTTPSなら443番など)で待機していますが、クライアント側では接続のたびに異なるポート番号が必要になります。この時、オペレーティングシステムが自動的に未使用のポート番号を選択して割り当てるのがエフェメラルポートの仕組みです。
ポート番号の分類と範囲
- ウェルノウンポート: 0-1023
HTTP(80)、HTTPS(443)、SSH(22)など、よく知られたサービス用のポート
- 登録済みポート: 1024-49151
特定のアプリケーションやサービスが登録して使用
- エフェメラルポート: 49152-65535
クライアントが一時的に使用する動的ポート
OSごとの実際の範囲
実際のエフェメラルポート範囲は、オペレーティングシステムによって異なります:
| OS | エフェメラルポート範囲 |
|---|---|
| Linux | 32768-61000(一般的) |
| Windows Vista/7/Server 2008以降 | 49152-65535 |
| Windows XP以前 | 1025-5000 |
エフェメラルポートの動作メカニズム
基本的な通信フロー
-
接続開始: クライアントがサーバーへの接続を要求
-
ポート割り当て: OSがクライアントに対してエフェメラルポートを動的に割り当て
-
通信実行: クライアントが割り当てられた一時ポートを使用してサーバーと通信
-
リソース解放: 通信終了後、エフェメラルポートが解放され、再利用可能な状態に
具体例:Webブラウジングのケース
※ AIに作成してもらいました。
AWSにおけるエフェメラルポートの重要性
ネットワークACLでの考慮事項
AWSのネットワークACLはステートレスな性質を持つため、インバウンドとアウトバウンドの両方向でトラフィックを明示的に許可する必要があります。
問題の具体例
状況設定
- あなたの自宅PC(Windows)からAWS EC2にSSH接続しようとしている
- EC2はプライベートサブネットに配置
- ネットワークACLが設定されている
何が起きているか?
1. 接続開始時(成功)
あなたのPC:52341 → EC2:22 (SSH接続要求)
- インバウンドルール:「ポート22への接続を許可」→ ✅ 通過
2. EC2からの応答時(失敗)
EC2:22 → あなたのPC:52341 (SSH応答)
- アウトバウンドルール:「ポート52341への応答を許可?」→ ❌ 設定されていない
問題点
- ポート22(SSH)は許可されているが...
- クライアントのエフェメラルポート(この例では52341)への応答は許可されていない
- 結果:接続タイムアウト
解決策
アウトバウンドルールに以下を追加
| ルール# | タイプ | プロトコル | ポート範囲 | 宛先 | 許可/拒否 |
|---------|--------|-----------|-----------|------|----------|
| 100 | カスタム TCP | TCP | 1024-65535 | 0.0.0.0/0 | ALLOW |
💡 「エフェメラルポートが許可されていない」= 「クライアントが使用する一時的なポート番号への戻りトラフィックが、ネットワークACLのアウトバウンドルールで止められている状態」
最後に
エフェメラルポートはクライアントに割り当てられる「一時的なポート」ということがわかりました
インフラでの問題の原因をいち早く特定するためにも、このような知識は必要だと思いました!
