Linuxで開いているポートを確認する方法: 完全ガイド 2026

Linuxターミナルでssとnetstatコマンドを使用してオープンポートを表示している画面

Linuxサーバーで開いているポートを確認する方法は、サーバー管理やネットワークのトラブルシューティング、セキュリティ強化を行う上で欠かせない基本スキルです。開いているポートは、システムへの入口のようなものです。どの入口が開いているかを把握していなければ、適切に保護することはできません。UbuntuでWebサーバーを運用している場合でも、VPSを管理している場合でも、接続の問題を診断している場合でも、開いているポートを一覧表示することで、システムがネットワークに何を公開しているかを明確に把握できます。このガイドでは、4つの実践的な方法を紹介し、結果のフィルタリング方法と不要なポートを閉じる手順についても解説します。

重要なポイント:

  • ss コマンドは、Linux上で開いているポートを一覧表示するための最新かつ最速の方法です。
  • nmap を使うと外部からの視点でポートをスキャンでき、攻撃者に実際に見えている状態を確認できます。
  • lsof を使えば、特定のポートを使用しているプロセスをすぐに特定できます。
  • ufw または iptables で不要なポートを閉じることが、攻撃対象領域を減らす最も直接的な方法です。

Linuxでポート確認が重要な理由

Linuxマシン上で動作しているサービスは、それぞれ1つ以上のポートでリッスンしています。SSHはポート22、HTTPはポート80、HTTPSはポート443でリッスンします。しかし、ソフトウェアのインストールと削除を繰り返しているうちに、意図せず開いたままになっているポートが残ってしまうことがあります。ファイアウォールルールなしにポート5432でリッスンし続けている忘れられたデータベースのデーモンは、実際にデータ漏洩につながった事例もある現実のリスクです。

Linuxで開いているポートを確認することで、次のことが可能になります:

  • 実際に動作・公開されているサービスを監査できる。
  • アプリケーションが別のサービスに接続できない原因をトラブルシューティングできる。
  • ファイアウォールルールが意図通りに機能しているか検証できる。
  • セキュリティ監査やペネトレーションテストに備えられる。

以下で紹介する方法は、ローカルからの確認(マシン自身が報告する内容)と外部からのスキャン(リモートホストから見える内容)の両方をカバーしています。どちらの視点も重要です。

方法1: ss コマンド(最新・推奨)

ss コマンド(ソケット統計)は、最近のほとんどのLinuxディストリビューションで netstat の後継として採用されています。高速で詳細な情報を提供し、Ubuntu・Debian・CentOS・Fedoraにデフォルトで含まれる iproute2 パッケージに組み込まれています。

プロセス名と合わせて開いているポートをすべて一覧表示するには、次のコマンドを実行します:

sudo ss -tulnp

各フラグの説明:

  • -t - TCP ソケットを表示
  • -u - UDP ソケットを表示
  • -l - リッスン中のソケットのみ表示
  • -n - サービス名の代わりに数値のポート番号を表示
  • -p - 各ソケットを使用しているプロセスを表示

具体的な例: NginxとPostgreSQLが動作している新規のUbuntuサーバーでは、出力は次のようになります:

Netid  State   Recv-Q  Send-Q  Local Address:Port  Peer Address:Port  Process
tcp    LISTEN  0       128     0.0.0.0:80           0.0.0.0:*          users:(("nginx",pid=1234,fd=6))
tcp    LISTEN  0       128     127.0.0.1:5432       0.0.0.0:*          users:(("postgres",pid=5678,fd=5))
tcp    LISTEN  0       128     0.0.0.0:22           0.0.0.0:*          users:(("sshd",pid=910,fd=3))

PostgreSQLは 127.0.0.1 にのみバインドされているため、外部からはアクセスできません。一方、SSHとNginxは 0.0.0.0 にバインドされており、あらゆるIPからの接続を受け付けています。この出力一つで、システムの公開状況を多くのことが把握できます。

ss の全オプションについては、公式 ss man ページを参照してください。

方法2: netstat コマンド(旧来だが現役)

netstat コマンドは、旧来の net-tools パッケージに含まれています。多くのディストリビューションではデフォルトでインストールされなくなりましたが、今でも広く使われており、特に古いシステムで作業する際には知っておく価値があります。

必要に応じてインストールします:

sudo apt install net-tools   # Debian/Ubuntu
sudo yum install net-tools   # CentOS/RHEL

netstat を使って Linux の開いているポートを一覧表示するには:

sudo netstat -tulnp

フラグの意味は ss と同じです。出力形式は若干異なりますが、プロトコル・ローカルアドレス・ポート・使用プロセスという同じ基本情報を提供します。

実用上の注意点として、接続数が数千に及ぶ高負荷なサーバーでは、netstatss と比べて明らかに遅くなることがあります。一般的なサーバーでの日常的な作業では、その差はほぼ気になりません。

方法3: nmap ポートスキャン(外部視点)

前述のツールはマシン自身が内部的に報告する情報を表示します。nmap はアプローチが異なり、ネットワーク越しにポートをスキャンすることで、外部の攻撃者やリモートクライアントから見える状態をシミュレートします。ファイアウォールがポートをブロックしている場合、ss ではリッスン中と表示されていても実際には到達できないケースがあるため、この外部視点による確認は非常に重要です。

nmap をインストールします:

sudo apt install nmap   # Debian/Ubuntu
sudo yum install nmap   # CentOS/RHEL

同じネットワーク上の別のマシンからサーバーをスキャンします:

nmap -sT -p 1-1024 192.168.1.10

よく使われる上位1000ポートをサービスバージョン検出付きでスキャンするには:

nmap -sV 192.168.1.10

-sV フラグは、各開いているポートで動作しているソフトウェアのバージョンを検出しようとします。パッチ適用が必要な古いサービスを特定するのに役立ちます。

重要: nmap は、自分が所有しているサーバーまたはスキャンの明示的な許可を得ているサーバーに対してのみ実行してください。許可なく第三者のシステムをスキャンすることは、お住まいの地域の法律に違反する場合があります。

nmap をインストールせずにネットワーク外部から特定のポートに到達できるか確認したい場合は、当サービスの無料ポートチェッカーツールを使えばすぐに確認できます。セットアップ不要です。

方法4: lsof コマンド(プロセスとポートの対応確認)

lsof(オープンファイル一覧)コマンドは、ネットワークソケットをファイルとして扱います。これはLinuxの「すべてはファイル」という設計思想に沿ったものです。「ポート8080を使っているのはどのプロセスか?」という疑問に答えたいときに特に便利です。

すべてのネットワーク接続を一覧表示するには:

sudo lsof -i

特定のポート(例: ポート3000)を使用しているプロセスを調べるには:

sudo lsof -i :3000

これは、開発者のNode.jsアプリケーションがポートを占有していて、サービスを再起動する前にそのプロセスを特定して終了させる必要がある場合などに特に重宝します。

ポート・TCP・UDPで結果をフィルタリングする方法

これらのツールの生の出力は情報量が多くなりがちです。日常的によく使うフィルタリングのパターンを以下にまとめます:

TCPのリッスン中ポートのみ表示(ss):

sudo ss -tlnp

UDPポートのみ表示(ss):

sudo ss -ulnp

特定のポートが開いているか確認(ss と grep の組み合わせ):

sudo ss -tulnp | grep :443

nmap でポートを指定してフィルタリング:

nmap -p 80,443,8080 192.168.1.10

これらのパターンで、日常的なフィルタリングのほぼすべてのニーズに対応できます。ポート80でのHTTP固有のトラブルシューティングについては、ポート80 HTTPトラブルシューティングガイドを参照してください。

Windowsで同様の手順を確認したい場合は、Windowsで開いているポートを確認する完全ガイド 2026もご覧ください。

ufw または iptables でポートを閉じる・ブロックする方法

不要な開いているポートを見つけることは作業の半分に過ぎません。Linuxで最もよく使われる2つのファイアウォールツールを使ってポートを閉じる方法を紹介します。

ufw(シンプルなファイアウォール)を使う方法 - Ubuntu向け推奨

ポート8080への受信トラフィックをブロックするには:

sudo ufw deny 8080/tcp

SSHとHTTPSのみを許可し、それ以外をすべて拒否するには:

sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw allow 443/tcp
sudo ufw enable

現在のファイアウォールの状態を確認するには:

sudo ufw status verbose

iptables を使う方法 - 高度な制御向け

ポート3306(MySQL)への受信トラフィックをすべて破棄するには:

sudo iptables -A INPUT -p tcp --dport 3306 -j DROP

再起動後もルールが維持されるよう保存するには:

sudo iptables-save | sudo tee /etc/iptables/rules.v4

iptables の構文とルールの順序についての詳細なリファレンスは、Netfilter 公式ドキュメントが権威ある情報源です。

ヒント: ufw または iptables でポートをブロックしても、そのポートで動作しているサービス自体は停止しません。外部からの接続が届かなくなるだけです。サービスを完全に停止させるには、sudo systemctl stop servicename を使用してください。再起動時に自動起動しないようにするには、sudo systemctl disable servicename も実行してください。

まとめ

Linuxで開いているポートを確認するために、複雑なツールや深い専門知識は必要ありません。ss コマンドでローカルの状態を素早く確実に把握できます。nmap は外部から到達できる状態を確認できます。lsof はどのプロセスがポートを使用しているかを特定できます。そして ufw または iptables で、公開すべきでないポートを閉じることができます。新しいソフトウェアをインストールした後やネットワーク設定を変更した後など、定期的にこれらの確認を行うことは、Linuxサーバーを安全に保つために実践できる最もシンプルな習慣の一つです。今すぐ sudo ss -tulnp を実行して、サーバーが実際に何を公開しているか確認してみましょう。

無料ポートチェッカーツール - Linuxサーバーのポートが開いているか即座に確認

Linuxサーバーの任意のポートを今すぐ確認

ポートが外部から本当に到達できるか確信が持てませんか?当サービスの無料ポートチェッカーツールは、外部の視点からサーバーを数秒でスキャンします。インストールも設定も不要です。

無料ポートチェッカーツールを試す →

FAQ - よくある質問

ターミナルで sudo ss -tulnp を実行してください。最新の ss コマンドを使って、プロセス名と合わせてTCPおよびUDPのリッスン中ポートをすべて表示します。netstat より高速で、UbuntuやDebianを含む現在の主要なLinuxディストリビューションにデフォルトで利用可能です。

どちらのコマンドも開いているポートとソケット情報を表示しますが、ssnetstat の後継として開発された最新のツールです。カーネルから直接データを読み取るため、高負荷なシステムでも高速かつ正確に動作します。netstat は別途 net-tools パッケージが必要で、多くのディストリビューションではデフォルトでインストールされなくなっています。

ネットワーク上の別のマシンから nmap -p PORT TARGET_IP を使用してください。何もインストールせずに外部から素早く確認したい場合は、Webベースのポートチェッカーツールが便利です。この方法では、ss などのローカルツールでは反映されないファイアウォールルールを含めた実際の到達可能性を確認できます。

sudo lsof -i :PORT または sudo ss -tulnp | grep :PORT を使用してください。どちらのコマンドも、そのポートに関連するプロセス名とPIDを表示します。lsof はコマンド名・PID・ユーザーを見やすい形式で表示するため、特にわかりやすいです。

いいえ。ufw または iptables でポートをブロックしても、外部からの接続がサービスに届かなくなるだけで、サービス自体は引き続き動作します。サービスを完全に停止するには、sudo systemctl stop servicename を使用してください。再起動時に自動起動しないようにするには、sudo systemctl disable servicename も実行してください。