【Linux】ソケットの状態を確認する:netstatコマンド

 ネットワーク管理において、サーバーの接続状況やポートの監視は非常に重要です。これを実現するために、従来から広く使用されてきたのがnetstatコマンドです。netstatコマンドは、ネットワーク接続の状態、ルーティングテーブル、インターフェースの統計情報、さらにはソケットの状態を確認するためのツールです。これにより、サーバーのパフォーマンスやセキュリティを監視し、問題が発生した際のトラブルシューティングに役立てることができます。

netstatコマンドの概要

 netstatコマンドは、ネットワーク接続、ルーティングテーブル、インターフェース統計、マスカレード接続、マルチキャストメンバーシップなど、ネットワークに関するさまざまな情報を表示するためのツールです。しかし、netstatコマンドは現在非推奨とされており、将来的に廃止される予定です。その代わりに、より高速で詳細な情報を提供するssコマンドが推奨されています。

ソケットの主な状態

状態説明
LISTENサーバーが接続を待機している状態。ソケットは接続要求を待ち受ける。
ESTABLISH接続が確立されている状態。クライアントとサーバー間の通信が行われている。
ソケットの主な状態

【構文】
netstat [オプション]

netstatコマンドの主なオプション

オプション説明
-nポート番号で表示する。サービス名では表示しない。
-tTCPソケットのみを表示する。
-uUDPソケットのみを表示する。
-aすべてのソケット(リスニングと非リスニングの両方)を表示する。
-lリスニングソケットのみを表示する。
-pソケットに関連付けられたプロセスを表示する。
netstatコマンドの主なオプション

netstatのインストール(Ubuntu)

 netstatコマンドは、net-toolsパッケージの一部として提供されていますが、デフォルトでインストールされていない場合があります。インストールするには、以下のコマンドを使用します。

sudo apt-get install net-tools

sudo apt-get install net-toolsコマンドを実行することで、netstatコマンドがインストールされます。

$ sudo apt-get install net-tools
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
以下のパッケージが新たにインストールされます:
  net-tools
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 13 個。
204 kB のアーカイブを取得する必要があります。
この操作後に追加で 819 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu jammy/main amd64 net-tools amd64 1.60+git20181103.0eebece-1ubuntu5 [204 kB]
204 kB を 1秒 で取得しました (163 kB/s)
以前に未選択のパッケージ net-tools を選択しています。
(データベースを読み込んでいます ... 現在 210802 個のファイルとディレクトリがインストールされています。)
.../net-tools_1.60+git20181103.0eebece-1ubuntu5_amd64.deb を展開する準備をしています ...
net-tools (1.60+git20181103.0eebece-1ubuntu5) を展開しています...
net-tools (1.60+git20181103.0eebece-1ubuntu5) を設定しています ...
man-db (2.10.2-1) のトリガを処理しています ...

netstatコマンドを使用する場面

  • ネットワーク接続の監視: サーバーのリスニングソケットを確認したり、現在確立されている接続を確認したい場合に使用されます。
  • トラブルシューティング: ネットワーク接続に問題がある場合、その原因を特定するために使用します。
  • セキュリティ分析: システム上で開いているポートや、それに関連するプロセスを確認し、不正な接続がないかチェックする場合に便利です。

netstatコマンドの出力例と項目

以下に、netstatコマンドの出力例と、それに含まれる項目の説明を示します。

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 192.168.1.5:ssh         192.168.1.10:49756      ESTABLISHED 1234/sshd
tcp        0      0 0.0.0.0:http           0.0.0.0:*               LISTEN      5678/nginx
項目説明
Proto使用されているプロトコル(tcp, udpなど)
Recv-Q受信キューのサイズ。受信バッファにある未処理のデータ量を示す。
Send-Q送信キューのサイズ。送信バッファにある未処理のデータ量を示す。
Local Addressローカルホストのアドレスとポート番号
Foreign Addressリモートホストのアドレスとポート番号
Stateソケットの状態(LISTEN, ESTABLISHEDなど)
PID/Program nameソケットに関連付けられたプロセスIDとプログラム名
netstatコマンドの出力項目

コマンドの使用例と解説

1.すべてのTCPソケットを表示する。

 このコマンドは、すべてのTCPソケット(リスニングと確立された接続の両方)を表示します。ネットワーク接続の監視に役立ちます。

$ netstat -at
稼働中のインターネット接続 (サーバと確立)
Proto 受信-Q 送信-Q 内部アドレス            外部アドレス            状態      
tcp        0      0 localhost:ipp           0.0.0.0:*               LISTEN
tcp        0      0 localhost:domain        0.0.0.0:*               LISTEN
tcp        0      0 ubuntu-vm:40802         ubuntu-mirror-1.ps:http TIME_WAIT
tcp6       0      0 ip6-localhost:ipp       [::]:*                  LISTEN

2.数値形式でTCPソケットを表示する。

 このコマンドは、TCPソケットの状態を数値形式で表示します。ホスト名やサービス名の解決を行わず、IPアドレスやポート番号を直接表示するため、コマンドの実行が高速です。

user01@ubuntu-vm:~$ netstat -atn
稼働中のインターネット接続 (サーバと確立)
Proto 受信-Q 送信-Q 内部アドレス            外部アドレス            状態      
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN
tcp6       0      0 ::1:631                 :::*                    LISTEN

まとめ

 netstatコマンドは、ネットワーク接続やソケットの状態を確認するための基本的なツールですが、現在では非推奨となっており、将来的に廃止される予定です。これからは、より高速で詳細な情報を提供するssコマンドの使用が推奨されます。それでも、netstatコマンドを理解しておくことは、古いシステムやレガシーサポートにおいて重要です。