ポート番号とは何か
ポート番号は、サーバー上で動作している通信サービスを識別するための番号です。IPアドレスが「どのホストへ接続するか」を示すのに対し、ポート番号は「そのホストのどのサービスへ接続するか」を示します。たとえば1台のサーバーでWebサーバーとSSHサーバーを同時に動かす場合、IPアドレスに加えてポート番号を使うことで、通信の届け先を分けられます。IANAも、ポート番号は異なるサービスを区別するために使われると説明しています。IANAのサービス名・ポート番号登録
ただし、ポート番号だけで安全性が決まるわけではありません。認証、暗号化、アクセス制御、ログ監視などを組み合わせて考える必要があります。
22・80・443・3306の役割
代表的なポート番号と、一般に関連づけられるサービスは次のとおりです。
| ポート番号 | 代表的なプロトコル・サービス | 主な用途 | 通信の保護 | インターネットへ公開する際の注意点 |
|---|---|---|---|---|
| 22 | SSH | サーバーへのリモート接続 | SSHの設定に依存 | 接続元、認証方式、管理対象ユーザーを制限する |
| 80 | HTTP | WebサイトやHTTP APIへの接続 | 通常は暗号化されない | HTTPSへの移行やリダイレクト設定を確認する |
| 443 | HTTPS | TLSで保護されたHTTP通信 | TLSで保護 | 証明書やTLS設定、公開範囲を確認する |
| 3306 | MySQL系サービス | データベースへの接続 | データベースと設定に依存 | アプリケーションサーバーなど必要な接続元に限定する |
IANAの登録では、22番はSSH、80番はHTTP、443番はTLS上のHTTP、3306番はMySQLとして登録されています。IANAの登録内容を確認する
これらはあくまで慣例的な対応です。サービスによっては待ち受けるポート番号を変更できるため、「ポート番号とサービスが常に一対一で固定される」とは限りません。
クライアントからサービスへ接続する流れ
接続時は、クライアントが接続先のIPアドレスまたはドメイン名とポート番号を指定して通信を開始します。サーバー側では、そのポート番号で待ち受けているサービスが接続を受け付けます。
- 接続先のドメイン名を使う場合は、名前解決によってIPアドレスを取得する。
- クライアントがIPアドレスとポート番号へ接続する。
- サーバー上のサービスが対象ポートで待ち受けていれば、接続処理が進む。
- サービス停止、ファイアウォールによる遮断、認証失敗などがあると接続できない。
そのため、接続障害ではポート番号だけでなく、名前解決、サービスの起動状態、待ち受け設定、ネットワーク経路、認証の状態を分けて確認します。
サーバー公開時に確認すること
- 外部公開が本当に必要かを確認し、不要なポートは開放しない。
- 接続元を限定できる場合は、特定のIPアドレスやネットワークだけを許可する。
- 22番では、強固な認証方式や管理対象ユーザーの制限を検討する。
- 3306番では、原則としてアプリケーションサーバーなど必要な接続元に限定する。
- 80番と443番では、利用する通信方式、リダイレクト、証明書、TLS設定を確認する。
- OSやクラウドのファイアウォール、ルーター、セキュリティグループなど複数の制御箇所を確認する。
データベースを公開する場合は、公開アクセスを必要最小限にし、信頼できるIPアドレスやネットワークだけを許可する構成が基本です。AWSのRDSドキュメントでも、公開アクセスを利用する場合は厳格なアクセス制御、強固な認証、暗号化が必要とされています。AWSによるRDSの公開・非公開アクセスの説明
なお、ポート番号を変更するだけでは十分な防御になりません。認証、ソフトウェア更新、最小権限、ログ監視、ファイアウォール設定を組み合わせて対策します。
ポート番号を確認するときの見方
- 接続先のホスト名またはIPアドレス、ポート番号、想定するサービスを整理する。
- サービスが起動しているか、対象ポートで待ち受けているかを確認する。
- ファイアウォールやセキュリティグループなど、ネットワーク経路で遮断されていないかを確認する。
- 接続できた場合も、意図したプロトコル、認証、暗号化の状態になっているかを確認する。
確認コマンドや設定ファイルの内容は、OS、クラウド、Webサーバー、データベース製品によって異なります。実際の調査では、対象環境を明示したうえで確認してください。