ポート番号とは、1台のコンピューターの中で「どのプログラム(サービス)に通信を渡すか」を表す 0〜65535 の番号です。 IPアドレスが「建物の住所」なら、ポート番号は「部屋番号」にあたります。80 は HTTP、443 は HTTPS、22 は SSH、3306 は MySQL というように、よく使うサービスには決まった番号(well-known ポート/ウェルノウンポート)があり、「この番号は何?」「このサービスのポートは?」を調べるときの共通言語になっています。

この記事では、検索されやすい30余りのポートの早見表と、用途別の一覧(Web・メール・データベース・コンテナ・監視・開発ツールなど、170行超)をまとめました。番号の根拠は、Linux の /etc/services(Ubuntu 24.04、netbase 6.4)と各製品の公式ドキュメントで一つずつ確かめています。後半では、ss・lsof・netstat・nc・curl でポートが開いているか確認するコマンドをすべて実行結果つきで載せ、Address already in use や「127.0.0.1 と 0.0.0.0 の違い」も再現して、つながらないときの切り分け手順まで追えるようにしました。

ポート番号の早見表(検索されやすい30ポート)

まずは「よく検索される番号」だけを1枚にまとめました。TCP・UDP の列は、そのサービスが主に使うトランスポートプロトコルです。

番号 TCP・UDP サービス ひとこと
20/21 TCP FTP 21 が制御、20 がデータ転送。今は暗号化される SFTP(22)や FTPS(990)に置き換えるのが一般的
22 TCP SSH リモートログイン・SCP・SFTP・ポートフォワードまで、これ1本
23 TCP Telnet 平文のリモートログイン。ネットワーク機器の設定用に残っていることがある
25 TCP SMTP メールサーバー同士の転送。クライアントからの送信は 587 を使う
53 TCP・UDP DNS 名前解決。問い合わせは主に UDP、ゾーン転送や大きな応答は TCP
67/68 UDP DHCP 67 がサーバー、68 がクライアント。IPアドレスの自動配布
80 TCP HTTP Web の基本ポート。ブラウザは http:// のとき省略する
110 TCP POP3 メール受信(ダウンロード型)。暗号化版は 995
123 UDP NTP 時刻同期。ログの時刻が合わないときに疑う
143 TCP IMAP メール受信(サーバー保管型)。暗号化版は 993
161/162 UDP SNMP 161 が問い合わせ、162 がトラップ(機器からの通知)
389 TCP・UDP LDAP ディレクトリサービス。Active Directory もここ
443 TCP・UDP HTTPS TLS で暗号化した HTTP。UDP の 443 は HTTP/3(QUIC)
445 TCP SMB Windows のファイル共有。インターネットには出さず内部ネットワーク限定で使う
465 TCP SMTPS 接続の最初から TLS で暗号化するメール送信(submissions)
587 TCP SMTP Submission メールクライアントからの送信。STARTTLS で暗号化
636 TCP・UDP LDAPS TLS で暗号化した LDAP
993 TCP IMAPS TLS で暗号化した IMAP
995 TCP POP3S TLS で暗号化した POP3
1433 TCP SQL Server Microsoft SQL Server の既定。1434/UDP は SQL Server Browser
1521 TCP Oracle Database Oracle Net のリスナー既定
2049 TCP・UDP NFS Linux/UNIX のファイル共有
3000 TCP Grafana/開発サーバー Grafana の既定。Rails や Next.js の開発サーバーもここを使う
3306 TCP MySQL MySQL/MariaDB の既定
3389 TCP RDP Windows のリモートデスクトップ
5432 TCP PostgreSQL PostgreSQL の既定
5900 TCP VNC 画面共有。ディスプレイ番号 :1 なら 5901
6379 TCP Redis Redis の既定。認証なしで公開しない
8080 TCP HTTP 代替 プロキシ・Tomcat・Jenkins など「80 の代わり」。管理者権限なしで使える
8443 TCP HTTPS 代替 「443 の代わり」。管理画面や開発環境の HTTPS に多い
27017 TCP MongoDB mongod/mongos の既定。27018 はシャード、27019 は設定サーバー

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「ポート番号一覧【2026年版】well-knownポートと確認コマンドの早見表」

早見表のうち、1521・5900・8443 以外はこの環境の /etc/services か各製品の公式ドキュメントで番号を確認しています(根拠の取り方は次の章で説明します)。1521・5900・8443 は /etc/services(netbase 6.4)には登録がなく、一般に知られた既定値として載せています。

ポート番号とは何かを3分で押さえる

IPアドレスが住所、ポート番号が部屋番号

通信の宛先は「IPアドレス+ポート番号」のセットで決まります。 IPアドレスだけでは「どのコンピューターか」までしか分からず、そのコンピューターの中で動いている Web サーバー・メールサーバー・データベースのどれに届けるかを決めるのがポート番号です。マンションに例えると、IPアドレスが建物の住所、ポート番号が部屋番号で、192.0.2.10:443 は「192.0.2.10 という建物の 443 号室(HTTPS)」という意味になります。

ポート番号は 16 ビットの整数なので 0〜65535 の範囲です(2**16 - 1 を Python で計算すると 65535)。この番号を使うのは TCP と UDP(と SCTP などの一部のプロトコル)で、どちらもポート番号の空間は独立しています。

項目 TCP UDP
つながり方 接続を確立してから送る(3ウェイハンドシェイク) 接続せずに送る(データグラム)
届いたことの保証 あり(再送・順序の保証) なし(アプリ側で補う)
向いている用途 Web、メール、SSH、データベース DNS 問い合わせ、NTP、DHCP、音声・映像、HTTP/3
待ち受けの状態名(ss) LISTEN UNCONN

IANA が決めている3つの区分(well-known ポートとは)

ポート番号の割り当ては IANA(Internet Assigned Numbers Authority)が管理しており、RFC 6335 で次の3区分が定義されています(RFC 6335 の Section 6 を今回開いて確認)。

区分 範囲 割り当て 代表例
システムポート(well-known ポート/ウェルノウンポート) 0〜1023 IANA が割り当てる 22 SSH、53 DNS、80 HTTP、443 HTTPS
ユーザーポート(登録済みポート) 1024〜49151 IANA が割り当てる 3306 MySQL、5432 PostgreSQL、6379 Redis、8080 http-alt
動的・私用ポート(エフェメラルポート) 49152〜65535 割り当てない(自由に使える) クライアント側の送信元ポート

「well-known ポート」は厳密には 0〜1023 のことですが、日常会話では 3306 や 6379 のような「有名な登録済みポート」も含めて呼ばれることが多いので、この記事の一覧は両方を載せています。なお Linux で 1023 以下のポートを待ち受けるには管理者権限(root か CAP_NET_BIND_SERVICE)が必要で、この挙動はよくある質問の章で再現しています。

エフェメラルポートの範囲(Linux の実行結果)

クライアント側(ブラウザや curl)が通信するとき、送信元ポートは OS が空いている番号を自動で割り当てます。これがエフェメラルポート(短命ポート)です。Linux の範囲は /proc/sys/net/ipv4/ip_local_port_range で確認でき、この環境(Ubuntu 24.04)では 32768〜60999 でした。

cat /proc/sys/net/ipv4/ip_local_port_range
32768   60999

IANA の区分(49152〜)とは少しずれていて、Linux は 32768 から使います。実際に curl でローカルの 7692 番に接続した直後に ss で見ると、送信元に 34522 番が使われていました(下の TIME-WAIT 行の右側)。

curl -s http://127.0.0.1:7692/ > /dev/null; ss -tan 'sport = :7692'
State     Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN    0      5            0.0.0.0:7692      0.0.0.0:*
TIME-WAIT 0      0          127.0.0.1:7692    127.0.0.1:34522

Windows の既定範囲は 49152〜65535 で、netsh int ipv4 show dynamicport tcp で確認できます(Windows は今回未実行。一般に知られた仕様として記載)。

同じ番号を TCP と UDP で別々に使える(実行結果)

TCP と UDP のポート空間は独立しているので、同じ番号を TCP と UDP で同時に待ち受けできます。 Python で 7697 番を両方 bind して ss で見ると、udp と tcp の行が並びます。

# tcp_udp_same_port.py(Python 3.11)
import socket, time
tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp.bind(("127.0.0.1", 7697)); tcp.listen()
udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp.bind(("127.0.0.1", 7697))
print("TCP 7697 と UDP 7697 を同時に待ち受け中")
time.sleep(30)
python3 tcp_udp_same_port.py &
ss -tulnp 'sport = :7697'
Netid State  Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
udp   UNCONN 0      0          127.0.0.1:7697      0.0.0.0:*    users:(("python3",pid=1319,fd=4))
tcp   LISTEN 0      128        127.0.0.1:7697      0.0.0.0:*    users:(("python3",pid=1319,fd=3))

これが「53 は TCP と UDP の両方」「443/UDP は HTTP/3」のように、同じ番号でも TCP と UDP で別のプロトコルが動く理由です。RFC 6335 以降、IANA は申請されたトランスポートプロトコルにだけ番号を割り当てる運用になっています(Section 8.1.2 を確認)。

番号の調べ方:/etc/services と getent

Linux には IANA 登録済みのポートの一覧 /etc/services(Debian/Ubuntu では netbase パッケージ)が入っています。「この番号は何?」も「このサービスは何番?」も getent services で引けます(grep でも可)。 この記事で「/etc/services で確認」と書いている番号は、すべて次のように実際に引いたものです。

getent services 443        # 番号 → サービス名
getent services 443/udp
getent services ssh        # サービス名 → 番号
getent services 6379
getent services 27017      # 登録がなければ何も出ず、終了コード 2
echo "exit=$?"
https                 443/tcp
https                 443/udp
ssh                   22/tcp
redis                 6379/tcp
exit=2
grep -wE '^(ssh|http|https|smtp)' /etc/services
ssh     22/tcp              # SSH Remote Login Protocol
smtp        25/tcp      mail
http        80/tcp      www     # WorldWideWeb HTTP
https       443/tcp             # http protocol over TLS/SSL
https       443/udp             # HTTP/3
http-alt    8080/tcp    webcache    # WWW caching service

この環境の /etc/services は 361 行で、冒頭に「IANA の登録簿から更新している」「必要なら nmap パッケージの一覧を使う」と書かれています。MongoDB(27017)や Kafka(9092)のように製品ごとに定めた番号は載っていないので、そうした番号は各製品の公式ドキュメントで確認しました(記事末尾の「参考(出典)」に列挙)。開けなかったものは「一般に知られた既定値」と注記しています。

用途別のポート番号一覧(170行超)

「公開の目安」列は、インターネットに公開して使うのが前提のポートか、内部ネットワーク限定で使うのが基本のポートかを示しています。「内部限定が基本」のポートを外から使うときは、VPN やリバースプロキシ、接続元の IP 制限を挟むのが定石です。各表の下に、番号をどこで確認したか(/etc/services/公式ドキュメント/一般に知られた既定値)を書いています。

Web・HTTP のポート番号

番号 TCP・UDP サービス 用途 公開の目安
80 TCP HTTP Web サイト・API 公開して使う
443 TCP・UDP HTTPS TLS で暗号化した Web。UDP の 443 は QUIC 上の HTTP/3 公開して使う
8080 TCP http-alt プロキシ、Tomcat、Jenkins、Spring Boot など「80 の代わり」 公開可(リバースプロキシ経由が一般的)
8443 TCP HTTPS 代替 管理画面や Tomcat の HTTPS 公開可(制限つき)
8000 TCP 開発用 HTTP python3 -m http.server の既定、Django runserver、uvicorn(FastAPI) 内部限定が基本
8888 TCP Jupyter Jupyter Notebook/JupyterLab の既定 内部限定が基本
3000 TCP 開発サーバー/Grafana Rails、Next.js、Express の例、Grafana 内部限定が基本
4200 TCP Angular CLI ng serve の既定 内部限定が基本
5173 TCP Vite vite 開発サーバーの既定 内部限定が基本
5000 TCP Flask/ASP.NET Core flask run の既定、ASP.NET Core の HTTP 既定(5001 が HTTPS) 内部限定が基本
9000 TCP PHP-FPM ほか PHP-FPM(FastCGI)、SonarQube、MinIO API、Portainer など複数の製品が使う 内部限定が基本
8081 TCP tproxy/代替 HTTP Nexus Repository、8080 が埋まったときの代替 内部限定が基本

根拠:80・443・8080・8081 は /etc/services で確認(8081 は tproxy として登録)。3000 は Grafana 公式ドキュメント、8000 は python3 -m http.server --help の表示(default: 8000)で確認。それ以外は一般に知られた既定値。

メールのポート番号

番号 TCP・UDP サービス 用途 公開の目安
25 TCP SMTP メールサーバー間の転送(MTA 同士) 公開して使う(メールサーバーのみ)
465 TCP SMTPS(submissions) クライアントからの送信。接続の最初から TLS(暗黙 TLS) 公開して使う
587 TCP Submission クライアントからの送信。STARTTLS で暗号化に切り替え 公開して使う
110 TCP POP3 メール受信(端末にダウンロード) 公開可(995 への移行が一般的)
995 TCP POP3S TLS で暗号化した POP3 公開して使う
143 TCP IMAP メール受信(サーバーに保管) 公開可(993 への移行が一般的)
993 TCP IMAPS TLS で暗号化した IMAP 公開して使う

根拠:25・465・587・110・995・143・993 はすべて /etc/services で確認(465 は submissions、587 は submission、143 は imap2 として登録)。

ファイル転送・共有のポート番号

番号 TCP・UDP サービス 用途 公開の目安
20 TCP FTP データ FTP のデータ転送(アクティブモード) 公開可(FTPS/SFTP が一般的)
21 TCP FTP 制御 FTP のコマンド 公開可(FTPS/SFTP が一般的)
22 TCP SFTP/SCP SSH 上のファイル転送 公開可(制限つき)
69 UDP TFTP ネットワーク機器のファームウェア転送・PXE ブート 内部限定が基本
115 TCP SFTP(Simple File Transfer Protocol) SSH の SFTP とは別の初期のプロトコル。番号の登録だけが残っている 内部限定が基本
139 TCP NetBIOS セッション SMB over NetBIOS(従来の Windows 共有) 内部限定が基本
445 TCP SMB Windows ファイル共有・プリンター共有、Samba 内部限定が基本
2049 TCP・UDP NFS Linux/UNIX のファイル共有 内部限定が基本
873 TCP rsync rsync デーモンによる同期 内部限定が基本
989/990 TCP FTPS TLS で暗号化した FTP(989 データ、990 制御) 公開可(制限つき)
548 TCP AFP macOS 向けのファイル共有(afpovertcp) 内部限定が基本
111 TCP・UDP sunrpc(portmapper) NFS など RPC サービスのポート案内 内部限定が基本

根拠:20・21・22・69・139・445・2049・873・989・990・548・111 は /etc/services で確認(445 は microsoft-ds、139 は netbios-ssn、548 は afpovertcp として登録)。115 は一般に知られた仕様。

リモート操作のポート番号

番号 TCP・UDP サービス 用途 公開の目安
22 TCP SSH Linux/macOS/ネットワーク機器のリモートログイン 公開可(鍵認証・接続元制限つき)
23 TCP Telnet 平文のリモートログイン。機器の設定用に残ることがある 内部限定が基本
3389 TCP RDP Windows リモートデスクトップ(ms-wbt-server) 内部限定が基本(VPN 経由で使う)
5900〜5902 TCP VNC 画面共有。5900 がディスプレイ :0、5901 が :1、5902 が :2 内部限定が基本
5985 TCP WinRM(HTTP) Windows のリモート管理・PowerShell Remoting 内部限定が基本
5986 TCP WinRM(HTTPS) TLS 版の WinRM 内部限定が基本

根拠:22・23・3389 は /etc/services で確認。5900〜5902・5985・5986 は一般に知られた既定値。

名前解決・時刻・ネットワーク管理のポート番号

番号 TCP・UDP サービス 用途 公開の目安
53 TCP・UDP DNS 名前解決。通常の問い合わせは UDP、ゾーン転送や大きな応答は TCP 権威 DNS は公開して使う/キャッシュ DNS は内部限定
853 TCP・UDP DNS over TLS/QUIC 暗号化した DNS(domain-s) 公開して使う
67/68 UDP DHCP 67 サーバー(bootps)、68 クライアント(bootpc) 内部限定が基本
546/547 UDP DHCPv6 546 クライアント、547 サーバー 内部限定が基本
123 UDP NTP 時刻同期 公開可(公開 NTP サーバーのみ)
161 UDP SNMP 機器の監視・問い合わせ 内部限定が基本
162 UDP SNMP トラップ 機器からの通知 内部限定が基本
514 UDP syslog ログ転送。TCP の 514 は /etc/services では shell(rsh)で、syslog over TCP の 514 は慣例 内部限定が基本
6514 TCP syslog-tls TLS で暗号化したログ転送 内部限定が基本
179 TCP BGP ルーター間の経路交換。Kubernetes の Calico も使う 内部限定が基本(対向ルーターとのみ)
520 UDP RIP 経路交換(route) 内部限定が基本
1812/1813 UDP RADIUS 1812 認証、1813 アカウンティング 内部限定が基本
1645/1646 UDP RADIUS(旧) 従来の RADIUS 認証/アカウンティング 内部限定が基本
5353 UDP mDNS .local の名前解決(Bonjour/Avahi) 内部限定が基本(同一ネットワーク内)
5355 UDP LLMNR Windows のローカル名前解決 内部限定が基本
1900 UDP SSDP UPnP の機器探索 内部限定が基本

根拠:53・853・67・68・546・547・123・161・162・514・6514・179・520・1812・1813・5353 は /etc/services で確認。1645/1646 は /etc/services では datametrics/sa-msg-port として登録されており、RADIUS の旧既定としては一般に知られた値。5355・1900 は一般に知られた既定値。

認証・ディレクトリのポート番号

番号 TCP・UDP サービス 用途 公開の目安
88 TCP・UDP Kerberos チケット発行(KDC)。Active Directory の認証 内部限定が基本
389 TCP・UDP LDAP ディレクトリの検索・認証。Active Directory 内部限定が基本
636 TCP・UDP LDAPS TLS で暗号化した LDAP 内部限定が基本
464 TCP・UDP kpasswd Kerberos のパスワード変更 内部限定が基本
1812/1813 UDP RADIUS 無線 LAN・VPN の認証とアカウンティング 内部限定が基本
1645/1646 UDP RADIUS(旧) 従来の RADIUS 内部限定が基本
3268/3269 TCP グローバルカタログ Active Directory のフォレスト横断検索(3269 は TLS) 内部限定が基本
49 TCP・UDP TACACS+ ネットワーク機器の認証・認可 内部限定が基本

根拠:88・389・636・464・1812・1813・49 は /etc/services で確認。3268/3269 は一般に知られた既定値。

データベースのポート番号

番号 TCP・UDP サービス 用途 公開の目安
1433 TCP SQL Server Microsoft SQL Server(ms-sql-s) 内部限定が基本
1434 UDP SQL Server Browser 名前付きインスタンスのポート案内(ms-sql-m) 内部限定が基本
1521 TCP Oracle Database Oracle Net リスナー 内部限定が基本
3306 TCP MySQL/MariaDB クラシックプロトコル 内部限定が基本
33060 TCP MySQL X Protocol MySQL Shell・ドキュメントストア 内部限定が基本
5432 TCP PostgreSQL PostgreSQL(この記事の検証環境でも 127.0.0.1:5432 で待ち受け) 内部限定が基本
50000 TCP IBM Db2 Db2 の既定 内部限定が基本
5984 TCP CouchDB HTTP API 内部限定が基本
7000/7001 TCP Cassandra ノード間 7000 が平文、7001 が TLS のノード間通信 内部限定が基本
9042 TCP Cassandra CQL クライアント接続 内部限定が基本
8529 TCP ArangoDB HTTP API 内部限定が基本
27017 TCP MongoDB mongod/mongos 内部限定が基本
27018 TCP MongoDB(シャード) --shardsvr のとき 内部限定が基本
27019 TCP MongoDB(設定サーバー) --configsvr のとき 内部限定が基本

根拠:1433・1434・3306・5432 は /etc/services で確認。27017〜27019 は MongoDB 公式ドキュメント(Default MongoDB Port)で確認。1521・33060・50000・5984・7000/7001・9042・8529 は一般に知られた既定値(なお /etc/services の 7000 は bbs/afs3-fileserver という別の登録です)。

キャッシュ・メッセージングのポート番号

番号 TCP・UDP サービス 用途 公開の目安
6379 TCP Redis キャッシュ・セッション・キュー 内部限定が基本
26379 TCP Redis Sentinel 監視・フェイルオーバー 内部限定が基本
11211 TCP・UDP Memcached キャッシュ 内部限定が基本
5672 TCP AMQP(RabbitMQ) メッセージキュー 内部限定が基本
5671 TCP AMQPS TLS で暗号化した AMQP 内部限定が基本
15672 TCP RabbitMQ 管理 UI management プラグイン 内部限定が基本
9092 TCP Kafka ブローカー --bootstrap-server localhost:9092 内部限定が基本
9093 TCP Kafka コントローラー/TLS リスナー KRaft のコントローラーや TLS リスナーに使われることが多い(Alertmanager と同じ番号) 内部限定が基本
2181 TCP ZooKeeper クライアント接続(2888/3888 はノード間) 内部限定が基本
4222 TCP NATS クライアント接続(8222 が監視、6222 がクラスタ) 内部限定が基本
1883 TCP MQTT IoT 向けメッセージング 公開可(8883 の TLS 版が一般的)
8883 TCP MQTT over TLS TLS で暗号化した MQTT 公開して使う
61616 TCP ActiveMQ(OpenWire) メッセージブローカー 内部限定が基本
61613 TCP STOMP テキストベースのメッセージングプロトコル 内部限定が基本

根拠:6379・5672・5671 は /etc/services で確認(6379 は Redis 公式の redis.conf「default is 6379」でも確認)。9092 は Kafka 公式クイックスタートで確認。26379・11211・15672・9093・2181・4222・1883・8883・61616・61613 は一般に知られた既定値。

検索・ログ・監視のポート番号

番号 TCP・UDP サービス 用途 公開の目安
9200 TCP Elasticsearch HTTP REST API。既定は 9200〜9300 の範囲から空いている最初の番号 内部限定が基本
9300 TCP Elasticsearch transport ノード間通信。既定は 9300〜9400 内部限定が基本
5601 TCP Kibana 可視化 UI 内部限定が基本
9090 TCP Prometheus メトリクス収集・UI(localhost:9090) 内部限定が基本
9100 TCP Node Exporter ホストのメトリクス 内部限定が基本
9093 TCP Alertmanager アラート配信 内部限定が基本
9091 TCP Pushgateway バッチからのメトリクス受け取り 内部限定が基本
3000 TCP Grafana ダッシュボード(http_port 既定 3000) 内部限定が基本(公開するならリバースプロキシ経由)
8086 TCP InfluxDB 時系列データベースの HTTP API 内部限定が基本
5044 TCP Logstash(Beats 入力) Filebeat などからの受信 内部限定が基本
24224 TCP・UDP Fluentd forward ログ転送 内部限定が基本
4317 TCP OTLP gRPC OpenTelemetry Collector の受信 内部限定が基本
4318 TCP OTLP HTTP OpenTelemetry Collector の受信(HTTP/protobuf) 内部限定が基本
16686 TCP Jaeger UI 分散トレースの UI 内部限定が基本
10050/10051 TCP Zabbix 10050 エージェント、10051 サーバー(trapper) 内部限定が基本

根拠:9200・9300 は Elasticsearch 公式(Networking settings)、9090 は Prometheus 公式(Getting started)、3000 は Grafana 公式(Configure Grafana)で確認。10050・10051 は /etc/services で確認。残りは一般に知られた既定値。

コンテナ・オーケストレーションのポート番号

番号 TCP・UDP サービス 用途 公開の目安
2375 TCP Docker デーモン(TLS なし) リモート API 内部限定が基本(通常は UNIX ソケットを使う)
2376 TCP Docker デーモン(TLS) 証明書つきリモート API 内部限定が基本
6443 TCP Kubernetes API server kubectl や各コンポーネントの入口 内部限定が基本(公開時は認証・接続元制限)
2379/2380 TCP etcd 2379 クライアント API、2380 ピア通信 内部限定が基本
10250 TCP kubelet API コントロールプレーンからノードへ 内部限定が基本
10256 TCP kube-proxy ヘルスチェック 内部限定が基本
10257 TCP kube-controller-manager コントロールプレーン内部 内部限定が基本
10259 TCP kube-scheduler コントロールプレーン内部 内部限定が基本
30000〜32767 TCP・UDP NodePort Service を各ノードのポートで公開 公開可(LoadBalancer/Ingress 経由が一般的)
8500 TCP Consul HTTP API/UI サービスディスカバリ 内部限定が基本
8600 TCP・UDP Consul DNS DNS インターフェース 内部限定が基本
4789 UDP VXLAN オーバーレイネットワーク(Docker Swarm など) 内部限定が基本
179 TCP BGP(Calico) ノード間の経路交換 内部限定が基本

根拠:6443・2379〜2380・10250・10256・10257・10259・30000〜32767 は Kubernetes 公式(Ports and Protocols)で確認(公式の表は NodePort の 30000〜32767 だけ TCP と UDP の両方の行があり、それ以外はすべて TCP)。179 は /etc/services で確認。2375・2376・8500・8600・4789 は一般に知られた既定値。

開発でよく使う既定ポート(何のツールの既定か)

番号 TCP・UDP サービス 用途 公開の目安
3000 TCP Rails/Next.js/Express の例 rails server、next dev の既定 内部限定が基本
3001 TCP 3000 の次 Create React App や Next.js が 3000 使用中に提案する代替 内部限定が基本
4200 TCP Angular CLI ng serve 内部限定が基本
5173 TCP Vite vite(Vue/React/Svelte のテンプレート) 内部限定が基本
8000 TCP Python 系 python3 -m http.server、Django runserver、uvicorn 内部限定が基本
8080 TCP Java 系ほか Tomcat、Spring Boot(server.port)、Jenkins 内部限定が基本
8081 TCP 代替 HTTP Nexus Repository、8080 が埋まったときの代替 内部限定が基本
8888 TCP Jupyter Notebook/Lab 内部限定が基本
9000 TCP PHP-FPM/SonarQube/MinIO 複数のツールが同じ番号を使うので衝突しやすい 内部限定が基本
9229 TCP Node.js インスペクター node --inspect の既定(127.0.0.1:9229) 内部限定が基本
35729 TCP LiveReload ブラウザ自動リロード 内部限定が基本
1313 TCP Hugo hugo server 内部限定が基本
4000 TCP Jekyll/Phoenix jekyll serve、mix phx.server 内部限定が基本

根拠:8000 は python3 -m http.server --help、9229 は node --help の表示で確認(Node 22.22.2)。3000 は Grafana 公式、8080・8081 は /etc/services で確認。残りは一般に知られた既定値(1313 は /etc/services では xtel として別の登録があります)。

VPN・トンネルのポート番号

番号 TCP・UDP サービス 用途 公開の目安
500 UDP IKE(isakmp) IPsec の鍵交換 公開して使う
4500 UDP IPsec NAT-T NAT 越えの IPsec 公開して使う
1194 TCP・UDP OpenVPN 既定は UDP 公開して使う
51820 UDP WireGuard 設定例で広く使われる番号(ListenPort で指定) 公開して使う
1723 TCP PPTP 制御チャネル(データは GRE) 公開可(他方式への移行が一般的)
1701 UDP L2TP 通常は IPsec(500/4500)と組み合わせる。/etc/services では l2f 公開して使う
1080 TCP SOCKS プロキシ(ssh -D の動的フォワードでも使う) 内部限定が基本
443 TCP SSL-VPN 多くの VPN 製品が HTTPS と同じ番号で待ち受ける 公開して使う

根拠:500・4500・1194・1701・1080・443 は /etc/services で確認。51820・1723 は一般に知られた既定値。

Windows 系のポート番号

番号 TCP・UDP サービス 用途 公開の目安
135 TCP RPC エンドポイントマッパー(epmap) DCOM・WMI の入口 内部限定が基本
137 UDP NetBIOS 名前サービス 名前解決 内部限定が基本
138 UDP NetBIOS データグラム ブラウジング 内部限定が基本
139 TCP NetBIOS セッション SMB over NetBIOS 内部限定が基本
445 TCP SMB ファイル・プリンター共有、Active Directory の SYSVOL 内部限定が基本
3389 TCP RDP リモートデスクトップ 内部限定が基本
5985/5986 TCP WinRM PowerShell Remoting(5986 が HTTPS) 内部限定が基本
88 TCP・UDP Kerberos ドメイン認証 内部限定が基本
389/636 TCP・UDP LDAP/LDAPS Active Directory 内部限定が基本
3268/3269 TCP グローバルカタログ フォレスト横断の検索 内部限定が基本
1433 TCP SQL Server データベース 内部限定が基本
5355 UDP LLMNR ローカル名前解決 内部限定が基本
1900/2869 UDP/TCP SSDP/UPnP 機器探索(1900 UDP)とイベント通知(2869 TCP) 内部限定が基本

根拠:135・137・138・139・445・3389・88・389・636・1433 は /etc/services で確認。5985/5986・3268/3269・5355・1900/2869 は一般に知られた既定値。

その他よく聞かれる番号

番号 TCP・UDP サービス 用途 公開の目安
0 — 「空いている番号を OS に選ばせる」 bind に 0 を渡すと OS がエフェメラルポートを割り当てる(宛先には使えない) —
7 TCP・UDP echo 受け取ったデータをそのまま返す(テスト用) 内部限定が基本
13 TCP・UDP daytime 日時を文字列で返す 内部限定が基本
19 TCP・UDP chargen 文字列を流し続ける(テスト用) 内部限定が基本
37 TCP・UDP time 時刻を 32 ビット整数で返す(NTP 以前の方式) 内部限定が基本
43 TCP whois ドメイン・IP の登録情報照会 公開して使う
79 TCP finger ユーザー情報の照会 内部限定が基本
113 TCP ident(auth) 接続元ユーザーの照会。IRC サーバーが問い合わせる 内部限定が基本
554 TCP・UDP RTSP ネットワークカメラや動画配信の制御 内部限定が基本
631 TCP IPP CUPS の印刷 内部限定が基本
1900 UDP SSDP UPnP の機器探索 内部限定が基本
3478 TCP・UDP STUN/TURN WebRTC の NAT 越え(5349 が TLS) 公開して使う
5060/5061 TCP・UDP SIP IP 電話の呼制御(5061 が TLS) 公開可(制限つき)
5222/5269 TCP XMPP チャット(5222 クライアント、5269 サーバー間) 公開して使う
5353 UDP mDNS .local の名前解決 内部限定が基本
5355 UDP LLMNR Windows のローカル名前解決 内部限定が基本
6000 TCP X11 X Window System のディスプレイ :0(:1 なら 6001) 内部限定が基本
6660〜6669 TCP IRC 6667 が代表(ircd)。6697 は TLS(ircs-u) 公開して使う
6881〜6889 TCP・UDP BitTorrent ピア間通信 公開して使う
8291 TCP Winbox MikroTik ルーターの管理ツール 内部限定が基本
9418 TCP git git:// プロトコル 公開可(HTTPS/SSH が一般的)
10000 TCP Webmin サーバー管理 UI 内部限定が基本
65535 — 最大値 16 ビットの上限。これより大きい番号は存在しない —

根拠:7・13・19・37・43・79・113・554・631・5060/5061・5222/5269・5353・6000・6667/6697・9418・10000 は /etc/services で確認。1900・3478・5355・6660〜6669 の範囲・6881〜6889・8291 は一般に知られた既定値。

ポート 0 の挙動は Python で確認できます。 0 を指定して bind すると、OS がエフェメラルポートの範囲から空いている番号を選びます(この環境では 52077 が選ばれました。実行のたびに変わります)。

import socket
s = socket.socket()
s.bind(("127.0.0.1", 0))      # 0 を指定すると OS が空きポートを選ぶ
print("OS が選んだポート:", s.getsockname()[1])
s.close()
OS が選んだポート: 52077

ポートが開いているか確認するコマンド(すべて実行結果つき)

ここからは「ポートを確認する」コマンドです。「自分のマシンが待ち受けているか(ss・lsof・netstat)」と「相手のポートに届くか(nc・curl・/dev/tcp)」は別の確認なので、分けて載せます。待ち受け役として、作業フォルダで Python の簡易 HTTP サーバーを 7692 番で起動して使いました。

検証環境と待ち受け役の起動

項目 内容
OS Ubuntu 24.04.4 LTS(コンテナ、root ユーザー)
ss iproute2-6.1.0
lsof 4.95.0
netstat net-tools 2.10
nc OpenBSD netcat(Debian patchlevel 1.226-1ubuntu2)
curl 8.5.0
Python 3.11.15(待ち受け役の http.server)
Node.js 22.22.2(EADDRINUSE の再現)
cd 作業用フォルダ          # 公開してよいファイルだけがあるフォルダで起動する
echo '<h1>port test 7692</h1>' > index.html
python3 -m http.server 7692 &
Serving HTTP on 0.0.0.0 port 7692 (http://0.0.0.0:7692/) ...

待ち受けているポートを一覧する:ss -tulnp

ss -tulnp は「TCP(t)と UDP(u)の、待ち受け中(l)のソケットを、名前解決せず数字のまま(n)、プロセス名つき(p)で」表示します。 現在の Linux ではこれが基本形です。

ss -tulnp
Netid State  Recv-Q Send-Q Local Address:Port  Peer Address:PortProcess
tcp   LISTEN 0      200        127.0.0.1:5432       0.0.0.0:*    users:(("postgres",pid=521,fd=6))
…(省略)…
tcp   LISTEN 0      5            0.0.0.0:7692       0.0.0.0:*    users:(("python3",pid=1081,fd=3))

見方のポイントは次の3つです。

列 意味 上の例
Local Address:Port どのアドレスの何番で待ち受けているか。0.0.0.0 は全インターフェース、127.0.0.1 は自分自身からのみ PostgreSQL は 127.0.0.1:5432(外から届かない)、http.server は 0.0.0.0:7692(外からも届く)
State TCP は LISTEN、UDP は UNCONN LISTEN
Process 使っているプロセス名と PID python3、pid=1081

Process 列は root(または sudo)で実行したときに表示されます。一般ユーザーだと自分のプロセス以外は空欄になるので、PID が出ないときは sudo ss -tulnp を試してください。

特定のポートだけを見る:ss・lsof・netstat

特定の番号だけ知りたいときは、ss のフィルター 'sport = :番号' が一番速いです。 ss -tln | grep ':7692' でも同じことができます。

ss -tlnp 'sport = :7692'
State  Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0      5            0.0.0.0:7692      0.0.0.0:*    users:(("python3",pid=1081,fd=3))

lsof -i :番号 は「そのポートを開いているファイル(ソケット)」を一覧します。接続中のクライアント側も含めて全部出るので、待ち受けだけに絞るなら -sTCP:LISTEN を付けます。-nP は名前解決とポート名変換(7692 を http-alt のように表示すること)を止めるオプションで、出力が安定します。

lsof -i :7692
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python3 1081 root    3u  IPv4   3761      0t0  TCP *:7692 (LISTEN)
lsof -nP -iTCP:7692 -sTCP:LISTEN
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python3 1081 root    3u  IPv4   3761      0t0  TCP *:7692 (LISTEN)

netstat -tulnp は ss -tulnp と同じ意味のオプションで、net-tools パッケージが入っていれば使えます(Ubuntu 24.04 では apt install net-tools で追加。この環境には入っていました)。新しい環境では ss が標準なので、netstat が無ければ ss に読み替えてください。

netstat -tulnp | grep -E 'Proto|:7692'   # 見出し行と 7692 の行だけ表示
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:7692            0.0.0.0:*               LISTEN      1081/python3

3つのコマンドの使い分けを表にまとめます。

コマンド 向いている場面 備考
ss -tulnp 待ち受け一覧をまず見る 最速。現在の Linux の標準
ss -tlnp 'sport = :7692' 特定ポートだけ見る フィルター構文はスペースの位置に注意(sport = :7692)
lsof -i :7692 接続中のものも含めて「誰が使っているか」を見る -t を付けると PID だけを出力(スクリプト向き)

相手のポートに届くか確かめる:nc・curl・bash の /dev/tcp

「待ち受けている」と「届く」は別です。相手側(別ホストやコンテナ)から見て接続できるかは、クライアント役のコマンドで確かめます。

nc -zv ホスト 番号 は、接続だけして(-z)結果を表示(-v)します。開いていれば succeeded!、閉じていれば Connection refused です。

nc -zv localhost 7692        # 開いているポート
echo "exit=$?"
nc -zv localhost 7693        # 何も待ち受けていないポート
echo "exit=$?"
Connection to localhost (127.0.0.1) 7692 port [tcp/*] succeeded!
exit=0
nc: connect to localhost (127.0.0.1) port 7693 (tcp) failed: Connection refused
exit=1

タイムアウトを付けるなら -w 秒数 です。応答のない宛先(ファイアウォールで落とされている、経路がないなど)は timed out になります。この違いが切り分けの鍵になるので、後の章でまとめます。

nc -zv -w 3 10.255.255.1 7692
nc: connect to 10.255.255.1 port 7692 (tcp) timed out: Operation now in progress

curl -v は、TCP の接続だけでなく HTTP の応答まで確かめられます。Connected to の行で接続成功、< HTTP/1.0 200 OK の行でアプリケーションが応答していることが分かります。

curl -v -s -o /dev/null http://127.0.0.1:7692/
*   Trying 127.0.0.1:7692...
* Connected to 127.0.0.1 (127.0.0.1) port 7692
> GET / HTTP/1.1
> Host: 127.0.0.1:7692
> User-Agent: curl/8.5.0
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Server: SimpleHTTP/0.6 Python/3.11.15
< Date: Fri, 02 Oct 2026 06:26:18 GMT
< Content-type: text/html
< Content-Length: 24
…(省略)…
* Closing connection

ステータスコードだけ欲しいときは -w '%{http_code}' が便利です。接続できないときは 000 と終了コード 7、タイムアウトは終了コード 28 になります。

curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:7692/
curl -v -s http://127.0.0.1:7693/; echo "exit=$?"
curl --connect-timeout 3 http://10.255.255.1:7692/; echo "exit=$?"
200
*   Trying 127.0.0.1:7693...
* connect to 127.0.0.1 port 7693 from 127.0.0.1 port 32948 failed: Connection refused
* Failed to connect to 127.0.0.1 port 7693 after 0 ms: Couldn't connect to server
* Closing connection
exit=7
curl: (28) Failed to connect to 10.255.255.1 port 7692 after 3002 ms: Timeout was reached
exit=28

nc も curl も入っていない最小構成のコンテナでは、bash の /dev/tcp 疑似デバイスで確認できます。 timeout 1 を付けておくと、応答がない宛先でも 1 秒で戻ります。

timeout 1 bash -c '</dev/tcp/127.0.0.1/7692' && echo open
timeout 1 bash -c '</dev/tcp/127.0.0.1/7693' && echo open || echo closed
open
bash: connect: Connection refused
bash: line 1: /dev/tcp/127.0.0.1/7693: Connection refused
closed

UDP は接続の概念がないため、nc -zuv -w 1 ホスト 番号 で succeeded! と出ても「送れた」ことまでしか分かりません(この環境では 7697/UDP の待ち受けありで succeeded!、待ち受けなしの 7698/UDP は表示なしで終了コード 1 でした)。

ポートを使っているプロセスを特定して止める(PID で)

止めるときは必ず PID を特定してから kill PID にします。 名前で広く止めるコマンド(pkill -f python など)は、同じ名前の別のプロセスまで止めてしまうので、PID を確認する一手間が安全です。ここでは 127.0.0.1 で待ち受けていた 7694 番のサーバー(この後の「127.0.0.1 と 0.0.0.0 の違い」で使ったもの)を止めます。

lsof -t -i :7694                                   # PID だけ出す
ss -tlnp 'sport = :7694' | grep -oP 'pid=\K[0-9]+' # ss から PID を抜き出す
ps -o pid,user,etime,cmd -p "$(lsof -t -i :7694)"  # 何のプロセスか確認
1218
1218
  PID USER         ELAPSED CMD
 1218 root           00:31 python3 -m http.server --bind 127.0.0.1 7694
kill 1218            # まず SIGTERM(通常終了のお願い)
sleep 1
ss -tlnp 'sport = :7694'
lsof -i :7694; echo "lsof exit=$?"
nc -zv localhost 7694
State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
lsof exit=1
nc: connect to localhost (127.0.0.1) port 7694 (tcp) failed: Connection refused

ss の結果が見出し行だけになり、lsof は該当なし(終了コード 1)、nc は Connection refused に変わりました。kill PID で止まらないときだけ kill -9 PID(SIGKILL)を使います。1行で済ませたいときは kill "$(lsof -t -i :7694)" と書けます。

Windows・Mac での確認コマンド(書き方のみ、未実行)

Windows と macOS は今回の環境では実行していないため、書き方だけ載せます(一般に知られたコマンドです)。

OS 目的 コマンド
Windows(コマンドプロンプト) 待ち受け一覧と PID netstat -ano
Windows(コマンドプロンプト) 特定ポートだけ netstat -ano | findstr :8080
Windows(コマンドプロンプト) 停止 taskkill /PID 1234 /F
Windows(PowerShell) 待ち受け一覧 Get-NetTCPConnection -State Listen
Windows(PowerShell) 特定ポートの PID Get-NetTCPConnection -LocalPort 8080 | Select-Object LocalAddress, State, OwningProcess
Windows(PowerShell) 相手に届くか Test-NetConnection 相手ホスト -Port 443
macOS 待ち受け一覧 lsof -nP -iTCP -sTCP:LISTEN
macOS 特定ポート lsof -nP -i :8080
macOS 相手に届くか nc -zv 相手ホスト 443

macOS には ss も netstat -p もないため、lsof が基本になります。netstat -an | grep LISTEN は使えますが、プロセス名は出ません。

つながらないときの切り分け手順(エラー対処)

「ポートがつながらない」は、エラー文で原因の層がほぼ決まります。 次の表の上から順に見ていくと、確認の往復が少なくて済みます。

順番 症状・エラー文 原因の候補 確認コマンド 次の一手
1 起動時に Address already in use/EADDRINUSE 同じポートを別プロセスが使っている ss -tlnp 'sport = :番号' PID を確認して止めるか、ポートを変えて起動
2 自分のマシンでは開くのに、別のマシンから Connection refused 127.0.0.1 だけで待ち受けている ss -tlnp の Local Address を見る 0.0.0.0(または対象の IP)で待ち受けるよう設定を変更
3 どこからでも Connection refused そもそも待ち受けていない(起動していない・別ポートで起動) ss -tulnp、アプリのログ 起動ログと設定ファイルのポート指定を確認
4 timed out/Timeout was reached ファイアウォールで落とされている、経路がない sudo ufw status、sudo firewall-cmd --list-all、sudo iptables -L -n、ip route get 相手IP 該当ポートを許可する
5 同一ホストと同一ネットワークでは届くのに、外のホストからだけ届かない クラウドのセキュリティグループ/NACL、経路上の機器 クラウド側のコンソール、traceroute、相手側の tcpdump 送信元 IP とポートを許可ルールに追加

ポイントは Connection refused(届いたが待ち受けがない)と timed out(届いていない)を区別することです。refused ならサーバー側の設定、timed out なら間にあるファイアウォールや経路を疑います。

1. Address already in use を再現する

同じ 7692 番で2つ目の http.server を起動すると、Python では OSError: [Errno 98] Address already in use、Node.js では EADDRINUSE になります(別記事「Address already in use の解決方法」で詳しく扱っているので、ここでは要点のみ)。

python3 -m http.server 7692      # 1つ目が動いている状態で2つ目を起動
Traceback (most recent call last):
…(省略)…
  File "/usr/lib/python3.11/socketserver.py", line 472, in server_bind
    self.socket.bind(self.server_address)
OSError: [Errno 98] Address already in use
node -e "require('net').createServer().listen(7692, '0.0.0.0', () => console.log('listening')).on('error', e => { console.error(e.message); process.exit(1) })"
listen EADDRINUSE: address already in use 0.0.0.0:7692

対処は2択です。使っているプロセスを PID で止める(前の章の手順)か、ポートを変えて起動する(python3 -m http.server 7693、PORT=3001 npm run dev など)かです。サーバーを止めた直後だけ起動できない場合は、TIME-WAIT の接続が残っている可能性があるので、数十秒待つかアプリ側で SO_REUSEADDR を有効にします(Python の http.server は allow_reuse_address = 1 が既定で、ソース /usr/lib/python3.11/http/server.py の 136 行目で確認できます)。

2. 127.0.0.1 と 0.0.0.0 の違いを再現する

127.0.0.1 で待ち受けると「自分自身からの接続」だけを受け付け、0.0.0.0 で待ち受けると「すべてのネットワークインターフェース」で受け付けます。 「ローカルでは動くのに、別のマシンやコンテナの外から見えない」の原因で最も多いのがこれです。

python3 -m http.server は既定で 0.0.0.0(すべてのインターフェース)、--bind 127.0.0.1 を付けると自分自身だけになります。両方を起動して ss で見比べます。

python3 -m http.server 7692 &                        # 既定(0.0.0.0)
python3 -m http.server --bind 127.0.0.1 7694 &       # 127.0.0.1 だけ
ss -tlnp '( sport = :7692 or sport = :7694 )'
Serving HTTP on 0.0.0.0 port 7692 (http://0.0.0.0:7692/) ...
Serving HTTP on 127.0.0.1 port 7694 (http://127.0.0.1:7694/) ...
State  Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0      5          127.0.0.1:7694      0.0.0.0:*    users:(("python3",pid=1218,fd=3))
LISTEN 0      5            0.0.0.0:7692      0.0.0.0:*    users:(("python3",pid=1081,fd=3))

次に、このマシンに付いている IP アドレス(hostname -I)宛てに curl します。これは「別のマシンから接続したとき」と同じ経路を通る確認方法です。

hostname -I
curl -s -o /dev/null -w 'HTTP %{http_code}\n' http://192.0.2.2:7692/   # 0.0.0.0 で待ち受け
curl -s -o /dev/null -w 'HTTP %{http_code}\n' http://192.0.2.2:7694/   # 127.0.0.1 で待ち受け
curl http://192.0.2.2:7694/
curl -s -o /dev/null -w 'HTTP %{http_code}\n' http://127.0.0.1:7694/   # 自分自身からなら届く
192.0.2.2
HTTP 200
HTTP 000
curl: (7) Failed to connect to 192.0.2.2 port 7694 after 0 ms: Couldn't connect to server
HTTP 200

0.0.0.0 の 7692 番は自分の IP 宛てでも 200、127.0.0.1 の 7694 番は自分の IP 宛てだと接続できず、127.0.0.1 宛てなら 200 になりました。Docker コンテナの中で開発サーバーが 127.0.0.1 で待ち受けていると、-p 3000:3000 でポートを公開してもホストから届かないのは、まさにこの挙動です。主なツールの指定方法を表にまとめます。

ツール 既定の待ち受け すべてのインターフェースで待ち受ける指定
python3 -m http.server 0.0.0.0(この環境で確認) 既定のまま。絞るなら --bind 127.0.0.1
Django runserver 127.0.0.1:8000(一般に知られた既定値) python manage.py runserver 0.0.0.0:8000
Vite localhost(一般に知られた既定値) vite --host(--host 0.0.0.0)
Redis bind 127.0.0.1 -::1(redis.conf の既定。公式で確認) bind に必要な IP を列挙して範囲を絞る(0.0.0.0 にしない)
Grafana http_addr 空欄=0.0.0.0(公式で確認) 既定のまま
Elasticsearch network.host: _local_(公式で確認) 必要なノードの IP を network.host に指定

逆に、データベースやキャッシュは 127.0.0.1 のままが安全側です。この環境の PostgreSQL も 127.0.0.1:5432 で待ち受けていました。外から使いたい場合は、0.0.0.0 にするより SSH ポートフォワードや VPN で届かせる方が、公開範囲を広げずに済みます。

3. そもそも待ち受けていない

ss -tulnp に該当ポートが出てこなければ、サーバーが起動していないか、別のポートで起動しています。起動時のログ(Serving HTTP on ... port 7692 のような行)と設定ファイルの port/listen の値を見比べるのが近道です。Docker なら docker ps の PORTS 列と docker logs コンテナ名 で、コンテナ内のアプリがどのポートで起動したかを確認します。

ss -tulnp | grep ':7693'; echo "exit=$?"     # 何も出なければ待ち受けていない
exit=1

4. ファイアウォールで止まっている(確認コマンドのみ、未実行)

待ち受けていて、同じホストからは届くのに外からは timed out になる場合は、ホストのファイアウォールを確認します。ufw・firewalld・iptables はこの環境では実行していないため、確認コマンドの書き方だけ載せます。

# Ubuntu(ufw)
sudo ufw status verbose            # 現在のルール一覧
sudo ufw allow 7692/tcp            # 許可を追加する例

# RHEL 系(firewalld)
sudo firewall-cmd --list-all       # 現在のゾーンのルール一覧
sudo firewall-cmd --add-port=7692/tcp --permanent && sudo firewall-cmd --reload

# どちらも使っていない場合(iptables / nftables)
sudo iptables -L INPUT -n --line-numbers
sudo nft list ruleset

ファイアウォールの許可は「ポート番号」だけでなく TCP か UDP かも合わせる必要があります。DNS(53)や WireGuard(51820)のように UDP を使うサービスは、53/udp のように明示します。

5. 別のホストからだけ届かない(クラウドのセキュリティグループなど)

ホスト側で待ち受けもファイアウォールも問題ないのに、インターネット越しや別のサブネットからだけ届かないときは、ホストの外側で止まっています。確認の観点を表にします。

確認する場所 見るもの よくある見落とし
クラウドのセキュリティグループ/ファイアウォールルール インバウンドで「ポート・プロトコル・送信元」が許可されているか 送信元を自分の IP に絞ったあとで自分の IP が変わった。TCP だけ許可して UDP を忘れた
ネットワーク ACL/サブネットのルール ステートレスなので「戻りの通信(エフェメラルポート 1024〜65535)」も許可が必要 インバウンドだけ開けてアウトバウンドの戻りを閉じている
相手側の受信 相手ホストで sudo tcpdump -ni any port 7692 を流しながら接続する パケットが届いていなければ手前、届いていて応答がなければホスト側

切り分けの順番は「近いところから」です。同じホストの 127.0.0.1 → 同じホストの自分の IP → 同じネットワークの別ホスト → 外のホスト、と1段ずつ遠ざけると、どこで止まったかが特定できます。

よくある質問

Q. 80 と 8080 の違いは何ですか? A. どちらも HTTP ですが、80 は IANA が HTTP に割り当てた標準ポート、8080 は「80 の代替(http-alt)」として登録された番号です(どちらも /etc/services で確認)。ブラウザは http://example.com/ のとき自動的に 80 につなぎますが、8080 を使うには http://example.com:8080/ と明示します。8080 がよく使われる理由は、1024 以上なので管理者権限なしで待ち受けられることと、80 を使う Web サーバー(nginx や Apache)と同居できることです。

Q. 443 と 80 はどう使い分けますか? A. 443 は TLS で暗号化した HTTPS、80 は暗号化しない HTTPです。現在の Web は 443 が基本で、80 は「http:// で来たアクセスを https:// に転送(301 リダイレクト)するため」に残しておく構成が一般的です。両方を公開し、80 では転送だけを行うようにすると、以前のリンクや手入力のアクセスも安全な側に誘導できます。なお 443 の UDP は HTTP/3(QUIC)用で、/etc/services にも https 443/udp # HTTP/3 として登録されています。

Q. 445・3389・6379・27017 をインターネットに公開しないのはなぜですか? A. これらは SMB(445)、RDP(3389)、Redis(6379)、MongoDB(27017)という「内部ネットワークで使う前提」のサービスだからです。ファイル共有やデータベースは、認証や暗号化を Web のように「不特定多数からのアクセス」向けに設計していないものが多く、公開すると不特定の接続試行を受け続けることになります。Redis の設定ファイルが既定で bind 127.0.0.1 -::1(自分自身のみ)になっているのも同じ考え方です。外から使いたいときは、VPN や SSH ポートフォワード(ssh -L 6379:127.0.0.1:6379 サーバー)で届かせるか、クラウドのセキュリティグループで送信元 IP を絞ると、公開範囲を広げずに済みます。

Q. 1024 未満のポートを使うには管理者権限が必要ですか? A. Linux では必要です。 一般ユーザー(この環境では nobody)で python3 -m http.server 80 を実行すると PermissionError: [Errno 13] Permission denied になり、同じユーザーでも 1024 以上の 7695 番なら起動できました。境界の値は /proc/sys/net/ipv4/ip_unprivileged_port_start(この環境では 1024)で決まります。

runuser -u nobody -- python3 -m http.server 80            # 一般ユーザーで 80 番
runuser -u nobody -- python3 -m http.server --bind 127.0.0.1 7695   # 同じユーザーで 7695 番
cat /proc/sys/net/ipv4/ip_unprivileged_port_start
…(省略)…
    self.socket.bind(self.server_address)
PermissionError: [Errno 13] Permission denied
Serving HTTP on 127.0.0.1 port 7695 (http://127.0.0.1:7695/) ...
1024

対処は、sudo で起動する、setcap 'cap_net_bind_service=+ep' 実行ファイル で権限を付ける、または 8080 などで起動して nginx などのリバースプロキシで 80 から転送する、の3通りです。開発では 8080・3000・8000 を使い、本番だけリバースプロキシで 80/443 に出す構成が扱いやすいです。

まとめ

  • ポート番号は 0〜65535 の「部屋番号」で、IP アドレスと組み合わせて宛先が決まる。 TCP と UDP で番号空間は別(同じ 7697 を両方で待ち受けられることを確認)
  • IANA の3区分は 0〜1023(well-known/システム)、1024〜49151(ユーザー)、49152〜65535(動的)。 Linux のエフェメラル範囲は 32768〜60999(ip_local_port_range で確認)
  • まず覚える番号は 22 SSH、25/465/587 SMTP、53 DNS、80 HTTP、443 HTTPS、3306 MySQL、5432 PostgreSQL、6379 Redis、8080 HTTP 代替、27017 MongoDB
  • 待ち受けの確認は ss -tulnp、特定ポートは ss -tlnp 'sport = :番号' か lsof -i :番号、届くかは nc -zv と curl -v(コマンドが無ければ bash の /dev/tcp)
  • 止めるときは PID を特定して kill PID。 名前での一括停止は使わない
  • Connection refused は「届いたが待ち受けがない」、timed out は「届いていない」。 127.0.0.1 と 0.0.0.0 の違いは ss の Local Address 列で見分ける
  • データベース・キャッシュ・リモートデスクトップ・ファイル共有は内部限定が基本。 外から使うなら VPN・SSH フォワード・送信元 IP 制限を挟む

参考(出典)

今回実際に開いて確認したページです。

  • RFC 6335(IANA のポート番号の3区分、Section 6 / 8.1.2):https://www.rfc-editor.org/rfc/rfc6335
  • MongoDB「Default MongoDB Port」(27017〜27020):https://www.mongodb.com/docs/manual/reference/default-mongodb-port/
  • Kubernetes「Ports and Protocols」(6443、2379〜2380、10250、10256、10257、10259、30000〜32767):https://kubernetes.io/docs/reference/networking/ports-and-protocols/
  • Redis「Redis configuration」(--port 6380 --replicaof 127.0.0.1 6379 の例):https://redis.io/docs/latest/operate/oss_and_stack/management/config/
  • Redis 8.0 の redis.conf(「default is 6379」、bind 127.0.0.1 -::1):https://raw.githubusercontent.com/redis/redis/8.0/redis.conf
  • Apache Kafka「Quickstart」(--bootstrap-server localhost:9092):https://kafka.apache.org/quickstart
  • Prometheus「Getting started」(localhost:9090):https://prometheus.io/docs/prometheus/latest/getting_started/
  • Grafana「Configure Grafana」(http_port 既定 3000、http_addr):https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/
  • Elasticsearch「Networking settings」(http.port 9200-9300、transport.port 9300-9400、network.host _local_):https://www.elastic.co/docs/reference/elasticsearch/configuration-reference/networking-settings
  • IANA「Service Name and Transport Protocol Port Number Registry」(今回は未閲覧。/etc/services の冒頭コメントに記載された更新元):https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml

/etc/services の確認は Ubuntu 24.04.4 LTS(netbase 6.4、361 行)で行いました。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「ポート番号一覧【2026年版】well-knownポートと確認コマンドの早見表」

株式会社RJCでは、ポート番号の一覧や確認コマンドのようなネットワークの基礎を仲間と学び合っています。こうした知識を共有しながら、日々技術を磨いています。

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?