AWSのポート番号とは?基本知識と安全運用法を徹底解説

目次

はじめに

このドキュメントの目的

本ドキュメントは、AWS環境で「ポート番号」がどのように使われ、どのように設定・管理するかを分かりやすく説明するために作成しました。ポート番号の基本から、AWSの主要サービスでの使い方、セキュリティ対策、具体的な設定例までを体系的にまとめています。

対象読者

  • AWSを使い始めたばかりの方
  • EC2やネットワーク設定を担当する運用担当者
  • JupyterやWebサービスをクラウドで公開したい開発者
    専門用語はできるだけ控え、手を動かしながら理解できるように具体例を交えて解説します。

本書で扱う主な内容

  • ポート番号の基本と役割
  • EC2やセキュリティグループでの設定方法
  • よく使われる代表的なポート番号の例
  • Network Firewallやサービス別の設定例
  • カスタムポートの設定とセキュリティ上の注意点
    各章で設定例や注意点を示し、実務で役立つ知識を提供します。

使い方のおすすめ

目的に応じて章を読み進めてください。まずは第2章で基本を押さすと、その後の設定や応用が分かりやすくなります。設定例は実際の運用を想定しているので、手元の環境で試しながら進めることをおすすめします。

ポート番号の基本とAWSでの役割

ポート番号とは

ポート番号は、同じIPアドレス上で動く複数のプログラムを区別するための番号です。電話番号の内線のように、相手(IPアドレス)の中でどのアプリに届けるかを示します。普段使う例では、SSHが22番、HTTPが80番、HTTPSが443番です。

よく使われるポートの例

  • 22:SSH(リモート接続)
  • 80:HTTP(非暗号化のウェブ)
  • 443:HTTPS(暗号化されたウェブ)
  • 3306:MySQL(データベース)
  • 8888:Jupyter Notebook(開発用)

具体例を示すと、ブラウザでhttps://example.com:443と指定すると、ウェブの暗号化通信を意味します。

AWSでの役割

AWSではポート番号を使って「どのサービスに通信を届けるか」と「どこからアクセスを許可するか」を制御します。EC2ならインスタンス上のサービス宛にポートを向け、RDSならデータベースの接続ポートを使います。WorkSpacesやELBもそれぞれ受け取るポートがあります。

セキュリティ面では、セキュリティグループやネットワークACLでポートを開閉してアクセスを制御します。たとえば、公開SSHは通常22番を開けますが、不要なら閉じておくと安全です。

実務でのポイント

  • 必要なポートだけ開ける。不要なポートは閉じる。
  • デフォルト番号は分かりやすい反面狙われやすいので、代替のポートを使う場合はAWS側の設定も忘れず行う。
  • サービスごとに使うポートを把握すると、トラブル解決が速くなります。

EC2インスタンスでのJupyter Notebookのポート設定

概要

Jupyter Notebookはデフォルトでポート8888で動きます。設定ファイルに書き込むと別の番号に変えられます。IPの指定でアクセス範囲を制御できます。

ポート番号の変更方法

設定ファイル(~/.jupyter/jupyter_server_config.py など)に次を追加します。

c.ServerApp.port = 8888
c.ServerApp.ip = '0.0.0.0'  # ローカルのみなら 'localhost'
c.ServerApp.open_browser = False

ファイルが無ければ jupyter notebook --generate-config で作れます。

IP設定の意味

‘localhost’ はサーバ上のみ接続可能です。’0.0.0.0′ は外部からの接続を受け付けます。外部公開は便利ですが安全対策が必須です。

セキュリティグループとの連携

EC2のセキュリティグループでインバウンドルールに該当ポートを追加します。ただし全世界(0.0.0.0/0)ではなく、接続元IPを限定するかSSHトンネルを使うことをおすすめします。

接続例

  • 直接: http://<パブリックIP>:8888/?token=…
  • SSHトンネル(安全): ssh -i key.pem -L 8888:localhost:8888 ec2-user@<パブリックIP> その後ブラウザで http://localhost:8888

よくあるトラブルと対処

  • トークンが見つからない:サーバ起動時のログを確認
  • ポート競合:ss -tlnpnetstatで確認
  • ファイアウォールが遮断:ufwやiptablesの設定を確認

セキュリティグループでのポート番号制御

概要

セキュリティグループは、EC2などに対する「仮想ファイアウォール」です。ポート番号を指定して通信を許可するルールを作成します。拒否ルールは直接作れず、必要な通信だけを許可する設計になります。

基本設定(受信/送信)

  • 受信(Inbound):外部からインスタンスへ入る通信を制御します。例:SSH(TCP 22)やHTTP(TCP 80)。
  • 送信(Outbound):インスタンスから外部へ出る通信を制御します。多くの場合、全許可にしておきます。

セキュリティグループはステートフルです。受信を許可すれば応答パケットは自動で許されます。

送信元の指定方法

  • カスタムIP/CIDR:特定のIPやネットワークだけ許可します(推奨)。
  • 0.0.0.0/0(すべてのIPv4):公開サービス向け。最小限にとどめます。
  • My IP:自分の端末からだけ接続したいときに便利です。

ポート範囲とプロトコル

  • 単一ポート:例 TCP 22
  • 範囲指定:例 TCP 8000-8100(開発用複数ポート)
  • プロトコル:TCP/UDPを指定します。用途に応じて選びます。

ルール管理のコツ

  • コメント欄に用途や担当者を記載します(例:「Jupyter — 開発A」)。
  • 役割別にセキュリティグループを分け、最小権限で運用します。
  • 公開ポートはログや監査と合わせて管理します。

実例

  • SSH:TCP 22、送信元は自分のIP(/32)
  • Jupyter:TCP 8888、送信元を社内ネットワークのCIDRに限定
  • Web公開:TCP 80/443、送信元は0.0.0.0/0

テストと注意点

  • 接続確認はcurlやnc(netcat)で行います。
  • ルールは許可のみなので、不要なポートは閉じるようにします。
  • 誰が何のために開けたか記録しておくと運用が楽になります。

ポート番号の種類と代表例

ポート番号の基本分類

ポート番号は3つの範囲に分かれます。

  • よく知られたポート(0–1023): HTTP(80)、HTTPS(443)、SSH(22)、SMTP(25)など、広く使われるサービスが割り当てられます。これらは特権ポートで、通常は管理者権限が必要です。

  • 登録済みポート(1024–49151): 独自のサービスやカスタムアプリに使いやすい範囲です。MySQL(3306)やRDP(3389)もここに含まれます。

  • 動的/プライベートポート(49152–65535): 一時的な通信やクライアント側でよく使われます。

AWSでの実務的な注意点

AWSではカスタムポートを1024–49151の範囲で使うことを推奨します。よく使われる例として、Jupyter(8888)、HTTP代替(8080)、管理用(8443、9000台)がありますが、これらは既に慣習的に使われているため避けるほうが安全です。しかしどうしても使う場合はアクセス制限や認証を強化してください。

実用的な提案

  • 公開サービスは標準ポートを使うか、明確に管理する
  • カスタムポートはチームで一覧化する
  • セキュリティグループやファイアウォールで不要なポートを閉じる

これらを守ると運用や調査が楽になります。

ポート番号とIPアドレスの関係

概要

IPアドレスは「住所」、ポート番号は「部屋番号」に例えられます。1つの住所に複数の部屋があるように、1つのIPアドレスで複数のサービスを同時に提供できます。端末やサーバーはIPアドレスとポート番号の組み合わせ(例:203.0.113.5:80)で通信相手を特定します。

同一IPで複数サービスを提供する仕組み

同じIPでもポートが違えば通信は別物として扱います。たとえばWeb(ポート80)とSSH(ポート22)を同じサーバーで動かせます。アプリケーションは自分の使うポートを開いて待ち受けます。

NAPT(NAT)の働き

家庭や社内ネットワークでは複数の端末が1つの公開IPを共有します。NAPTは端末ごとの内部IPとポートを使い、送受信のたびに公開IPと別のポートへ変換して管理します。これにより多くの端末が同時にインターネットへ出られます。

具体例

  • 公開IP 203.0.113.5 があって、内部のPC A(192.168.0.2:50000)を外向けに203.0.113.5:40001へ変換するといった具合です。
  • サーバーでJupyterを8888、Webを80で動かすと、それぞれ別のサービスとしてアクセスできます。

よくある誤解と注意点

同じポートを同じIPで二つのアプリが同時に使えません。外部からの到達性はIPとポートの両方で決まるため、ファイアウォールやポートフォワーディング設定を確認してください。

AWS Network Firewallとルール設定

概要

AWS Network FirewallはVPCの境界で通信を制御するマネージドサービスです。送信元・宛先のIP、ポート、プロトコルを指定して細かく制御できます。設定は分かりやすいルールグループで管理します。

ルールグループの種類

  • Statelessルール: 個々のパケットを高速に判定します。シンプルな5-tuple一致(送信元IP・ポート、宛先IP・ポート、プロトコル)で許可や破棄を行います。負荷を抑えたい処理に向きます。
  • Statefulルール: セッションを追跡して深い解析を行います。より複雑な条件や状態に基づく制御が可能です。

具体例(よくある設定)

  • SSH(ポート22)を外部へ向けてブロックし、管理用IPのみ許可
  • HTTP(80)とHTTPS(443)は全社から許可
  • 特定のマルウェア配信元IPを拒否
    設定は「ルールグループ→ファイアウォールポリシー→ファイアウォール」の順で適用します。

ルールの優先度と評価順

Statelessは先に評価され、該当しないパケットだけがstatefulへ進みます。ルールの順序やアクション(pass/drop)に注意してください。

ログと確認方法

ログはCloudWatch LogsやS3に送れます。テストは小さな範囲で実行し、ログとVPCフローログで挙動を確認します。

設計のポイント

  • 最小権限で開放する
  • まず許可範囲を限定し、必要に応じて広げる
  • 変更は段階的にテストする
  • ログを有効にして可視化する

AWSサービスごとのポート番号例

はじめに

AWSの各サービスは、外部や他のサービスと通信する際に特定のポートを使います。ここでは代表的なサービスとよく使われるポート番号を、実例を交えて分かりやすく示します。

EC2(仮想サーバー)

  • SSH: TCP 22(Linuxへ接続するとき)
  • HTTP: TCP 80(ウェブを公開するとき)
  • HTTPS: TCP 443(暗号化したウェブ通信)
  • Jupyter: TCP 8888(ノートブックを使うとき)

RDS(データベース)

  • MySQL/MariaDB: TCP 3306
  • PostgreSQL: TCP 5432
  • Oracle: TCP 1521
    これらはデータベースクライアントが接続するポートです。

キャッシュ・ファイルシステムなど

  • ElastiCache Redis: TCP 6379
  • ElastiCache Memcached: TCP 11211
  • EFS(NFS): TCP 2049

ネットワーク系・配信系

  • Route 53(DNS): UDP/TCP 53
  • Elastic Load Balancer / ALB: 通常は TCP 80 / 443(リスナー設定に依存)
  • CloudFront / API Gateway: TCP 443(HTTPSが基本)

その他のサービス

  • WorkSpaces(仮想デスクトップ): TCP 443(認証・接続)
  • MSK(Kafka): TCP 9092(ブローカ通信)
  • S3 / DynamoDB / Kinesis: 通常は HTTPS(TCP 443)でAPIアクセスします。これらは直接開くポートは不要で、HTTPS経由が基本です。

実務上の注意

必要なサービスだけを安全グループで開けるようにしてください。不要なポートは閉じると攻撃の面を減らせます。

ポート番号の変更とカスタム設定

概要

AWSではアプリケーションの要件に合わせてポート番号を変更できます。例えばEC2上のJupyter Notebookは設定ファイルか起動オプションでポートを変えます。カスタムポートを使うときは必ずネットワーク側(セキュリティグループやOSファイアウォール)も更新してください。

変更の基本手順

  1. ポート番号を決める(1024–65535の間で衝突しない番号)。
  2. アプリケーション設定を変更する(例:Jupyterならjupyter_notebook_config.pyでc.NotebookApp.port = 8889、または起動時に–port=8889)。
  3. EC2のセキュリティグループでインバウンドを追加(プロトコルTCP、ポート8889、アクセス元を必要最小限に)。
  4. OS側ファイアウォールを更新(ufwやiptablesで許可)。
  5. サービスを再起動して動作確認。

具体例(Jupyter Notebook)

  • 起動例: jupyter notebook –no-browser –port=8889
  • 設定例: ~/.jupyter/jupyter_notebook_config.py に c.NotebookApp.port = 8889 を追加
  • セキュリティ: セキュリティグループで8889を開け、IP制限をかける。

ALBや他サービスと連携する場合

ロードバランサーを使うときはリスナーポートとターゲットグループのポートを合わせます。ELBやALBはフロント側とインスタンス側で別々のポートを持てます。

テスト方法

curl http://<公開IP>:8889 や nc -vz 8889 で応答を確認します。

注意点

  • 公開ポートは最小限に限定し、不要なアクセスは許可しないでください。
  • 他サービスとポートが重複しないよう確認してください。

ポート番号のセキュリティ上の注意点

はじめに

ポートは通信の入口です。不要なポートを開くと攻撃の入り口を増やします。ここでは実践的な注意点を分かりやすく説明します。

最小限のポートのみ開放する

  • 必要なサービスだけを開放します。例えば、公開Webなら80/443のみ、管理用SSHは22のみなど。\n- SSHは全世界(0.0.0.0/0)に開けず、オフィスやVPNのIPに限定してください。

カスタムポートを使う時の注意

  • 他サービスと重複しない番号を選び、ドキュメントで管理します。\n- 既知のスキャンを避けるためにポート移設は補助的手段であり、唯一の対策にしないでください。

外部アクセスの制限方法

  • セキュリティグループで送信元IP/CIDRを限定します。\n- 一時的アクセスは踏み台(bastion)経由やVPNで行います。\n- AWSならNetwork ACLやFirewallで二重防御をします。

ロギングと監査

  • VPC Flow LogsやCloudTrailを有効にして、異常なアクセスを検出します。\n- ログは定期的にレビューし、アラートを設定してください。

自動化と定期点検

  • IaC(例: CloudFormation)で設定を管理し、変更履歴を残します。\n- 定期的にポートスキャンとルール整合性チェックを行います。

実践的な簡単手順

  1. 必要なポートを書き出す。\n2. セキュリティグループでIPを限定。\n3. ログと監査を有効化して運用する。

よくある落とし穴

  • 初期設定のまま0.0.0.0/0で放置する。\n- カスタムポートを記録せずに放置する。\n- ログを取っていないため侵害を見逃す。

これらを守れば、ポート管理によるリスクを大きく減らせます。必要に応じて設定例やチェックリストをお出しします。

まとめ:AWSでポート番号を正しく使うために

振り返り

ポート番号はサービスごとの入り口です。正しい番号を使い、セキュリティグループやファイアウォールで必要な通信だけを許可すると、安全な環境を作れます。よく使うポート(80、443、22など)を覚え、カスタムポートは目的とリスクを明確にして設定してください。

実践チェックリスト

  1. 必要なポートだけ開ける(最小権限の原則)。
  2. IPレンジを限定してアクセスを絞る(特に管理用ポート)。
  3. セキュリティグループとNetwork Firewallで重ねて保護する。
  4. カスタムポートはドキュメント化して変更履歴を残す。
  5. 定期的に接続試験とログ確認を行う。

よくある注意点

  • デフォルトで広く開けてしまうと攻撃対象になりやすいです。管理用ポートは必ず限定してください。ログで不審な接続がないか確認し、見つけたら速やかにルールを見直します。

最後に

用途に合わせて柔軟に設定しつつ、定期的な見直しを習慣にしてください。これで安全かつ効率的なAWS環境運用が可能になります。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

目次