ポート番号は、同じ IP アドレスの中でどのサービスが通信を受けるかを区別する番号です。 1台のサーバーで Web・SSH・DB を同時に動かせるのは、入口をこの番号で分けているからです。
番号の範囲には意味がある
使えるのは 0〜65535 で、用途によって区分されています。
| 範囲 | 呼び方 | 特徴 |
|---|---|---|
| 0〜1023 | ウェルノウンポート | 80/443/22/53 など。Linux では管理者権限がないと待ち受けできない |
| 1024〜49151 | 登録済みポート | 3306(MySQL)、5432(PostgreSQL) など |
| 49152〜 | 動的・私用ポート | 通信のたびに一時的に使われる |
2つ目の「1023以下は権限が要る」は実務でよく効きます。アプリを一般ユーザーで動かすと 80 番で待ち受けられないため、内部では 3000 番などで動かし、前段のリバースプロキシが 80/443 を受ける構成が一般的です。
待ち受けるアドレスの指定を間違えやすい
ポート番号と同じくらい重要なのが、どのアドレスで待ち受けるかです。
127.0.0.1:3000… 同じマシンの中からしか届かない0.0.0.0:3000… すべてのネットワークから届く
「ローカルでは動くのに外から見えない」の原因はほぼこれです。逆に、開発用サーバーを何気なく 0.0.0.0 で起動すると、同じネットワークの他人から見えます。
詰まったときに見るコマンド
「Address already in use」で起動できないときは、誰がそのポートを掴んでいるかを見ます。
ss -ltnp | grep :3000
「ポートを開ける」は2段階ある
サーバー側でアプリが待ち受けていること(Listen)と、経路上のファイアウォールが通していることは別です。片方だけでは通信できません。疎通しないときは、アプリが Listen しているか → 経路が許可されているかの順で切り分けます。
実務で見るポイント
- TCP と UDP は別枠。同じ53番でも許可設定は別に要る
- 標準ポートを変えるのは目くらましにはなるが防御ではない。認証を固める方が先
- クラウドではセキュリティグループとOS側の設定の二重管理になりやすい