- サイバーセキュリティ 🛡️
- ネットワーク
ポート番号一覧【2026年版】well-knownポートと確認コマンドの早見表
ポート番号とは、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.port9200-9300、transport.port9300-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期連続の黒字決算。