Linuxのポート開放を確認するコマンド|ss・lsofの使い方

図解60p「Linuxサーバー構築入門マニュアル」無料
登録10秒/自動返信でDL/合わなければ解除3秒
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)LinuxtipsLinuxtips, ネットワーク > Linuxのポート開放を確認するコマンド|ss・lsofの使い方
「Webサーバーを立ち上げたのにアクセスできない」
「不要なポートが開いていないか確認したい」
・・・サーバー構築やセキュリティ監査の現場では、ポートの開放状況の確認が必須の作業です。

この記事では、Linuxで現在開いているポート(接続待ちのポート)を確認するためのコマンドを体系的に解説します。現代の主流である ss コマンドや、プロセスを特定する lsof コマンドの実践的な使い方から、ファイアウォールの確認手順までまとめました。

ポートとは?IPアドレスとの違い

ポートとは、ネットワーク通信において「どのプログラムと通信するか」を識別するための出入り口(扉)の番号です。IPアドレスを「建物の住所」に例えるなら、ポート番号は「部屋番号(または窓口)」に相当します。

Webサイト(HTTP)なら80番、SSHなら22番というように、サービスごとに使うポート番号(ウェルノウンポート)が決められています。サーバー管理においては「意図したポートだけが正しく開いているか」を常に意識する必要があります。

現場でよく使うポート番号の早見表

ポート番号 プロトコル 用途
22 TCP SSH(リモートログイン)
25 TCP SMTP(メール送信)
53 TCP/UDP DNS(名前解決)
80 TCP HTTP(Web)
123 UDP NTP(時刻同期)
443 TCP HTTPS(暗号化Web)
3306 TCP MySQL/MariaDB

現代の標準「ss」コマンドで確認する

かつては netstat コマンドが主流でしたが、現代のLinux(RHEL 8/9、AlmaLinux、Ubuntuなど)では、より高速で詳細な情報が取得できる ss コマンドが標準となっています。

TCPの接続待ち(LISTEN)ポートを確認する

TCPプロトコルで外部からの接続を待っている(LISTEN状態)ポートを確認するには、以下のオプションを組み合わせて実行します。

# ss -atn | grep LISTEN LISTEN 0 128 0.0.0.0:80 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* または # ss -ltn LISTEN 0 128 0.0.0.0:80 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:*


オプションの意味は以下の通りです。
-a:すべてのソケットを表示
-t:TCPのみを表示
-n:名前解決をせず、ポート番号を数字のまま表示
-l:接続待ち(LISTEN)状態のソケットのみ表示

プロセス名も一緒に確認する(-pオプション)

-p オプションを追加すると、そのポートを使っているプロセス名まで一度に確認できます。root権限で実行してください。

# ss -atnp | grep LISTEN LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("httpd",pid=1234,fd=4)) LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=5678,fd=3))

右端の users 欄にプロセス名とPIDが表示されます。「80番ポートはhttpdが使用中」といったことが一目で分かります。

特定のポートだけ絞り込む

確認したいポートが決まっている場合は、grep で絞り込むのが現場の定番です。

# ss -atn | grep ':80 ' LISTEN 0 128 0.0.0.0:80 0.0.0.0:*


TCPとUDPの両方を確認する

DNS(53番)やNTP(123番)など、UDPプロトコルのポートも含めてすべて確認したい場合は、-u オプションを追加します。UDPにはTCPのような「LISTEN」状態がなく、待ち受けポートは「UNCONN」として表示されます。

# ss -atnu State Recv-Q Send-Q Local Address:Port Peer Address:Port UNCONN 0 0 0.0.0.0:53 0.0.0.0:* UNCONN 0 0 0.0.0.0:123 0.0.0.0:* LISTEN 0 128 0.0.0.0:80 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:*


プロセス名まで特定する「lsof」コマンド

「8080番ポートが開いているけど、一体何のプログラムが使っているんだ?」
という原因調査の際に活躍するのが lsof コマンドです。

ポート番号を指定して、そのポートを使っているプロセス(プログラム名)を一発で特定できます。
※すべての情報を取得するため、root権限(sudo)で実行してください。

# lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 12345 root 4u IPv4 12345 0t0 TCP *:http (LISTEN) httpd 12346 apache 4u IPv4 12345 0t0 TCP *:http (LISTEN)

この結果から「80番ポートは、httpd(Apache)が使っている」ということが明確に分かります。

ファイアウォールの設定を確認する(firewall-cmd)

サーバー内部では ss コマンドでポートが開いて見えても、「ファイアウォールで弾かれていて外部から繋がらない」というトラブルは現場で非常に多いです。

RHEL/AlmaLinux系では firewall-cmd コマンドで現在許可されているポートを確認できます。

# firewall-cmd --list-ports 8080/tcp 443/tcp # サービス名での許可状況も確認できる # firewall-cmd --list-services ssh dhcpv6-client http https

ss で開いているのに外部から繋がらない場合は、まずこのコマンドでファイアウォールの許可状況を確認してみましょう。

外部からポートが開いているか確認する(nmapコマンド)

ファイアウォールの設定も確認したうえで、それでも外部から繋がるか確かめたい場合は、クライアント側のPCから nmap コマンドを使用します。

※クライアント側のPCで実行してください # nmap -p 80 192.168.1.100

状態(STATE)が open と表示されれば、通信は正常に到達しています。filtered の場合はファイアウォールでブロックされている可能性が高いです。

古い「netstat」コマンドについて(レガシー環境向け)

CentOS 6などの非常に古い環境では、ss コマンドの代わりに netstat コマンドを使用します。使い方のオプションは ss コマンドとほぼ同じです。

# netstat -atn

※現代の環境では非推奨となっているため、基本的には ss を使う習慣をつけましょう。

本記事のまとめ

やりたいこと コマンド例
TCPの接続待ちポート一覧を見る ss -atn | grep LISTEN
ポートを使っているプロセス名も見る ss -atnp | grep LISTEN
特定ポートだけ絞り込む ss -atn | grep :80
UDPも含めた全ポートを見る ss -atnu
特定ポートを使っているプロセスを調べる lsof -i :ポート番号
ファイアウォールの許可ポートを確認する firewall-cmd --list-ports
外部から通信到達できるかテストする nmap -p ポート番号 IPアドレス
サーバーのポート管理は、セキュリティに直結する重要な業務です。「内部で開いているか(ss/lsof)」「ファイアウォールで許可されているか(firewall-cmd)」「外部から到達できるか(nmap)」という3つの視点で確認する習慣をつけましょう。

ポート設定やネットワーク周りのトラブルで、無駄な時間を過ごしていませんか?

「どのポートが開いているか分からない」「ファイアウォールの設定がうまくいかない」といったネットワークの壁は、独学だと解決に何時間もかかってしまいます。
バージョンに振り回されず、現場で通用するWebサーバー構築の"型"を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。


無料プレゼント
図解60p「Linuxサーバー構築入門マニュアル」
独学で詰まる前に、“型(手順書)”で最初の環境構築をサクッと終わらせましょう。
登録10秒/自動返信でDL/合わなければ解除3秒
無料で受け取る ※メールアドレスだけでもOK(必須項目は最小限)

<<関連記事>>
・CentOS7のホスト名設定(nmcliコマンド)
・IPv6アドレスを確認する
・nmapでポートスキャンを実施する
・名前解決の参照順を変更する(/etc/host.conf)
・名前解決の参照順を変更する(/etc/nsswitch.conf)

図解60pのLinux無料マニュアル
登録10秒/自動返信でDL
無料で受け取る