Linux でポートが開いているかどうかを確認する方法

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Linux システム上のネットワークポートの状態を確認するための基本的な技術を学びます。どのポートが開いているかを理解することは、ネットワーク管理、トラブルシューティング、およびセキュリティ分析において基本的なことです。

まず、特定のオプションを使用して netstat コマンドを使い、リスニング状態にあるすべての開いている TCP および UDP ポートをリストアップします。次に、より新しい ss コマンドを使用してポートの状態を確認します。このコマンドは同様のネットワーク統計情報を提供します。最後に、nc (netcat) コマンドを利用して、特定のポートへの接続性を能動的にテストし、クライアントからそのポートが到達可能かつ開いているかを検証します。これらの手順を完了することで、Linux 環境で開いているポートを特定および検証する実践的なスキルを身につけることができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux/RemoteAccessandNetworkingGroup -.-> linux/nc("Networking Utility") linux/RemoteAccessandNetworkingGroup -.-> linux/netstat("Network Monitoring") subgraph Lab Skills linux/nc -.-> lab-558746{{"Linux でポートが開いているかどうかを確認する方法"}} linux/netstat -.-> lab-558746{{"Linux でポートが開いているかどうかを確認する方法"}} end

netstat -tuln で開いているポートをリストする

このステップでは、netstat コマンドを使用して Linux システム上の開いているポートをリストする方法を学びます。どのポートが開いているかを理解することは、ネットワークのトラブルシューティングとセキュリティにおいて重要です。

netstat コマンド(ネットワーク統計情報)は、ネットワーク接続、ルーティングテーブル、インターフェース統計情報、マスカレード接続、およびマルチキャストメンバーシップを表示するコマンドラインツールです。

netstat で以下のオプションを使用します。

  • -t: TCP 接続を表示します。
  • -u: UDP 接続を表示します。
  • -l: リスニングソケット(開いているポート)を表示します。
  • -n: ホスト名とサービス名を解決する代わりに、数値アドレスを表示します。

ターミナルが開いていない場合は、開きます。デスクトップの左側にある Xfce Terminal アイコンを見つけることができます。

次に、以下のコマンドを入力して Enter キーを押します。

netstat -tuln

次のような出力が表示されます。

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
udp        0      0 127.0.0.53:53           0.0.0.0:*
udp        0      0 0.0.0.0:68              0.0.0.0:*

出力を分解してみましょう。

  • Proto: ソケットのプロトコル(例:tcp, udp)。
  • Local Address: ローカルの IP アドレスとポート番号。形式は IP_Address:Port です。0.0.0.0 は、サービスが利用可能なすべての IPv4 インターフェースでリスニングしていることを意味し、::: は、利用可能なすべての IPv6 インターフェースでリスニングしていることを意味します。
  • Foreign Address: リモートの IP アドレスとポート番号。0.0.0.0:* または :::* は、ソケットが特定のリモートアドレスに接続されていない(リスニングしている)ことを示します。
  • State: ソケットの状態。LISTEN は、ポートが開いており、着信接続を待機していることを意味します。

例の出力では、ポート 53(DNS)とポート 22(SSH)が IPv4 と IPv6 の両方で LISTEN 状態にあることがわかります。

このコマンドは、システム上で実行されているサービスとアクセス可能なサービスをすぐに確認するのに非常に便利です。

Continue をクリックして次のステップに進みます。

ss -tuln を使ってポートの状態を確認する

前のステップでは、netstat を使って開いているポートをリストしました。今度は、より新しく、多くの場合高速な ss(ソケット統計情報)というツールを使って、同じ目的を達成しましょう。ssnetstat を置き換えるように設計されており、ソケットに関するより詳細な情報を提供します。

ss では、netstat と同様のオプションを使用します。

  • -t: TCP ソケットを表示します。
  • -u: UDP ソケットを表示します。
  • -l: リスニングソケット(開いているポート)を表示します。
  • -n: ホスト名とサービス名を解決する代わりに、数値アドレスを表示します。

ターミナルが開いていない場合は、開きます。

次のコマンドを入力して Enter キーを押します。

ss -tuln

次のような出力が表示されます。

Netid  State      Recv-Q Send-Q Local Address:Port               Peer Address:Port
udp    UNCONN     0      0      127.0.0.53%lo:53                 0.0.0.0:*
udp    UNCONN     0      0      0.0.0.0:68                       0.0.0.0:*
tcp    LISTEN     0      128    127.0.0.53%lo:53                 0.0.0.0:*
tcp    LISTEN     0      128    0.0.0.0:22                       0.0.0.0:*
tcp    LISTEN     0      128    [::]:22                          [::]:*

この出力は netstat の出力に似ており、プロトコル (Netid)、状態 (State)、ローカルアドレスとポート (Local Address:Port)、およびピアアドレスとポート (Peer Address:Port) が表示されます。

同じポート(53 と 22)が LISTEN としてリストされているのがわかり、netstat の結果が確認できます。

出力形式は多少異なりますが、ss はリスニングポートに関する同様の情報を提供し、パフォーマンスと追加機能(この入門実験では取り上げません)のため、現代の Linux システムでは一般的に推奨されています。

netstatss の両方を使用することで、情報を相互参照し、Linux で利用可能なさまざまなツールに慣れるのに役立ちます。

Continue をクリックして次のステップに進みます。

nc -zv でポートの接続性をテストする

前のステップでは、netstatss を使って開いているポートをリストする方法を学びました。今度は、nc コマンド(netcat)を使って、特定のポートに実際に接続できるかどうかをテストしましょう。nc は、TCP または UDP を使用してネットワーク接続から読み取り、書き込むことができる汎用的なネットワーキングユーティリティです。

nc で以下のオプションを使用します。

  • -z: nc がリスニングしているデーモンをスキャンするだけで、それらにデータを送信しないことを指定します。これは、ポートが開いているかどうかを確認するのに便利です。
  • -v: 詳細出力を有効にし、接続試行に関する詳細を表示します。

前のステップでリスニングしていることがわかったポート 22(SSH)への接続性をテストします。ローカルマシンへの接続をテストします。ローカルマシンは、IP アドレス 127.0.0.1 またはホスト名 localhost で参照できます。

ターミナルが開いていない場合は、開きます。

次のコマンドを入力して Enter キーを押します。

nc -zv 127.0.0.1 22

次のような出力が表示されるはずです。

Connection to 127.0.0.1 22 port [tcp/ssh] succeeded!

この出力は、nc がローカルマシンのポート 22 に正常に接続できたことを確認しています。

次に、おそらく開いていないポート、たとえばポート 80(HTTP)をテストしてみましょう。この環境ではデフォルトでウェブサーバーが実行されていないためです。

次のコマンドを入力して Enter キーを押します。

nc -zv 127.0.0.1 80

接続が拒否されたかタイムアウトしたことを示す出力が表示されるでしょう。例えば、次のような出力です。

nc: connect to 127.0.0.1 port 80 (tcp) failed: Connection refused

この出力は、nc がポート 80 に接続できなかったことを示しています。これは、そのポートでサービスがリスニングしていないため、予想される結果です。

nc -zv を使用すると、現在の場所から特定のポートに到達可能で開いているかどうかを簡単に確認できます。

Continue をクリックしてこの実験を完了します。

まとめ

この実験では、コマンドラインツールを使用して Linux でポートが開いているかどうかを確認する方法を学びました。まず、netstat -tuln コマンドを使用して、リスニング状態のすべての開いている TCP および UDP ポートをリストし、プロトコル、ローカルアドレス、外部アドレス、および状態を含む出力形式を理解しました。

次に、ss -tuln コマンドを使用してポートの状態を確認しました。このコマンドは netstat と同様の情報を提供しますが、より新しく高速な代替手段とされることが多いです。最後に、nc -zv コマンドを使用して特定のポートへの接続性をテストする方法を学びました。このコマンドは接続を確立しようとし、ポートが開いていて到達可能かどうかを報告します。これらの手順は、Linux システムでのネットワークトラブルシューティングとセキュリティ分析に必要なスキルを提供します。