「このサーバー、知らないポートが開いていないか心配」——そう感じたら、まず自分の手で確認できます。ss -tulpnlsof -iという2つの標準コマンドだけで、今この瞬間に待ち受けている(外部からの接続を待っている)ポートと、それを使っているプロセスを丸ごと洗い出せます。この記事はどちらも読み取り専用のコマンドなので、実行するだけでは設定は一切変わりません。安心して試してください。2026年8月時点でLinuxカーネルのCVE(脆弱性情報)が短期間に大量公開される傾向が続いており(2026年7月23日には週末だけで432件のカーネルCVEが公開されたと報告されています)、パッチ適用と並んで「今どのポートが開いているか」を自分の目で定期確認する習慣の重要性が増しています。

ss -tulpnで待ち受けポートを一覧にする(何を見ているコマンドか)

まずはこれをコピーして実行してください。sudoを付けないとプロセス名が一部隠れるため、必ずsudo付きで実行します。

sudo ss -tulpn

これは「今このマシンで外部からの接続を待っている(=Listenしている)TCP/UDPポートと、それを開いているプロセスを一覧表示する」コマンドです。オプションの意味は次の通りです。

  • -t:TCP接続を表示
  • -u:UDP接続を表示
  • -l:接続待ち(Listen)状態のものだけに絞る
  • -p:どのプロセス(プログラム)が使っているかを表示(sudo必須)
  • -n:ポート番号やIPを名前解決せず数字のまま表示(速い・確実)

出力例と読み方

Netid  State   Local Address:Port   Peer Address:Port  Process
tcp    LISTEN  127.0.0.1:3306       0.0.0.0:*           users:(("mysqld",pid=1122,fd=23))
tcp    LISTEN  0.0.0.0:22           0.0.0.0:*           users:(("sshd",pid=980,fd=3))
tcp    LISTEN  0.0.0.0:80           0.0.0.0:*           users:(("nginx",pid=1543,fd=6))
udp    LISTEN  0.0.0.0:5353         0.0.0.0:*           users:(("avahi-daemon",pid=712,fd=12))
tcp    LISTEN  0.0.0.0:4444         0.0.0.0:*           users:(("nc",pid=8891,fd=4))

見るべきは「Local Address:Port」列と「Process」列の2つです。

  • Local Addressが127.0.0.1のものは「自分自身からしか接続できない」設定です。上の例のmysqld(データベース)がこれに当たり、正常な構成です。
  • Local Addressが0.0.0.0(IPv4)や[::](IPv6)のものは「インターネットを含む外部から到達できる」設定です。ここに見覚えのないポート・プロセスが出てきたら要注意です。
  • 上の例の最後の行、ポート4444番でncというプロセスが0.0.0.0で待ち受けているのは典型的な異常パターンです。ncはただの通信ツールで、通常サーバーで常時起動している理由がありません。自分が意図的に起動したのでなければ疑ってかかるべきです。

lsof -iでポートとプロセスの対応をさらに掘り下げる

sshでSSH総当たり攻撃の形跡をログで確認【26年8月】を先に読んでいる方は、こちらは「侵入されて何かが動いていないか」をポートの側から確認する作業だと考えてください。

sudo lsof -i -P -n

lsofは「List Open Files(開いているファイル一覧)」の略で、Linuxではネットワーク接続もすべて「ファイル」として扱われるため、-iを付けると「ネットワーク接続を使っているプロセス一覧」を表示できます。-Pはポート番号を数字のまま、-nはIPをそのまま表示するオプションで、名前解決を待たない分レスポンスが速くなります。sudoを付けないと他ユーザーが所有するプロセスの詳細が見えないため、必ずsudoで実行してください。

出力例と読み方

COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd       980   root    3u  IPv4  18211      0t0  TCP *:22 (LISTEN)
nginx     1543 www-data  6u  IPv4  19004      0t0  TCP *:80 (LISTEN)
mysqld    1122  mysql   23u  IPv4  19855      0t0  TCP 127.0.0.1:3306 (LISTEN)
nc        8891   root    4u  IPv4  30112      0t0  TCP *:4444 (LISTEN)

ssとほぼ同じ内容が別の切り口で出ます。特に注目すべきはUSER列です。本来rootで動く必要のないプロセス(例えばWebサーバーの一部機能)がrootで動いていたり、逆に見慣れないユーザー名でプロセスが起動していたりする場合は、権限設定のミス、または侵入の痕跡の可能性があります。ssとlsofの両方で同じ結果が出れば、見間違いではなく実際にそのポートが開いていると確信を持てます。

開いているポートが正常か異常かを見分ける基準

「見慣れないポート番号=即危険」ではありません。以下の基準で落ち着いて判断してください。

ポート番号

一般的なサービス

0.0.0.0で待ち受けていた場合

22

SSH(リモートログイン)

正常(外部管理に必要。ただし後述の対策は必須)

80 / 443

Webサーバー(HTTP/HTTPS)

Webサイトを公開しているなら正常

25 / 587

メール送信(SMTP)

メールサーバー運用中なら正常。使っていなければ要確認

3306 / 5432

MySQL / PostgreSQL

通常は異常。127.0.0.1限定にすべき

6379

Redis

通常は異常。デフォルトでは認証なしのため特に危険

4444 / 1337 / 31337 など語呂合わせの番号

正規サービスでは基本使わない

心当たりがなければ高確率で異常

判断のコツは「そのプロセスを自分が意図して起動したか」「外部(0.0.0.0)に開けておく必要が本当にあるか」の2点だけです。データベースやキャッシュサーバー(MySQL・PostgreSQL・Redisなど)は、Webサーバーなど同じマシン上の他プロセスからだけ使うのが普通なので、127.0.0.1限定になっているのが正常な状態です。

見慣れないポート・プロセスを見つけたときの対応手順

異常らしきものを見つけても、いきなり強制終了する前に落ち着いて次の順で確認してください。

  1. プロセスの正体を調べるps -p [PID] -o pid,ppid,cmd,lstartでそのプロセスがいつ・どのコマンドで起動したかを確認します(読み取りのみ・安全)。
  2. 自動起動されていないか調べるsystemctl list-unit-files --state=enabledcrontab -lsudo crontab -l -u rootで、そのプロセス名が自動起動・定期実行に登録されていないか確認します。
  3. 身に覚えがなければ止めるsudo kill [PID]でプロセスを終了できます。誤操作の影響は「該当プロセスが再起動されるまで止まる」だけで、システム自体は壊れません。ただし正規サービスを誤って止めた場合はsudo systemctl start [サービス名]で戻せます。
  4. 再発を防ぐならファイアウォールで塞ぐ:Ubuntu/DebianはUFW(Uncomplicated Firewall)が標準です。sudo ufw statusで現状を確認し、sudo ufw deny 4444のように塞げます。元に戻すのもsudo ufw delete deny 4444で簡単です。UFWはDebian 12以降デフォルトのバックエンドがnftablesに変わっていますが、コマンドの使い方自体はこれまで通りです。

SSH(22番)だけは他のポートと事情が違い、外部アクセスに必須なため塞げません。総当たり攻撃対策としては、パスワード認証を無効化して鍵認証のみにする、ポート番号を22から1024〜65535の別番号に変更するといった対策が有効です。ただしUbuntu 22.10以降(24.04 LTSを含む)はsshdがsystemdのソケットアクティベーションで動いているため、/etc/ssh/sshd_configのポート変更だけでは反映されません。/usr/lib/systemd/system/ssh.socketも合わせて編集し、sudo systemctl daemon-reloadの後にsudo systemctl restart ssh.socketまで実行する必要がある点は見落としやすいので注意してください。設定変更前の状態は各ファイルをコピーしておけばいつでも戻せます。

ディストリビューションごとの違いと点検の頻度

ss・lsofのオプションや出力形式は、Ubuntu 24.04 LTS(カーネル6.8・systemd v255.4)でもDebian 12/13でも大きな変更はなく、この記事のコマンドはそのまま使えます。ただし周辺状況は動いています。Debian 12(Bookworm)は2026年7月11日に標準セキュリティサポートが終了しLTS(2028年6月30日まで)に移行しました。またUbuntu 24.04.1の最初のポイントリリースは、直前に重大な不具合が見つかったため当初予定の8月19日から8月29日に延期されています。こうしたタイミングでは新旧パッケージが混在しやすく、想定外のサービスが立ち上がっていないか普段より念入りに確認する価値があります。目安として、公開サーバーなら週1回、個人PCなら月1回程度、ss -tulpnを実行して「見覚えのあるプロセスと番号だけが並んでいるか」をざっと眺める習慣をつけるだけで、異常の早期発見につながります。

まとめ

ss -tulpnとlsof -iはどちらも読み取り専用で、実行するだけではシステムに一切影響しません。まずssでポート一覧を眺め、気になるものがあればlsofで同じポートを別角度から確認する、という2段構えが確実です。判断基準は「127.0.0.1限定か0.0.0.0で全開放か」「自分が起動を意図したプロセスか」の2点だけ。異常が見つかっても、正体を調べてからkillとufwで対処すれば、いつでも元の状態に戻せます。難しい専門知識がなくても、この2コマンドだけで自分のサーバー・PCの「今」を自分の目で確認できます。