【Linux】ポート確認 (netstat, ss, lsof) とファイアウォールでのポート開放設定

【Linux】ポート確認 (netstat, ss, lsof) とファイアウォールでのポート開放設定 Linux

「あれ…?サーバーにサービスをインストールしたのに、外部からぜんぜん繋がらない!」
「ポートを開放したはずなのに、なんでアクセスできないんだ!?」

ある日突然、あなたが構築したLinuxサーバーがそんな状態になって、スマホで慌てて「linux ポート 確認」とか「linux ポート開放」なんて検索して、このページにたどり着いてくれたんじゃないでしょうか。

 

もしかして、「ポートって何…?」「待機(LISTEN)と開放(Firewall)って、どう違うの…?」ってもうパニックになっていたり…。
それとも、「firewall-cmd で設定したのに、全然反映されない!」っていう、深刻なケースで途方に暮れていたり…?

わかります、わかります!私もサーバー構築を始めた頃、全く同じ経験があります。
サービスが動かないと作業がまったく進まないし、「もしかして、設定を全部間違えた…?」「サーバー作り直さないとダメなの…?」って、もう冷や汗が出ちゃいますよね😥

 

でも、大丈夫です!

その焦る気持ち、よーくわかります。でも、慌ててサーバーを初期化するのは、絶対に待ってください!

これらの問題の多くは、Linuxの「ポートの待機」と「ファイアウォールの設定」を混同していたり、あるいは「ルーティング(通信経路)」を見落としていたりする、ちょっとした設定ミスが原因なんです。ハードウェアの物理的な故障であるケースは、意外と稀なんですよ😲

 

この記事は、そんな「Linuxネットワーク地獄」に陥ってしまったあなたを救うための、安全な対処法をステップバイステップで徹底的に解説する「完全ガイド」です🕵️‍♀️✨

「現在のポート使用状況を確認するコマンド(ss, netstat, lsof)」から、「ファイアウォール(firewalld, ufw)でのポート開放と確認方法」、「ポートへの疎通確認(nc, telnet, nmap)」の実践、そして【重要】な「ルーティングの確認方法」まで。

私と一緒に、一つずつ冷静に確認していきましょうね🥰

 

スポンサーリンク
スポンサーリンク
目次(気になるところをクリック)
  1. Linuxポート確認の超キホン:「待機(LISTEN)」と「開放(Firewall)」の違い
    1. ポートが「待機(LISTEN)」している状態
    2. 2. ポートが「開放(Firewall)」されている状態
  2. 【推奨】まずはコレ!ssコマンドによる最新のポート確認 (linux port 確認)
    1. ss の基本的な使い方:待機ポートの確認
    2. ss の実行例と見方
    3. プロセス情報も同時に表示する (-p オプション)
    4. ss のその他の便利なオプションと使用例
  3. 【従来】古いサーバーでは現役!netstatコマンドによるポート確認
    1. netstat の基本的な使い方
    2. netstat の実行例と見方
    3. プロセス情報も同時に表示する (-p オプション)
  4. 【逆引き】「このポート誰が使ってるの!?」を暴く lsof コマンド
    1. 特定のポートを使用しているプロセスを調べる
    2. 特定のプロセスが使用しているポートを調べる
    3. lsof -i の便利なオプション
  5. (比較表)ss / netstat / lsof 使い分け早見表
  6. Linuxのファイアウォール(firewall)確認と「壁」の突破法
    1. firewalld の確認とポート開放 (RHEL, CentOS, Rocky Linux系)
    2. 2. ufw の確認とポート開放 (Ubuntu, Debian系)
  7. 【実践】本当に繋がる?「linux ポート 疎通確認」で最終チェック!
    1. nc (netcat) コマンドを使った疎通確認
    2. 2. telnet コマンドを使った疎通確認
    3. 3. nmap を使った高度なポートスキャン
  8. 【重要】まさかの盲点!?「linux ルーティング 確認」
    1. ルーティングテーブルとは?
    2. ip route コマンドによるルーティング確認(現代的な方法)
    3. 2. netstat -r コマンドによるルーティング確認(従来の方法)
    4. 3. route コマンド(従来の方法)
  9. (トラブルシューティング表)「繋がらない!」原因切り分けフロー
  10. まとめ

Linuxポート確認の超キホン:「待機(LISTEN)」と「開放(Firewall)」の違い

 

Linuxのポート問題を解決する上で、まず最初に理解すべき最も重要な概念が、この「待機(LISTEN)」と「開放(Firewall)」の違いなんです。

この2つは全く異なる状態を指していて、初心者が最も混同しやすい(そしてハマっちゃう)ポイントなんですよ。

 

ポートが「待機(LISTEN)」している状態

 

これは、アプリケーション(プロセス)が特定のポート番号を掴んで、外部からの接続を「もしもし?」って待ち受けている状態のことを指します。

例えば、WebサーバーソフトのApacheやNginxを起動すると、それらは通常TCPの80番ポートや443番ポートで「待機(LISTEN)」状態になります。

この状態は、後で解説する ss コマンドや netstat コマンドで確認することができます。

そもそも「待機」していなければ、そのポート番号宛に来た通信を受け取る担当者がいない、っていうことになっちゃいます。

 

2. ポートが「開放(Firewall)」されている状態

 

これは、Linuxシステムに搭載されているファイアウォール(門番さんですね)が、特定のポート番号への外部からの通信を「通ってよし!」と「許可」している状態を指します。

最近のLinuxディストリビューションは、セキュリティのために、デフォルトでSSH(22番)など最低限のポート以外はすべて閉じている(ブロックしている)ことが一般的なんです。

たとえApacheが80番ポートで一生懸命「待機(LISTEN)」していても、ファイアウォール(門番)が「80番ポートへの通信はダメ!」って拒否していれば、外部のユーザーはWebサイトにアクセスできないんですね。

 

💡 結論:サービスを提供するには?

外部にサービスを正常に提供するためには、

  1. アプリケーションがポートで「待機(LISTEN)」している
  2. ファイアウォールがそのポートを「開放(Firewall)」している

この両方の条件を満たす必要があるんです!

 

スポンサーリンク

【推奨】まずはコレ!ssコマンドによる最新のポート確認 (linux port 確認)

 

現在、Linuxでポートの状況を確認するための最も推奨されるコマンドが ss です。

ss (Socket Statistics) は、従来の netstat コマンドを置き換えるために開発された、とっても優秀なコマンドなんですよ。

古い netstat が特定のファイル(/proc/net/tcp)を読み込んでいたのに対して、ss はカーネル(Linuxの心臓部ですね)と直接お話しするため、非常に高速に動作するのが最大の特徴です。

特に接続数がすっごく多い高負荷なサーバーだと、netstat と ss の実行速度には、もうビックリするくらいの差が出ちゃいます。

 

ss の基本的な使い方:待機ポートの確認

 

サーバー管理で私たちが一番よく使うのが、「現在待機中のポート」を一覧表示するコマンドです。

[root@server ~]# ss -tuln

この ss -tuln は本当によく使う組み合わせなので、オプションの意味もセットで覚えちゃうと便利ですよ!

  • -t : TCPソケットを表示
  • -u : UDPソケットを表示
  • -l : 待機中(LISTEN)のソケットのみを表示
  • -n : サービス名(例: ssh)じゃなくて、ポート番号(例: 22)で数値として表示(DNS逆引きをしないから高速化にもなるんです!)

 

ss の実行例と見方

 

[root@server ~]# ss -tuln Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 127.0.0.1:323 0.0.0.0:* udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:* tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* tcp LISTEN 0 100 127.0.0.1:25 0.0.0.0:* tcp LISTEN 0 128 [::]:22 [::]:* tcp LISTEN 0 100 [::1]:25 [::]:*

この結果から、以下のことが分かります。

  • 0.0.0.0:22 : TCPの22番ポート(SSH)が、すべてのIPv4アドレス(0.0.0.0)からの接続を待機(LISTEN)している。
  • [::]:22 : TCPの22番ポート(SSH)が、すべてのIPv6アドレス([::])からの接続を待機(LISTEN)している。
  • 127.0.0.1:25 : TCPの25番ポート(SMTP)が、ローカルホスト(127.0.0.1)からの接続のみを待機している(つまり、外部からは接続できない設定になってるんですね)。

 

プロセス情報も同時に表示する (-p オプション)

 

「どのプロセス(アプリ)がそのポートを使ってるの?」っていうのを同時に知りたい場合は、-p (processes) オプションを追加します。(sudo または root権限が必要ですよ)

[root@server ~]# sudo ss -tulnp Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1025,fd=3)) tcp LISTEN 0 100 127.0.0.1:25 0.0.0.0:* users:(("master",pid=1234,fd=13)) ...

Process カラムに、sshd (PID 1025) が22番ポートを、master (Postfixっていうメールサーバーのプロセスです, PID 1234) が25番ポートを使用していることが、ちゃーんとわかりますね!

 

ss のその他の便利なオプションと使用例

 

ss コマンドはとっても多機能なんです。

▼待機中以外の接続(ESTABLISHED など)もすべて表示

[root@server ~]# ss -tan

-l を外すと、現在接続中のセッションも表示されるんです

▼特定のポート(例: 80番)の状況だけを表示

[root@server ~]# ss -tan 'sport = :80 or dport = :80'

'sport' (送信元) または 'dport' (宛先) が80番のものをフィルタリングします

▼特定のIPアドレス(例: 192.168.1.100)との接続を表示

[root@server ~]# ss -tan 'dst 192.168.1.100 or src 192.168.1.100'

ss コマンドを使いこなすことが、現代のLinuxサーバー管理における第一歩となりますよ!

 

スポンサーリンク

【従来】古いサーバーでは現役!netstatコマンドによるポート確認

 

ss コマンドが主流となる前は、netstat (Network Statistics) コマンドが広く使われていました。

今でも多くのシステムにデフォルトでインストールされていますが、「net-tools」っていう古いパッケージ群に含まれていて、RHEL 7以降などのモダンなシステムでは非推奨(deprecated)とされちゃってるんです…。

でも、古いシステムや組み込み機器のメンテナンスではまだまだ現役なので、知識として知っておく価値は十分にありますよ!

 

netstat の基本的な使い方

 

ss -tuln とほぼ同じオプションで、待機ポートを確認できます。

[root@server ~]# netstat -tuln

オプションの意味も ss とそっくりですね。

  • -t : TCP
  • -u : UDP
  • -l : 待機中(LISTEN)
  • -n : 数値表示(ポート番号)

 

netstat の実行例と見方

 

[root@server ~]# netstat -tuln Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp6 0 0 :::22 :::* LISTEN tcp6 0 0 ::1:25 :::* LISTEN udp 0 0 127.0.0.1:323 0.0.0.0:* udp 0 0 0.0.0.0:68 0.0.0.0:*

ss とほぼ同じ情報(0.0.0.0:22 や 127.0.0.1:25 でLISTENしていること)が確認できますね。

 

プロセス情報も同時に表示する (-p オプション)

 

netstat でも -p オプションでプロセス情報を表示できます(sudo または root権限が必要です)。

[root@server ~]# sudo netstat -tulnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1025/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1234/master ...

ss と同様に、1025/sshd や 1234/master (Postfix) といった情報が得られます。

ss が使える環境であれば ss を優先すべきですが、netstat しか使えない環境ではこの netstat -tulnp が基本のコマンドとなります。

 

スポンサーリンク

【逆引き】「このポート誰が使ってるの!?」を暴く lsof コマンド

 

ss や netstat が「ポート一覧」から使用状況を確認するのに対し、lsof (List Open Files) は「プロセス」側から逆引きでポートを調査するのに、すっごく強力なコマンドなんです。

Linux (UnixライクなOS) では、「すべてがファイルである」っていう思想に基づいていて、ネットワークソケットもファイルの一種として扱われるんですよ。

lsof は、その名の通り「プロセスが開いているファイル(ソケットを含む)」を一覧表示してくれる、探偵みたいなコマンドです🕵️‍♀️

 

特定のポートを使用しているプロセスを調べる

 

「このポート(例: 80番)を使ってるのは、一体どのプロセスだ!?」って調べたい場合に最適です。

[root@server ~]# sudo lsof -i :80
  • -i : ネットワークソケット(Internet files)を指定
  • :80 : ポート番号80番を指定

 

▼実行例(Apacheが80番を使っている場合)

[root@server ~]# sudo lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 1500 root 4u IPv6 12345 0t0 TCP *:http (LISTEN) httpd 1501 apache 4u IPv6 12345 0t0 TCP *:http (LISTEN) httpd 1502 apache 4u IPv6 12345 0t0 TCP *:http (LISTEN)

httpd (Apache) のプロセス群(PID 1500, 1501, 1502…)が TCP *:http (LISTEN)、つまり80番ポート(httpはサービス名です)で待機していることが一目瞭然ですね!

 

特定のプロセスが使用しているポートを調べる

 

「このプロセス(例: PID 1025のsshd)はどのポートを使ってるんだ?」って調べる場合は -p オプションを使います。

[root@server ~]# sudo lsof -i -p 1025 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1025 root 3u IPv4 9876 0t0 TCP *:ssh (LISTEN) sshd 1025 root 4u IPv6 9878 0t0 TCP *:ssh (LISTEN)

PID 1025の sshd プロセスが、IPv4とIPv6の両方で ssh ポート(22番)をLISTENしていることがわかります。

 

lsof -i の便利なオプション

 

lsof -i は、オプションを組み合わせるとさらに強力になりますよ。

[root@server ~]# sudo lsof -i -P -n
  • -P : ポート番号をサービス名(http)じゃなくて、数値(80)で表示します。
  • -n : ホスト名をIPアドレスで表示します(DNS逆引きをしないから高速なんです)。

 

▼実行例

[root@server ~]# sudo lsof -i -P -n COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1025 root 3u IPv4 9876 0t0 TCP *:22 (LISTEN) master 1234 root 13u IPv4 10567 0t0 TCP 127.0.0.1:25 (LISTEN) httpd 1500 root 4u IPv6 12345 0t0 TCP *:80 (LISTEN) ...

lsof は、特定のサービスが起動しない時(「あれ?ポートが既に使用されてる!」みたいな場合)の原因究明に欠かせないコマンドです。

 

スポンサーリンク

(比較表)ss / netstat / lsof 使い分け早見表

 

ここで、3つのコマンドの役割と特徴を、わかりやすく表にまとめますね。

コマンド 主な目的 特徴 推奨度
ss ポートの使用状況一覧の確認 最速・高機能。現代のLinuxでは標準。netstat の完全な後継。 高 (最優先)
netstat ポートの使用状況一覧の確認 伝統的だが非推奨(Deprecated)。古いシステムや組み込みでは必要。 中 (互換用)
lsof プロセスから使用ポートを特定(逆引き) 「どのプロセスがこのポートを使っているか」を調べるのに最強。 高 (特定用途)

▼使い分けの指針:

  • 「今、どのポートが開いている(LISTEN)?」 → ss -tulnp
  • 「このポート(例: 80番)を使ってるプロセスは何?」 → sudo lsof -i :80 -P -n
  • 「古いサーバーで ss がない…」 → netstat -tulnp

 

スポンサーリンク

Linuxのファイアウォール(firewall)確認と「壁」の突破法

 

ss や netstat でアプリケーションがポートを「待機(LISTEN)」していることを確認できても、まだ安心しちゃダメなんです。

それだけでは外部からアクセスできません。

次に、Linuxのファイアウォール(firewall)がそのポートを「開放」しているか確認する必要があります。

linux firewall 確認」や「linux ポート開放」、「linux ポート開放 確認」 は、サーバー構築時に誰もが(私も!)何度も検索しちゃうキーワード群の一つなんですよ。

ここでは、現在の主流なLinuxディストリビューションで使われる2大ファイアウォール管理ツール、firewalld と ufw について解説しますね。

 

firewalld の確認とポート開放 (RHEL, CentOS, Rocky Linux系)

 

Red Hat系のディストリビューション(CentOS 7以降, RHEL 7以降, Rocky Linux, AlmaLinuxなど)では、firewalld が標準のファイアウォール管理ツールです。

firewalld は「ゾーン(Zone)」っていう概念(「ここは公共の場所(public)」「ここは内部(internal)」みたいに区切るイメージです)で管理するのが特徴なんですね。

A. firewalld の状態確認

まず、firewalld が動作しているか確認します。

[root@server ~]# sudo firewall-cmd --state running

running と表示されれば動作中です!

B. 現在の設定(開放ポート)の確認

デフォルトのゾーン(通常は public)で、現在許可されているサービスやポートを確認します。

[root@server ~]# sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: cockpit dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

この例では、services: の行に ssh などが登録されていますよね。

これはSSH(22番ポート)が許可されていることを意味します。

C. firewalld でのポート開放(linux ポート開放)

例えば、WebサーバーのためにTCPの80番ポートを開放(追加)する場合です。

(重要!)firewalld の設定変更には、「一時的な変更(–reloadすると消えちゃう)」と「恒久的な変更(永続化)」の2段階があるんです!これをよーく覚えておいてくださいね。

ステップ1: 恒久的な設定(–permanent)に追加
まず、設定ファイルに「ずっとこの設定を使ってね」って永続的に書き込みます。

[root@server ~]# sudo firewall-cmd --add-port=80/tcp --permanent success

(–add-service=http –permanent ってサービス名で指定することも可能ですよ)

ステップ2: 現在動作中の設定にリロードして反映
恒久設定を書き込んだだけでは、まだ現在のファイアウォール(門番さん)には伝わってないんです。

リロードして「設定が変わったから、よろしく!」って適用します。

[root@server ~]# sudo firewall-cmd --reload success

これで、TCPの80番ポートが開放されました!

D. firewalld でのポート開放確認

再度 firewall-cmd –list-all を実行して、ports: の欄に追加されたか確認しましょう。

[root@server ~]# sudo firewall-cmd --list-all public (active) ... services: cockpit dhcpv6-client ssh ports: 80/tcp <-- ここに追加されている! ...

ports: 80/tcp が表示されていれば、「linux ポート開放 確認」 はバッチリ完了です!🥰

 

2. ufw の確認とポート開放 (Ubuntu, Debian系)

 

UbuntuやDebian系のディストリビューションでは、ufw (Uncomplicated Firewall=カンタンなファイアウォール) が標準のファイアウォール管理ツールとして人気です。

その名の通り、firewalld よりもシンプルで直感的な操作が特徴なんですよ。

A. ufw の状態確認

まず、ufw が有効になっているか確認します。

[root@server ~]# sudo ufw status Status: active

Status: active であれば動作中です。(inactive だった場合は sudo ufw enable で有効化できますよ)

B. 現在の設定(開放ポート)の確認

ufw status に numbered や verbose を付けると、より詳細なルールが確認できて便利です。

[root@server ~]# sudo ufw status numbered Status: active

 To                         Action      From
 --                         ------      ----
[ 1] 22/tcp ALLOW IN Anywhere [ 2] 22/tcp (v6) ALLOW IN Anywhere (v6)

この例では、ルール[1]と[2]で、IPv4およびIPv6のTCP 22番ポート(SSH)が許可(ALLOW IN)されていることがわかりますね。

C. ufw でのポート開放(linux ポート開放)

ufw でWebサーバー(TCP 80番)を開放するのは、すっごくカンタンです!

[root@server ~]# sudo ufw allow 80/tcp Rule added Rule added (v6)

(sudo ufw allow http ってサービス名で指定することも可能です)

ufw は、firewalld みたいな「リロード」操作は不要で、コマンド実行直後に設定が反映されるのでお手軽ですね!

D. ufw でのポート開放確認

再度 ufw status numbered で確認してみましょう。

[root@server ~]# sudo ufw status numbered Status: active

 To                         Action      From
 --                         ------      ----
[ 1] 22/tcp ALLOW IN Anywhere [ 2] 80/tcp ALLOW IN Anywhere <-- ここに追加! [ 3] 22/tcp (v6) ALLOW IN Anywhere (v6) [ 4] 80/tcp (v6) ALLOW IN Anywhere (v6) <-- ここに追加!

ルール[2]と[4]に 80/tcp が追加されていれば、「linux ポート開放 確認」 は無事完了です!

 

スポンサーリンク

【実践】本当に繋がる?「linux ポート 疎通確認」で最終チェック!

 

ss で「待機(LISTEN)」を確認して、firewalld や ufw で「開放」も確認しました。

でも、「本当に外部からそのポートに接続できるの?」って、自分から「もしもし、聞こえますかー?」って能動的にテストしたい場合がありますよね。

これが 「linux ポート 疎通確認」 です。

疎通確認は、サーバー自身から(localhostへ)試す場合と、外部のクライアントPCから試す場合の両方からやってみるのが大事ですよ。

 

nc (netcat) コマンドを使った疎通確認

 

nc (netcat) は、TCP/UDP通信の「スイスアーミーナイフ」なんて呼ばれちゃうくらい、非常に強力なツールなんです。

ポートが応答するかどうかをテストするのに最適ですよ!

  • -v : 詳細(Verbose)モード。接続試行の状況を表示してくれます。
  • -z : ゼロI/Oモード。接続だけを試みてデータを送信しません(ポートスキャンに最適!)。
  • -w [秒数] : タイムアウト時間を指定します。

 

▼実行例(クライアントPCからサーバーの80番ポートへ)

[client-pc ~]$ nc -v -z -w 3 192.168.1.100 80 Connection to 192.168.1.100 80 port [tcp/http] succeeded!

succeeded! と表示されれば、大成功!ポートは開いていて、応答があります。

▼実行例(ポートが閉じている場合)

[client-pc ~]$ nc -v -z -w 3 192.168.1.100 8080 nc: connect to 192.168.1.100 port 8080 (tcp) timed out

タイムアウトしちゃった場合、ファイアウォールでブロックされているか、そもそもサービスが待機していないかのどっちかですね…。

 

2. telnet コマンドを使った疎通確認

 

telnet は本来リモートログイン用の古いプロトコルですが、指定したIPとポートにTCP接続を試みるクライアントとして、ポート疎通確認に長年使われてきました。

(最近のシステムではデフォルトでインストールされてない場合もあるんですよね😅)

▼実行例(クライアントPCからサーバーの22番ポートへ)

[client-pc ~]$ telnet 192.168.1.100 22 Trying 192.168.1.100... Connected to 192.168.1.100. Escape character is '^]'. SSH-2.0-OpenSSH_8.0

Connected to ... と表示されて、SSHサーバーからの応答(SSH-2.0...)が返ってくれば、接続成功です!

(終わらせる時は Ctrl + ] の後に quit と入力してEnterキーですよ)

▼実行例(ポートが閉じている場合)

[client-pc ~]$ telnet 192.168.1.100 8080 Trying 192.168.1.100... telnet: connect to address 192.168.1.100: Connection refused

Connection refused(接続拒否)やタイムアウトになっちゃいます。

 

3. nmap を使った高度なポートスキャン

 

nmap は、非常に高機能なポートスキャナで、セキュリティ診断にも使われる専門的なツールです。

(別途インストールが必要な場合が多いです: sudo yum install nmap / sudo apt install nmap)

▼実行例(サーバーの1~1024番ポートをスキャン)

[client-pc ~]$ nmap -p 1-1024 192.168.1.100

Starting Nmap 7.80 ( https://nmap.org ) Nmap scan report for 192.168.1.100 Host is up (0.0010s latency). Not shown: 1021 filtered ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 111/tcp closed rpcbind

Nmap done: 1 IP address (1 host up) scanned in 3.05 seconds

この結果から、22/tcp (ssh) と 80/tcp (http) が open(開いている)状態であることが一発でわかります!すごい!

 

スポンサーリンク

【重要】まさかの盲点!?「linux ルーティング 確認」

 

「ポートは ss でLISTENを確認した!」
「ファイアウォールは firewall-cmd で開放を確認した!」
「nc で疎通確認しても Connection refused になる…なんで!?」

もしそんな状態なら…特にサーバーとクライアントが異なるネットワーク(サブネット)にある場合、犯人は「ルーティング(パケットの経路)」が正しく設定されていないことかもしれません!

linux ルーティング 確認」 は、ネットワークトラブルシューティングの核となる、すっごく大事な作業なんですよ。

 

ルーティングテーブルとは?

 

ルーティングテーブルっていうのは、Linuxカーネルが持っている「パケットの道案内図(経路表)」のことです。

「この宛先IPアドレス(ネットワーク)には、どの出口(ゲートウェイ)を経由してパケットを送るべきか」がぜんぶ記載されてるんですね。

ここで最も重要なのが「デフォルトゲートウェイ(デフォルトルート)」です。

これは「道案内図に載っていない、その他すべての宛先」へのパケットを投げる「最後の砦」となるルーターのアドレスなんです。

インターネット(外部ネットワーク)に出ていくためには、このデフォルトゲートウェイが正しく設定されている必要があります。

 

ip route コマンドによるルーティング確認(現代的な方法)

 

ss コマンドと同じ iproute2 パッケージに含まれる、現代の標準的なルーティング確認コマンドです。

[root@server ~]# ip route show

またはシンプルに
[root@server ~]# ip route

▼実行例と見方

[root@server ~]# ip route default via 192.168.1.1 dev eth0 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100

この結果の読み方は以下の通りです。

  • 192.168.1.0/24 ... : 192.168.1.0~192.168.1.255 のネットワーク(同じLAN内ですね)宛の通信は、eth0 デバイスから直接送信する。
  • default via 192.168.1.1 ... : これ(デフォルトゲートウェイ)が最重要。上記以外のすべての宛先(インターネット含む)への通信は、192.168.1.1 というIPアドレス(ルーター)を経由(via)して、eth0 デバイスから送信する。

もし、この default via ... の行が存在しないか、IPアドレスが間違っている場合、もう大変!サーバーは外部ネットワーク(インターネット)への道がわからなくなっちゃうんです😥

 

2. netstat -r コマンドによるルーティング確認(従来の方法)

 

netstat コマンドにもルーティングテーブルを表示するオプション -r (routing) があります。

[root@server ~]# netstat -r -n

(-n を付けることで、IPアドレスで数値表示されますよ)

▼実行例と見方

[root@server ~]# netstat -r -n Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

ip route と同じ情報ですが、表示形式が違いますね。

  • Destination が 0.0.0.0(Genmaskも 0.0.0.0)となっている行が、デフォルトゲートウェイを意味します。
  • その Gateway が 192.168.1.1 に設定されていることがわかります。

 

3. route コマンド(従来の方法)

 

netstat と同じ net-tools パッケージに含まれる古いコマンドです。

[root@server ~]# route -n

実行結果は netstat -r -n とほぼ同じです。

サーバーが外部と通信できない、あるいは特定のネットワークと通信できない場合は、ポート確認とファイアウォール確認に加えて、必ずこの ip route コマンドでルーティング(特にデフォルトゲートウェイ)が正しいかを確認する癖をつけましょうね!

 

スポンサーリンク

(トラブルシューティング表)「繋がらない!」原因切り分けフロー

 

サーバーに接続できなくてパニックになっちゃった時に、基本的な問題切り分け(トラブルシューティング)の手順を、フローチャート形式の表にまとめました。

冷静に、上から順番に確認していきましょう!

ステップ 確認すること 使用するコマンド(例) 「はい」の場合 「いいえ」の場合
1. サービス起動確認 そもそもサービス(Apache, sshd等)は起動しているか? systemctl status httpd
ps aux | grep httpd
ステップ2へ サービスを起動する (systemctl start httpd)。
2. 待機ポート確認 サービスが意図したポートで「待機(LISTEN)」しているか? sudo ss -tulnp | grep :80
sudo lsof -i :80 -P -n
ステップ3へ アプリケーションの設定ファイル(httpd.conf等)を見直し、正しいポートでLISTENするよう修正・再起動する。
3. ローカル疎通確認 サーバー内部から自分自身のポートに接続できるか? curl http://127.0.0.1
nc -vz 127.0.0.1 80
ステップ4へ アプリが 127.0.0.1 (ローカルホスト) のみでLISTENしている可能性あり(ss の結果が 127.0.0.1:80 になっていないか確認)。0.0.0.0:80 でLISTENさせる。
4. FW開放確認 ファイアウォールがそのポートを「開放」しているか? sudo firewall-cmd --list-all
sudo ufw status numbered
ステップ5へ ファイアウォールの設定を行い、ポートを開放する(firewall-cmd --add-port=80/tcpufw allow 80/tcp)。
5. ルーティング確認 (特に別NWからの場合)サーバーのデフォルトゲートウェイは正しいか? ip route ステップ6へ ネットワーク設定(nmtui/etc/sysconfig/network-scripts/ 等)を見直し、正しいゲートウェイを設定する。
6. 外部疎通確認 クライアントPCからサーバーのポートに接続できるか? telnet [サーバーIP] 80
nc -vz [サーバーIP] 80
問題解決! サーバーとクライアント間のネットワーク機器(物理ルーター、クラウドのセキュリティグループ等)が通信をブロックしている可能性が高い。Linuxサーバーの外側の問題を調査する。

 

スポンサーリンク

まとめ

 

linux ポート 確認」や「繋がらない」っていう問題は、本当に多くのサーバー管理者を悩ませるトラブルですが、その原因はちゃんと切り分けていけば特定できるんです。

この記事で解説した大事な対処法を、もう一度おさらいしますね。

 

「待機(LISTEN)」と「開放(Firewall)」は別物!
サービス提供には「アプリの待機」と「FWの開放」の両方が必要だってことを、絶対に忘れないでくださいね。

ポート待機確認は ss コマンドが最優先!
sudo ss -tulnp は、待機中のポートと使用プロセスを高速に確認できる必須コマンドです。
「どのプロセスがポートを使ってるの?」の逆引きには sudo lsof -i :[ポート番号] がすっごく便利です。

ファイアウォールはディストリビューションに合わせる!
RHEL/CentOS/Rocky系は firewalld(firewall-cmd コマンド)を使います。--permanent と --reload の2段階がキモですよ!
Ubuntu/Debian系は ufw がシンプルで強力です。
linux ポート開放 確認」 は、これらのコマンド(--list-all や status)でしっかり行いましょう。

疎通確認は nc や telnet で!
nc -vz [IP] [ポート] は、ポートが応答するかをテストするのに最適です。

「繋がらない」最後の砦はルーティング!
ポートもFWも正しいのに繋がらない…そんな時は、まさかの盲点ip route コマンドでデフォルトゲートウェイ(default via ...)が正しいか、「linux ルーティング 確認」 を必ず実施してください。

 

これからLinuxサーバーを構築・運用する方、特にVPSサービスなどを利用し始める方にとって、これらのポート確認とファイアウォール設定のスキルは必須です。

サーバーに繋がらないと本当に焦っちゃいますが、慌てずに一つずつ原因を切り分けて、適切な対処法を試していけば、必ず解決の糸口は見つかりますから!💪✨

コメント