【完全ガイド】Linux netstatコマンド徹底解説!ネットワーク状態の確認・解析・活用テクニック【実践例付き】

最終更新日 2025年1月22日

netstatコマンドの使い方

netstatコマンドの全オプションとその説明の一覧や出力結果の見方を確認したい人は下記リンクで該当の場所にジャンプしてください。

スポンサーリンク

netstatコマンドとは?基本概要を解説

Linuxのnetstat(network statistics)コマンドは、システムのネットワーク接続やルーティングテーブル、インターフェースの統計情報を確認するためのツールです。
サーバー管理やネットワークのトラブルシューティングの際に広く活用されています。

現在のLinux環境では、より高速な ss コマンドが推奨されることもありますが、netstat は依然として多くのシステムで利用可能であり、ITエンジニアとしては押さえておきたいコマンドだと考えています。

基本概要としてどんなコマンドか以下の順に解説します。

  1. ネットワーク接続の確認ができる
  2. ポートの使用状況の確認ができる
  3. ネットワークトラブルシューティングで活用できる
  4. 多くの環境でサポートされている
netstatコマンドの基本概要
netstatコマンドは、ネットワーク接続やルーティングテーブル、インターフェースの統計情報を確認するためのツールです。
ネットワーク接続の確認
netstatコマンドを使うことで、現在システムが確立しているTCP/UDP接続を一覧として確認することができます。これにより、通信状態を詳細に把握できます。
ルーティングテーブルの表示
netstatコマンドを使うことで、システムのルーティングテーブルを確認することができます。これにより、ネットワークの経路情報を素早く確認可能です。
インターフェースの統計情報
netstatコマンドを使うと、ネットワークインターフェースの統計情報も確認できます。これにより、各インターフェーストラフィックデータをチェックできます。
netstatコマンドの基本概要
スポンサーリンク

ネットワークの接続が簡単に確認できる

netstat を使用すると、現在のシステムが確立しているTCP/UDP接続の一覧を取得できます。
これにより、サーバーやクライアントの通信状態を把握することができます。

コマンド例

netstat -an

このコマンドを実行すると、すべてのアクティブな接続が表示されます。

Centosにおけるnetstat -anコマンドの実際の出力結果
Centosにおけるnetstat -anコマンドの実際の出力結果

他にも例えば、サーバーが特定のポートでリスニングしているかどうかをチェックするには、以下のように netstat を使います。

netstat -ln

このコマンドを実行すると、現在リスニングしているポートの一覧が表示されます

Centosにおけるnetstat -lnコマンドの実際の出力結果
Centosにおけるnetstat -lnコマンドの実際の出力結果
スポンサーリンク

ポートの使用状況の確認ができる

特定のアプリケーションがどのポートを使用しているかを確認できます。
例えば、あるポートが他のプロセスによって使用されているために、新しいアプリケーションが起動できない場合などに役立ちます。

netstat -tulnp

このコマンドを実行すると、現在リスニングしているTCP/UDPポートと、それに紐づいたプロセスID(PID)が確認できます。

Centosにおけるnetstat -tulnpコマンドの実際の出力結果
Centosにおけるnetstat -tulnpコマンドの実際の出力結果

ネットワークトラブルシューティングで活用できる

ネットワークの遅延や接続の問題を調査する際に netstat を活用できます。
例えば、特定のポートが意図せずブロックされている場合や、不審な接続が確立されている場合に調査が可能です。

netstat -ant | grep ESTABLISHED

このコマンドで、確立済みの接続(ESTABLISHED)のみを抽出して表示できます。

Centosにおけるnetstat -ant | grep XXXXの実際の出力結果
Centosにおけるnetstat -ant | grep XXXXの実際の出力結果
スポンサーリンク

多くの環境でサポートされている

最近のLinuxディストリビューションでは netstat の代わりに ss コマンドが推奨されることが増えています。

ss コマンドは netstat に比べて高速で、より詳細な情報を提供できるため、新しいシステムでは ss を使用することが一般的です。しかし、netstat は依然として多くの環境でサポートされており、伝統的なネットワーク管理ツールとして広く使用されています。

netstatss の比較

コマンド特徴
netstat古くから使われているが、やや動作が遅い
ssnetstat よりも高速で、詳細な情報を取得できる

例えば、netstat -ant の代わりに ss -ant を使うと、より高速に同じ情報を取得できます。

ss -ant
Centosにおけるss -antコマンドの実際の出力結果
Centosにおけるss -antコマンドの実際の出力結果

どちらのコマンドもネットワークの状態を確認するために役立ちますが、環境に応じて使い分けるのが良いでしょう。

  • netstat はネットワークの状態を確認するための重要なコマンド
  • 現在のTCP/UDP接続やリスニングポートを簡単に確認できる
  • ss コマンドと比較して遅いが、多くの環境で利用可能

次のセクションでは、netstat の具体的なオプションと使い方について詳しく解説していきます!

スポンサーリンク

netstatコマンドのオプション一覧と使い方

netstat コマンドはさまざまなオプションと組み合わせることで、ネットワークの詳細な状態を確認できます。ここでは、よく使われるオプションとその意味、そして実践的な組み合わせ例について解説します。

netstatコマンドの主なオプション一覧と使い方
netstatコマンドの主要なオプションとその使い方を理解し、効率的にネットワークを管理しましょう。
主要なオプション一覧
netstatの主要なオプションとして、-a(全接続)、-t(TCP接続)、-u(UDP接続)、-n(数値表示)、-p(プロセス情報)などがあります。
オプションの使い方
例えば、netstat -anで全接続を数値で表示し、netstat -tulnpでTCP/UDPのリスニングポートとプロセス情報を確認できます。
netstatコマンドの主なオプション一覧と使い方について

基本的なオプションとその意味

以下の表に、netstat の主要なオプションとその意味をまとめました。

オプション説明使用例
-a(すべての接続とリスニングポートを表示)現在アクティブな接続と、待機中(リスニング中)のポートをすべて表示する。どのサービスが通信を待っているのかを確認できる。netstat -a
-t(TCP接続のみを表示)TCP(信頼性の高い通信プロトコル)を使った接続だけを表示する。Web(HTTP)やSSH接続を確認するのに便利。netstat -t
-u(UDP接続のみを表示)UDP(軽量な通信プロトコル)を使った接続だけを表示する。DNSやDHCPなど、UDPを使うサービスの動作確認に役立つ。netstat -u
-n(アドレスやポート番号を数値で表示)ホスト名(例:example.com)やサービス名(例:http)を表示せず、IPアドレスやポート番号をそのまま数値で表示する。DNSの影響を受けずに素早く結果を確認できる。netstat -n
-p(プロセスIDとプログラム名を表示)どのプログラム(プロセス)がどのポートを使っているのかを表示する。特定のアプリケーションがどのポートで通信しているのかを調べたいときに便利。netstat -p
-r(ルーティングテーブルを表示)サーバーやPCがどのネットワーク経路を使って通信しているのかを確認できる。インターネット接続のトラブルシューティングにも活用できる。netstat -r
-i(ネットワークインターフェースの状態を表示)サーバーやPCに接続されているネットワークインターフェース(LANやWi-Fiなど)の状態を確認できる。どの回線が使われているのかを知りたいときに便利。netstat -i
netstatコマンドのマニュアル
netstatコマンドのマニュアル
スポンサーリンク

よく使う組み合わせ5選択

netstat のオプションは、単体で使うよりも組み合わせることでより詳細な情報を取得できます。以下に、実務でよく使われるコマンドの例を紹介します。

  1. すべての接続を数値で表示
  2. TCP/UDPのリスニングポートとプロセス情報を表示
  3. ルーティングテーブルの確認
  4. 確立済みの接続を監視(リアルタイム監視)
  5. 特定のポートを使っているプロセスを確認
よく使う組み合わせ例
netstatコマンドの使用頻度が高い組み合わせ例を紹介し、
それぞれの用途を解説します。
全接続を表示
netstat -anは、すべてのアクティブな接続とリスニング状態を数値で表示します。これにより、確立された接続や待機中のポートを迅速に把握できます。
リスニングポートを表示
netstat -tulnpは、TCP/UDPのリスニングポートとその対応プロセス情報を表示します。どのアプリケーションがポートを使用しているかを特定するのに便利です。
ルーティングテーブル確認
netstat -rnは、ルーティングテーブルの情報を表示します。ネットワーク経路の確認やトラブルシューティングに役立ちます。通信経路の設定が正しいかを確認できます。
よく使用するオプションの組み合わせ例

❶すべての接続を数値で表示

netstat -an

利用場面

  • 現在確立されているすべての接続(TCP/UDP)を一覧表示
  • 名前解決を省略することで、高速に情報を取得できる
netstat -anの用途例
netstat -anコマンドを使用して、すべてのアクティブな接続を数値で表示し、ネットワークの状態を迅速に把握します。
すべてのアクティブな接続表示
netstat -anコマンドを実行すると、現在確立されているTCPおよびUDP接続が一覧表示されます。これにより、サーバーとクライアントの通信状態を即座に確認することができます。
数値表示の利点
アドレスやポートを数値で表示することで、DNSルックアップの待ち時間が省かれ、結果の取得が高速化されます。また、証拠の明確な記録としても利用できます。
netstat -anの用途の補足
スポンサーリンク

❷TCP/UDPのリスニングポートとプロセス情報を表示

netstat -tulnp

利用場面

  • 現在サーバー上で待ち受けているポートを確認する時
  • プロセスID(PID)とプロセス名も取得できるため、どのアプリケーションがリスニングしているかが分かる
netstat -tulnpの用途の補足
netstat -tulnpコマンドで
TCP/UDPのリスニングポートとプロセス情報を迅速に確認できます。
リスニングポートの表示
netstat -tulnpコマンドを実行すると、現在リスニングしている全てのTCP/UDPポートを表示します。これにより、どのポートがサービス待機中なのかを簡単に把握できます。
プロセス情報の表示
netstat -tulnpは、各リスニングポートに対応するプロセスID(PID)とプロセス名も同時に表示します。この情報は、特定のポートを使用しているアプリケーションの特定に有用です。
トラブルシューティングの利便性
具体的なプロセス情報とリスニングポートの表示により、問題のある接続やサービスの特定が容易になり、迅速なトラブルシューティングが可能です。
netstat -tulnpの用途の補足

❸ルーティングテーブルの確認

netstat -rn

利用場面

  • システムがどの経路を通じてネットワーク通信を行っているかを確認する時
  • デフォルトゲートウェイ(0.0.0.0default)の設定をチェックできる
netstat -rnの用途の補足
netstat -rnコマンドを使ってルーティングテーブルを表示し、
ネットワーク経路の確認とトラブルシューティングに役立る。
ルーティングテーブルの確認
Netstat -rnコマンドを実行すると、カーネルのIPルーティングテーブルが表示されます。これにより、サーバーの通信経路がどのように設定されているかを確認できます。
ネットワーク経路の確認
ルーティングテーブルに表示されるエントリーは、デフォルトゲートウェイや特定のサブネットへのルートを示しています。これにより、ネットワーク障害が発生した場合に迅速に経路をチェックできます。
netstat -rnの用途の補足
スポンサーリンク

❹確立済みの接続を監視(リアルタイム監視)

watch -n 1 'netstat -ant | grep ESTABLISHED'

利用場面

  • 1秒ごとに確立済みのTCP接続をリアルタイムで更新・監視する時など
  • 接続が急増した場合や不審な接続がある場合に即座に確認可能
Centosにおけるwatch -n 1 'netstat -ant | grep XXXX'の実際の出力結果
Centosにおけるwatch -n 1 ‘netstat -ant | grep XXXX’の実際の出力結果

❺特定のポートを使っているプロセスを確認

netstat -antp | grep :80

利用場面

  • HTTP(ポート80)を使用しているプロセスを特定する時
  • Webサーバー(Apache/Nginx)が正常に動作しているかの確認等
Centosにおけるnetstat -antp | grep :XXの実際の出力結果
Centosにおけるnetstat -antp | grep :XXの実際の出力結果

netstatコマンドの全オプションとその説明一覧

netstatコマンドの全オプションとその説明内容の一覧は下記になります。

オプション説明
-r / --routeルーティングテーブル(ネットワークの経路情報)を表示する。route -e と同じ出力を得られる。
-g / --groupsIPv4 / IPv6 のマルチキャストグループの情報を表示する。
-i / --interfaces=ifaceネットワークインターフェースの一覧、または指定したインターフェースの情報を表示する。
-M / --masqueradeIPマスカレード(NAT でアドレス変換される接続)の一覧を表示する。
-s / --statisticsプロトコルごとのネットワーク統計情報を表示する。
-v / --verbose詳細な情報を表示する。特に、未設定のアドレスファミリーについての情報を出力する。
-W / --wideIPアドレスを省略せずに表示する。デフォルトでは一部のアドレスが切り詰められる場合がある。
-n / --numericホスト名やポート名を解決せず、IPアドレスやポート番号をそのまま数値で表示する。
--numeric-hostsホストアドレスのみ数値で表示し、ポートやユーザー名の解決は行う。
--numeric-portsポート番号のみ数値で表示し、ホストやユーザー名の解決は行う。
--numeric-usersユーザーID(UID)のみ数値で表示し、ホストやポートの解決は行う。
-A / --protocol=family表示するアドレスファミリー(inet、inet6、unix など)を指定する。
-c / --continuous指定した情報を1秒ごとに継続して表示し続ける。
-e / --extend通常より詳細な情報を表示する(2回指定するとさらに詳しく表示される)。
-o / --timersネットワーク関連のタイマー情報を表示する。
-p / --program各ソケットに関連付けられたプロセスID(PID)とプロセス名を表示する。
-l / --listening待機中(リスニング中)のポートのみを表示する(デフォルトでは省略される)。
-a / --allリスニング中のポートと、確立済みの接続(TCP)をすべて表示する。
-Fルーティング情報をFIB(Forwarding Information Base)から取得して表示する(デフォルト)。
-Cルートキャッシュ(過去のルーティング情報)からルーティングデータを取得して表示する。
delay指定した秒数ごとにネットワーク統計情報を更新して表示する。
netstatコマンドの全オプションとその説明一覧の要点
全オプションの機能を理解して状況に応じた適切な
ネットワークトラブルシューティングをしましょう。
基本オプション
-rや-iオプションなど、基本的なネットワーク情報を表示するためのコマンドを紹介します。問題解決のための基礎となります。
拡張オプション
-sや-vオプションなど、プロトコルごとの統計や詳細な情報を取得するコマンドを紹介します。詳細な解析が可能です。
プロトコル指定
-Aや-pオプションなど、特定のプロトコルに関連した内容やプロセス名を表示するコマンドを紹介します。特定状況で有用です。
netstatコマンドの全オプションとその説明一覧の要点
スポンサーリンク

netstatコマンドの出力の見方

以下の出力結果をもとに、各カラムの意味を解説します。

出力例

Proto Recv-Q Send-Q Local Address   Foreign Address  State       PID/Program name
tcp        0      0 192.168.1.10:22 203.0.113.5:58321 ESTABLISHED 1023/sshd
tcp6       0      0 :::80            :::*            LISTEN      2045/nginx
udp        0      0 0.0.0.0:53       0.0.0.0:*                   1502/named
項目名意味1行目(SSH接続の例)2行目(Webサーバーの待機状態の例)3行目(DNSサーバーの例)
Proto通信プロトコル(例:TCP、UDPなど)tcp(TCPプロトコルを使用)tcp6(IPv6を使用したTCPプロトコル)udp(UDPプロトコルを使用)
Recv-Qサーバー側で未処理の受信データ量(通常は0が正常)0(未処理の受信データはない)0(未処理の受信データはない)0(未処理の受信データはない)
Send-Qサーバーが未送信のデータ量(通常は0が正常)0(未送信のデータはない)0(未送信のデータはない)0(未送信のデータはない)
Local AddressサーバーのIPアドレスとポート番号(接続元の情報)192.168.1.10:22(サーバーのIPとSSH用ポート22番):::80(サーバーのポート80番で待機中)0.0.0.0:53(ポート53番でDNSリクエストを待機中)
Foreign Address接続先または待機中のクライアントのIPアドレスとポート番号203.0.113.5:58321(外部IP 203.0.113.5からポート58321を使用して接続中):::*(どのアドレスからでも接続可能)0.0.0.0:*(すべてのIPアドレスからの接続を受け入れ可能)
State接続状態(例:LISTEN、ESTABLISHEDなど)ESTABLISHED(SSH接続が確立している)LISTEN(HTTPリクエストを受け入れるために待機中)表示なし(UDPでは接続状態が表示されない)
PID/Program name接続に関連するプロセスID(PID)とプログラム名1023/sshd(sshdプロセスが動作中)2045/nginx(nginxプロセスが動作中)1502/named(namedプロセスが動作中)

カラム項目の解説

  • Proto(プロトコル)
    通信で使用されるプロトコルを示します。
    • TCP 信頼性の高いプロトコル。データの送受信を確認しながら通信します(例:SSH、HTTP)。
    • UDP 軽量で高速なプロトコル。確認応答なしでデータを送信します(例:DNS、DHCP)。
  • Recv-Q(受信キュー)
    サーバーがまだ処理していない受信データの量(バイト単位)を示します。通常は 0 であるべきで、値が大きい場合は受信処理が滞っている可能性があります。
  • Send-Q(送信キュー)
    サーバーが送信しようとしているが、まだ送信されていないデータの量(バイト単位)を示します。こちらも通常は 0 であるべきで、値が大きい場合は送信側に問題がある可能性があります。
  • Local Address(ローカルアドレス)
    サーバー側のIPアドレスとポート番号を示します。
    • 192.168.1.10:22 サーバーのIPアドレス 192.168.1.10 とポート番号 22(SSH)を使用している。
    • :::80 IPv6でポート番号 80(HTTP)を使用している。
  • Foreign Address(外部アドレス)
    サーバーと接続している外部クライアントのIPアドレスとポート番号を示します。
    • 203.0.113.5:58321 外部クライアント(IPアドレス 203.0.113.5)がポート番号 58321 を使用して接続中。
    • 0.0.0.0:* すべてのIPアドレスからの接続を受け入れる状態。
  • State(接続状態)
    接続がどの状態にあるかを示します(※TCPのみ)。
    • LISTEN サーバーがポートを待機しており、クライアントからの接続を受け付け可能な状態。
    • ESTABLISHED サーバーとクライアントが接続済みで、データの送受信が可能な状態。
    • TIME_WAIT 接続が終了し、再利用可能になるまで待機中。
    • CLOSED 接続が終了済み。
      ※UDPでは接続状態が表示されません。
  • PID/Program name(プロセスIDとプログラム名)
    この接続に関連するプロセスとプログラムを示します。
    • 1023/sshd プロセスIDが 1023sshd プログラム(SSHデーモン)が動作中。
    • 2045/nginx プロセスIDが 2045nginx プログラムが動作中。

まとめ

  • netstat のオプションを適切に組み合わせることで、ネットワークの詳細な情報を取得できる
  • -an で確立済みの接続を確認し、-tulnp でリスニングポートとプロセスを特定
  • ルーティング情報(-r)やネットワークインターフェース(-i)の統計も確認可能
  • grep や watch と組み合わせると、リアルタイム監視や特定のポートのチェックができる

次のセクションでは、netstatコマンドの実践的な活用例について詳しく解説します!

スポンサーリンク

現場で役立つ!netstatコマンドの実践的な活用例

netstat コマンドは、単なるネットワーク状態の確認だけでなく、実際の運用現場で様々なトラブルシューティングやネットワーク管理に活用されています。

ここでは、サーバーの通信状況の確認や、不審な接続の検出、ルーティング情報のチェックなど、実践的な使い方を実際に事例をもとに詳しく解説します。

  1. 事例❶ウェブサーバーのトラブルシューティング(リスニング中のポートを確認する)
  2. 事例❷不審なアクセスの検出(アクセスが多いポートを特定する)
  3. 事例❸サーバーへの不正アクセスの調査(不審な接続を検出する)
  4. 事例❹ブルートフォース攻撃の対応(SSHへの接続の監視)
  5. 事例❺ネットワーク経路のトラブルシューティング(サーバーのルーティング情報を確認)
netstatコマンドの実践的な活用例
netstatコマンドを使用したサーバーの通信確認、不審アクセスの検出、ルーティング情報のチェック方法を紹介します。
サーバー通信の確認
netstat -tulnpでリスニング中のポートを確認し、プロセスIDやプロセス名も同時に把握して障害を迅速対応します。
不審なアクセスの検出
netstat -anとgrepで特定ポートの接続数をカウントし、不審なIPアドレスからのアクセスを特定して対策します。
ルーティング情報のチェック
netstat -rnでルーティングテーブルを表示し、正しい経路設定を確認して通信トラブルを解決します。
netstatコマンドの実践的な活用例

事例❶ウェブサーバーのトラブルシューティング(リスニング中のポートを確認する)

以前、私が管理しているLinuxサーバーで「ウェブサイトが表示されない」という障害が発生しました。このサーバーでは、Nginxを使用してウェブサイトを提供しており、通常はポート80(HTTP)とポート443(HTTPS)で通信を行っています。「サーバーは起動しているが、クライアントがサイトに接続できない」というトラブルが起きました。

まず問題を切り分けるため、Nginxがリスニングしているポートを確認する必要があり、以下のコマンドを実行しました。

netstat -tulnp

オプションの意味

  • -t TCP接続のみを表示
  • -u UDP接続のみを表示
  • -l リスニングしているポートのみを表示
  • -n アドレスやポート番号を数値で表示(名前解決を省略)
  • -p プロセスID(PID)とプロセス名を表示

出力例

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      1023/sshd
tcp6       0      0 :::80           :::*            LISTEN      2045/nginx
udp        0      0 0.0.0.0:53      0.0.0.0:*                    1502/named

この出力結果から以下のことがわかりました。

この出力から、

  • SSH(ポート22)がリスニング中(sshd プロセス)
  • Nginx(ポート80)が待機中
  • DNS(ポート53)がUDPで稼働中(named プロセス)

であることがわかります。

上記の結果から、Nginxは問題なくポート80でリスニングしていることが確認できました。
そのため、「ポート80が外部からファイアウォールやネットワーク設定でブロックされている可能性がある」と判断し、ファイアウォールを運用しているチームへ確認依頼をし、ポート80が許可されていないことが判明しました。

事例❶ウェブサーバーのトラブルシューティング
Nginxがリスニングするポートを確認し、ファイアウォールの設定を見直すことで、ウェブサイトの表示障害を特定・解決します。
Nginxのリスニングポート確認
サーバーに障害が起きた際、netstat -tulnp コマンドを使ってNginxがリスニングしているポートを確認し、ウェブサーバーの状態を把握します。これで80または443ポートの問題が発見できます。
ファイアウォール設定の確認
Nginxが正しくリスニングしていても、ファイアウォールの設定でポート80や443がブロックされている場合、外部からアクセスできません。ファイアウォールの設定を確認し、必要なポートを許可するよう調整します。
事例❶ウェブサーバーのトラブルシューティング
スポンサーリンク

事例❷不審なアクセスの検出(アクセスが多いポートを特定する)

ある日、サーバーの負荷が急激に上がり、他のサービスにも影響が出ていました。この状況で、「どのポートに対するアクセスが多いのか」を調べる必要がありました。特に、HTTP(ポート80)やSSH(ポート22)へのアクセスが集中していないか確認するため、以下のコマンドを使いました。

HTTP(ポート80)への接続数を確認するために実施したコマンド

netstat -an | grep :80 | wc -l

SSH(ポート22)への接続数を確認するために実施したコマンド

netstat -an | grep :22 | wc -l

これらのコマンドで、現在ポート80またはポート22に接続しているセッションの数をカウントしました。

HTTP(ポート80)への接続数を確認するために実施したコマンドの出力結果が下記となりました。

50000

ポート80の接続数が50となっており、通常、このサーバーのポート80への接続は100〜200程度で安定しているため、「異常なアクセスが集中している」と判断しました。

さらに、次のコマンドで、どのIPアドレスからの接続が多いのかを確認しました。

実施コマンド

netstat -an | grep :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

実際の出力結果

4500 XXX.XXX.XXX.XXX
15 YYY.YYY.YYY.YYY
10 192.168.1.10

この結果から、特定の外部IPアドレス(XXX.XXX.XXX.XXX)から大量の接続があることが判明しました。このIPアドレスがサーバー負荷の原因と考えられるため、ファイアウォールでアクセスをブロックしました。

事例❷不審なアクセスの検出
サーバー負荷が急増した際に、集中しているアクセスポートをnetstatコマンドで特定する方法
負荷増加の原因確認
サーバーの負荷が急激に上昇した際、どのポートにアクセスが集中しているかを確認するために、まずはHTTPとSSHの接続数を確認します。具体的には以下のコマンドを使ってHTTP(ポート80)とSSH(ポート22)の接続数を調べます。
特定のポートへの接続数確認
netstat -an | grep :80 | wc -l でHTTPへの接続数、netstat -an | grep :22 | wc -l でSSHへの接続数を確認できます。これにより、異常なアクセス集中が簡単に特定できます。特にポート80の結合数が著しく高い場合は、外部からの過剰なリクエストが原因である可能性が高いです。
接続元のIPアドレス特定
netstat -an | grep :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr コマンドで、どのIPアドレスからの接続が多いのかを特定できます。これにより、特定のIPアドレスからの大量のアクセスを検出し、必要に応じてそのアドレスをブロックする対策が講じられます。
事例❷不審なアクセスの検出
スポンサーリンク

事例❸サーバーへの不正アクセスの調査(不審な接続を検出する)

私が管理しているサーバーで、セキュリティ監視ツールから「不審な通信が増加している」というアラートを受け取りました。このサーバーはSSH(ポート22)やHTTPS(ポート443)を使用しており、通常は限られたIPアドレスからのアクセスしかありません。しかし、ログイン試行の失敗が急増しており、不正アクセスの可能性が高いと考えました。

まず、不審な接続を検出するために、現在確立されている(ESTABLISHED 状態の)すべての接続を確認しました。

確立済みの接続を確認するために実施したコマンド

netstat -an | grep ESTABLISHED

出力結果

tcp        0      0 192.168.1.10:22   XXX.XXX.XXX.XXX:58321  ESTABLISHED
tcp        0      0 192.168.1.10:443  YYY.YYY.YYY.YYY:51234 ESTABLISHED

この出力を確認したところ、次のような状況が分かりました。

  • SSH(ポート22)に外部IPアドレス XXX.XXX.XXX.XXX から接続がある
  • HTTPS(ポート443)に外部IPアドレス YYY.YYY.YYY.YYY からアクセスがある

通常、SSHは社内ネットワークからのみ接続を許可しているため、外部IP(XXX.XXX.XXX.XXX)の存在は想定していませんでした。

さらに調査を進めるために、SSH(ポート22)へのアクセス状況を調査することにしました。事例❹に続きます。

事例❸サーバーへの不正アクセスの調査
netstatコマンドで確立済み接続を確認し、不審な外部IPアドレスからのアクセスを迅速に検出する方。
確立済み接続の確認
netstat -an | grep ESTABLISHED コマンドを使用し、現在の確立済み接続を一覧表示し、異常な外部IPアドレスを特定します。
不審な接続の調査
特定した不審な外部IPアドレスを調べて、通常の接続ではないか、または頻度が異常でないかを確認します。
事例❸サーバーへの不正アクセスの調査
スポンサーリンク

事例❹ブルートフォース攻撃の対応(SSHへの接続の監視)

SSHへの不審なアクセスがないか確認するため、以下のコマンドを実行しました。

不審な接続を確認するために実施したコマンド

netstat -antp | grep :22

出力結果

tcp        0      0 192.168.1.10:22   XXX.XXX.XXX.5:58321  ESTABLISHED  1023/sshd
tcp        0      0 192.168.1.10:22   XXX.XXX.XXX.6:58322  ESTABLISHED  1023/sshd
tcp        0      0 192.168.1.10:22   XXX.XXX.XXX.7:58323  ESTABLISHED  1023/sshd

上記の出力結果から複数の外部IP(XXX.XXX.XXX.5、XXX.XXX.XXX.6、XXX.XXX.XXX.7)から同時にSSH接続が確立されていることが判明しました。通常では考えられない接続だったため、不正アクセス(ブルートフォース)が行われている可能性が高いと判断しました。

ファイアウォールで接続をブロック

不正アクセスに対する対策として、該当するIPアドレスをファイアウォール(iptables)でブロックすることで、接続を遮断しました。

sudo iptables -A INPUT -s XXX.XXX.XXX.5 -j DROP
sudo iptables -A INPUT -s XXX.XXX.XXX.6 -j DROP
sudo iptables -A INPUT -s XXX.XXX.XXX.7 -j DROP

その後、念のため以下のコマンドを使って1秒ごとに確立済みの接続(ESTABLISHED)をリアルタイム監視しました。

監視のために実施したコマンド

watch -n 1 'netstat -antp | grep ESTABLISHED'
事例❹ブルートフォース攻撃の対応
SSHへの不正アクセスを監視し、ファイアウォールで対処する。
不審な接続の監視
netstat -antp | grep :22 コマンドを実行し、SSH接続をリアルタイムで監視します。複数の外部IPからの同時接続が確認できる場合、不正アクセスの疑いがあります。
ファイアウォールでのブロック
ブルートフォース攻撃が確認された場合、sudo iptables -A INPUT -s [不審IP] -j DROP コマンドで不審なIPアドレスをブロックします。これによりサーバーの安全性が向上します。
事例❹ブルートフォース攻撃の対応
スポンサーリンク

事例❺ネットワーク経路のトラブルシューティング(サーバーのルーティング情報を確認)

業務中に、特定のクライアントが「サーバーに接続できない」という報告がありました。
このサーバーでは複数のネットワークインターフェースを使用しており、正しいルート(通信経路)が設定されているか確認する必要がありました。

ルーティングテーブルの確認

以下のコマンドを実行して、サーバーのルーティングテーブルを確認しました。

netstat -rn

出力結果

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
10.0.0.0        192.168.1.2     255.255.255.0   UG    200    0        0 eth1

この結果から以下のことが分かりました。

  • デフォルトゲートウェイは 192.168.1.1(eth0)
  • ローカルネットワーク(192.168.1.0/24)は eth0 を経由
  • サブネット(10.0.0.0/24)は 192.168.1.2(eth1) を経由

問題は、クライアントのIPアドレス(10.0.0.50)が10.0.0.0/24のサブネット内にあるのに、サーバーがルート設定を誤っていることでした。サブネットの経路が不正確だったため、以下のコマンドでルートを修正しました。

ルートの修正コマンド

sudo route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.1.2 dev eth1

修正後、再度接続を確認したところ、クライアントから問題なくサーバーにアクセスできるようになりました。

sudo iptables -A INPUT -s 203.0.113.45 -j DROP
事例❺ネットワーク経路のトラブルシューティング
クライアントからサーバーへの接続問題解決のため
ルーティングテーブルの確認と設定を変更する。
ルーティングテーブルの確認
netstat -rn コマンドでルーティングテーブルを確認し、正しい経路が設定されているか確認します。
ルートの修正方法
sudo route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.1.2 dev eth1 コマンドで正しいルートを設定します。
事例❺ネットワーク経路のトラブルシューティング

この記事も参考になるかも!
この記事を書いた人!

ゴリタン

インフラエンジニアとして、ネットワークとサーバーの運用・保守・構築・設計に幅広く携わり、
現在は大規模政府公共データの移行プロジェクトを担当。

CCNPやLPICレベル3、AWSセキュリティスペシャリストなどの資格を保有しています。