Linux システムのネットワーク活動を監視する方法

Linux システムのネットワーク活動を監視したいと思う理由はたくさんあります。 ネットワークの問題をトラブルシューティングしている場合、疑わしいネットワーク活動を行う悪意のあるアプリケーションがないことを確認したい場合、あるいは、単に、あるプロセスが家に電話をかけているかどうかを知りたい場合などが考えられます。 どのような理由であれ、システム上のどのプロセスがネットワーク活動を行い、誰と通信しているかを確認する方法をいくつか紹介します。

このチュートリアルでは、次のことを学習します。

  • netstat
  • でネットワーク接続とリスニングサービスを監視する方法

  • lsof
  • でネットワーク接続とリスニングサービスを監視する方法

  • ifconfig
  • でネットワーク接続とリスニングサービスを監視する方法

  • どのツールを使えば ネットワーク上で送信されたもの

Linux システム上でネットワークの活動を監視する方法

使用するソフトウェアの要件と規約

ソフトウェア要件と Linux コマンドライン規約
カテゴリ 要件。 使用するソフトウェアバージョン
システム 流通に依存しない
ソフトウェア netstat, lsof, ifconfig, wireshark, tcpdump
Other Linuxシステムにrootまたはsudoコマンドで特権的にアクセスすることです。
Conventions # – 与えられた linux コマンドを root 権限で実行する必要があります root ユーザーとして直接、または sudo コマンドを使用します
$ – 与えられた linux コマンドを非特権ユーザーとして実行する必要があります

Netstat

Netstat ネットワーク接続状況をプリントできる強力なユーティリティです。 ルーティングテーブル、インターフェイス統計、マスカレード接続、マルチキャストメンバーシップ。

Netstat のインストール

Ubuntu などの Debian や Debian ベースのシステムでは、apt を使ってください。

# apt install net-tools

Red Hat Enterprise Linux や Red Hat ベースでは yum、

# yum install net-tools

Arch ベースでは、pacman を使ってください。

# pacman -S net-tools
Linux システムアナリスト募集 !
The UAF Geophysical Institute, は、研究サイバーインフラのアナリストおよびエンジニアのチームに参加する経験豊かな Linux システムアナリストを募集しています。 場所: Fairbanks, Alaska, USA
APPLY NOW
注意
以下の例では、ゲスト追加をインストールした VirtualBox で動作する RHEL 8 の新規インストールを使っています

View listening processes

最初に、接続待ちプロセスを表示させてみましょう。

$ sudo netstat -tulpen

このコマンドでは、tTCP接続、uはUDP接続、lは待ち受けソケットのみ、pは接続先のプログラム、eは拡張情報、nはアドレス、ユーザー、ポートを数値で表示します。

netstat -tulpen output

ほとんどのネットワークソフトウェアが基づいているクライアントサーバモデルを考えるとき、 listen プロセスは「サーバ」モードにあるソフトウェアとして考えることができる。 私たちのセットアップを考えると、この出力は何も驚くべきものではありません。 これらはすべて、VirtualBoxで実行されている RHEL 8 の新規インストールでネットワーク接続をリッスンしていると予想されるプロセスです。
リッスン中の各プロセスについて、使用されているプロトコル、リッスン中のローカル アドレスとポート、実行中のユーザー、および PID/プログラム名が表示されます。 ここで注意すべき重要な区別が 1 つあります。tcp4/udp4接続 (単にtcpudpと表示されている) でLocal Address0.0.0.0と表示されている場合、プロセスはネットワーク上で接続可能なすべてのマシンからの接続を待ち受けるが、127.0.0.1と表示されている場合は、ローカルホスト (実行しているマシンまたは自身) 上の接続のみを待ち受け、ネットワーク上の他のコンピュータから接続できないようになっている。tcp6/udp6の区別は、Local Address::(ネットワークに面している) と::1(ローカルホストのみ)を比較した場合にも同じことが言えます。

すべてのネットワーク接続の表示

次に、現在のすべてのネットワーク接続を見てみましょう。 これを行うには、次のコマンドを入力します。これは、-l を使用してリスニング中のソケットのみを表示する代わりに、すべてのソケットを表示することを除いて、前のものと似ています。

$ sudo netstat -atupen

「サーバ」として接続待ちのソフトウェアを表示することに加えて、このコマンドでは、そのソフトウェアへの現在確立されている接続と、Web ブラウザなどの「クライアント」として動作するソフトウェアによるネットワーク接続も表示します。

netstat -atupen output

スクリーンショットでは、ESTABLISHED状態の 2 つの接続があることに気がつくでしょう。 もう一度言いますが、ここで驚くことはありません。 そのうちの 1 つは NetworkManager に属し、ゲートウェイサーバー (この場合、ホストマシン) からのネットワークを有効にするための DHCP クライアントとして動作します。 もうひとつは、VirtualBoxでsshサービスをポートフォワードして作った、マシンへのSSH接続です。

View established connections

View the ESTABLISHED connections only want to view という状況になることがあります。 これは netstat の出力を以下のように grep にパイプすることで簡単にできます。

$ sudo netstat -atupen | grep ESTABLISHED

sudo netstat -atupen | grep ESTABLISHED output

上記のコマンドを firefox で wikipedia.com に移動してから入力して、スクリーンショットはサイトへの移動中に firefox が確立した接続をキャプチャしています。 Firefox が接続したサーバーは、91.198.174.192172.217.23.100216.58.215.67104.111.215.142 の 4 つであることがわかります。 これらのサーバが誰のものかを調べるには、Whois で次のように IP アドレスを照会します。

$ whois 91.198.174.192| less

それぞれについて照会すると、Wikimedia、Google、Google、および Akamai のものであることがわかります。 Wikimediaがwikipediaを所有し、ホストしていることや、GoogleやAkamaiが所有するサーバーでホストされているリソースを読み込むサイトが非常に多いことを考えると、これは理にかなっていると言えるでしょう。 実際、wikipedia のホームページのソースコードを調べてみると、google.com の Google Play Store app-badge と apple.com の Apple AppStore app-badge を読み込んでいることがわかります。
これら 2 つの app badge の URL に個別に移動して上記の netstat コマンドを発行すると、確かにそれぞれ Google と Akamai のサーバーでホスティングされていることが確認されました。

これで netstat に興味を持たれたなら、netstat コマンドの使用についてもっと知りたい方は、こちらの記事をご覧ください

ss

netstatコマンドは長い間システム管理者のお気に入りでしたが、最近 ss コマンドに取って代わられました。 ss を使って、上で行ったのと同じ操作を行う方法を見てみましょう。 Ss には、拡張情報を表示する -e オプションもありますが、このオプションは、読みにくい出力となる可能性のある追加情報を生成するため、以下の例では省略されています。

$ sudo ss -tlunp

このコマンドでは、tTCP 接続、l は待ち受けソケットのみ、u は UDP 接続、n はアドレス、ユーザ、ポートを数値で、p は接続先のプログラムとして表示されます。

すべてのネットワーク接続を表示

すべてのネットワーク接続を表示するには、次のように入力します。al の代わりになり、リスニング中のソケットのみならずすべてのネットワークソケットが表示されます。

$ sudo ss -tunp

lsof

netstatssだけでは物足りない方のために、lsofを紹介します。 Lsof は開いているファイルをリストアップするために使われる。 GNU/Linux は、すべてがファイルであるという UNIX の設計原理を継承しており、これにはネットワーク接続も含まれます。 その結果、lsof は前述のコマンドと同様の方法でネットワークの活動を見るために使われる。

すべてのネットワーク接続を見る

すべてのネットワーク接続を見るには、次のように入力する。

$ sudo lsof -nP -i

このコマンドでは、nはアドレスを数字で表し、Pはポートを数字で表し、iはネットワークファイルとみなされないオープンファイルのリストを抑止します。

View established connections

established connectionsのみを表示するには、次のように入力してください:追加スイッチはすべての確立したTCP接続をリストアップします。

$ sudo lsof -nP -iTCP -sTCP:ESTABLISHED

View listening processes

This is miss any processes that are listening over UDP, so instead to enter the following to include those as well, may be desirable by the following.

$ sudo lsof -nP -i | grep 'LISTEN\|UDP'

Monitoring data being sent over the network

これまで、netstatss および ifconfig がどのネットワーク接続が誰に対して行われているかを監視するために使用できるかを見てきましたが、どのデータがネットワーク上に送信されているかを正確に見ることが望ましい場合が多々あります。 この目的を達成するためには、パケットスニッフィングが可能なアプリケーションが必要である。 この分野に特化したプログラムとして、tcpdumpwireshark があります。
以前、RHEL 8 に wireshark をインストールする方法、Linux におけるネットワーク・プロトコル解析器 Wireshark の基礎、Kali Linux の Wireshark におけるパケットのフィルタリング、そして Linux システムとハードウェアのモニタリングの Network Monitoring 項に tcpdump についての素晴らしい紹介を書きましたが、

結論

では、次のようなことを書いています。

コメントを残す

メールアドレスが公開されることはありません。