もっと詳しく

ネットワーク管理者として、ネットワークの問題のトラブルシューティングは日常業務の一部です。 ネットワーク関連の問題に取り組む際に不可欠なツールの1つは、 tcpdump Linuxコマンド。

このチュートリアルでは、tcpdumpが一般的なネットワークの問題の診断にどのように役立つかについての実際の例をいくつか紹介します。 このチュートリアルを終了すると、tcpdumpを利用して独自のネットワーク問題をトラブルシューティングする方法をよりよく理解できるようになります。

前提条件

このチュートリアルは、実践的なデモンストレーションになります。 フォローしたい場合は、Linuxマシンを使用していることを確認してください。 このチュートリアルではUbuntu20.04を使用していますが、現在のLinuxディストリビューションであればどれでも機能します。

tcpdumpLinuxツールのインストール

最近のほとんどのLinuxディストリビューション、特にサーバーには、すでにtcpdumpがあります。 しかし、そうでなくても、インストールは汗をかかないで迅速なので心配しないでください。

1.お好みのSSHクライアントを使用してLinuxコンピューターにログインします。

2.まず、以下のコマンドを実行して、tcpdumpがすでにインストールされているかどうかを確認します。

sudo apt list --installed tcpdump

マシンにtcpdumpが存在する場合は、以下のスクリーンショットと同様の出力が表示されます。

tcpdumpが存在しない場合は、代わりに次の結果が得られます。

tcpdumpLinuxツールはまだインストールされていません
tcpdumpLinuxツールはまだインストールされていません

3. tcpdumpがインストールされていないことを確認したら、以下のコマンドを実行してインストールします。

# Update the package index
sudo apt update -y

# Install tcpdump
sudo apt install tcpdump -y
tcpdumpLinuxツールのインストール
tcpdumpLinuxツールのインストール

4.最後に、以下のコマンドを実行して、インストールされているtcpdumpのバージョンを確認します。

この記事の執筆時点で、Ubuntuリポジトリからの最新のtcpdumpバージョンは4.9.3です。

tcpdumpLinuxツールのバージョンの確認
tcpdumpLinuxツールのバージョンの確認

デフォルトインターフェイスでのパケットトラフィックのキャプチャ

tcpdumpの主な用途は、パケットのキャプチャです。 おかげ pcapライブラリ、ツールは、イーサネット、Wi-Fi、PPPなどのさまざまなネットワークタイプからパケットをキャプチャできます。

tcpdumpコマンドの基本形式の構文は次のとおりです。

tcpdump [options] [expression]

どこ:

  • options:さまざまなtcpdumpオプションを設定します。 オプションは、tcpdumpがパケットをキャプチャして表示する方法を制御します。
  • expression:キャプチャするトラフィックのタイプをフィルタリングまたは指定します。 式については、このチュートリアルの後半で詳しく説明します。

tcpdumpの最も基本的な使用例は、デフォルトのネットワークインターフェイス上のすべてのトラフィックをキャプチャし、データを標準出力に表示することです。

を実行します tcpdump オプションや式を指定せずにコマンドを実行して、デフォルトのインターフェイスですべてのトラフィックをキャプチャします。

ネットワークインターフェイスへのアクセスは特権操作であるため、tcpdumpをrootとして、またはsudoプレフィックスを使用して実行する必要があります。

tcpdump 以下に示すように、ツールはパケットをキャプチャし、出力を端末に出力します。 十分なパケットをキャプチャしたと思われる場合は、を押します CTRL+C キャプチャを停止します。

tcpdumpの開始と停止
tcpdumpの開始と停止

パケットキャプチャ数の制限

tcpdump Linuxコマンドは、出力で端末をすぐに圧倒する可能性があり、一度に少量のデータをキャプチャするのが最善です。

あなたは含めることができます -c パケット数を指定するオプション tcpdump 終了する前にキャプチャする必要があります。 このオプションは、分析のために少量のデータのみをキャプチャする場合によく適用されます。

これを行うには、以下のコマンドを実行し、後の番号を変更します -c オプション。 この例では、最大10個のパケットのみをキャプチャし、自動的に終了します。

パケットキャプチャ数の制限
パケットキャプチャ数の制限

冗長性の向上

パケットキャプチャ中に、デフォルトの出力に詳細情報が含まれていないか、表示されていない場合があります。 幸い、tcpdump Linuxツールは、-v、-vv、および-vvvフラグで表される3つのレベルの冗長性を提供します。

これらのオプションを使用する場合、 tcpdump 存続時間(TTL)、識別など、各パケットについてより多くの情報を解析して出力します。

# Verbose
sudo tcpdump -v

# Even more verbose
sudo tcpdump -vv

# Most verbose
sudo tcpdump -vvv

より良い視点については、以下の画像を参照して、 -v-vvv

tcpdumpLinuxコマンドの最小の詳細出力と最大の詳細出力の比較
tcpdumpLinuxコマンドの最小の詳細出力と最大の詳細出力の比較

特定またはすべてのインターフェイスでのパケットのキャプチャ

前の例では、tcpdumpはデフォルトのネットワークインターフェイスでパケットをキャプチャしていました。つまり、覚えておくべきインターフェイスは1つだけです。 しかし、複数のインターフェースがあり、特定のインターフェースまたはすべてのインターフェースでトラフィックをキャプチャしたい場合はどうでしょうか。

tcpdump Linuxコマンドでは、-iフラグを使用してキャプチャするネットワークインターフェイスを指定できます。 このフラグは、インターフェイス名を値として受け入れます。つまり、最初にインターフェイス名を知っている必要があります。

1. -Dオプションを指定してtcpdumpコマンドを実行し、マシンで使用可能なすべてのインターフェースのリストを印刷します。

以下に示すように、このマシンには7つのインターフェースがあります。 お使いのコンピュータには、異なるネットワークインターフェイスのセットがある場合があります。 この例では、イーサネットネットワークインターフェイス、特にeth0とeth1のみに焦点を当てています。

すべてのネットワークインターフェイスの一覧表示
すべてのネットワークインターフェイスの一覧表示

2.次に、以下のコマンドを実行して、必要な特定のインターフェースでパケットのキャプチャを開始します。 この例では、eth1インターフェイスをキャプチャします。 また、キャプチャされるパケットの数を制限するために、以下のコマンドは-cフラグとそれに続くカウントを使用します。

sudo tcpdump -i eth1 -c 5
特定のインターフェイスでパケットをキャプチャする
特定のインターフェイスでパケットをキャプチャする

3. 1つのインターフェイスを指定する代わりに、すべてのインターフェイスで同時にパケットをキャプチャすることもできます。 これを行うには、-iのパラメーター値としてanyを設定します。

なぜすべてのインターフェースでパケットをキャプチャしたいのですか? ここにいくつかの一般的な理由があります。

1つは、すべてのインターフェイスでトラフィックをキャプチャすると、システム宛てでなくても、システムを通過するすべてのトラフィックを確認できることです。

また、どのサービスとプロトコルがネットワークを通過するかを確認できます。 この情報は、ファイアウォールルールやその他のセキュリティ対策を構成する場合、特に新しいサーバーを構築する場合に役立ちます。

tcpdumpLinuxコマンドへのフィルターの追加

パケットを乱暴にキャプチャすることが常に最善のアプローチであるとは限りません。 データの量が混乱し、トラブルシューティングの妨げになる可能性があります。 なんで? 状況に関係のないトラフィックをキャプチャしている可能性があるためです。

このような状況では、フィルターが便利です。 tcpdumpツールには、特定のタイプのトラフィックをキャプチャするための多くの組み込みフィルターがあります。 これらのフィルターを組み合わせて、関連するトラフィックのみをキャプチャすることができます。 以下はいくつかの例です。

ポート番号によるフィルタリング

たとえば、SSHサーバーの問題のトラブルシューティングを行っている場合、ネットワークを通過する他の種類のトラフィックについてはおそらく気にしないでしょう。

以下のコマンドを実行して、ポート宛てのすべてのトラフィックをキャプチャします 22、デフォルトのSSHポート。

sudo tcpdump -c 5 port 22

ご覧のとおり、ツールは送信元または宛先としてポート22のトラフィックのみをキャプチャしました。

ポート22トラフィックのフィルタリング
ポート22トラフィックのフィルタリング

HTTPトラフィックのみに関心がある場合はどうでしょうか。 ポート番号をHTTPポート(デフォルトではポート80)に置き換えるだけです。

sudo tcpdump -c 1 port 80
ポート80トラフィックのフィルタリング
ポート80トラフィックのフィルタリング

注:tcpdumpツールは、ポート番号の代わりにサービスプロトコル名を認識するのに十分な機能を備えています。 たとえば、SSHトラフィックをフィルタリングするためにポート22を指定する代わりに、代わりにポートsshを指定できます。 HTTPトラフィックのポート80、ポートhttpについても同じことが言えます。

プロトコルによるフィルタリング

名前を聞かせないでください tcpdump TCPトラフィックでのみ機能すると思わせてください。 このツールは、ICMPやUDPなどの非TCPトラフィックをキャプチャすることもできます。

たとえば、次のコマンドは任意のインターフェイスからパケットをキャプチャしますが、UDPトラフィックのみをフィルタリングします。

sudo tcpdump -i any -c 5 udp

その結果、以下の結果はUDPトラフィックのみを示しています。これは、NTPおよびDNS操作に関するパケットのようです。

UDPトラフィックのフィルタリング
UDPトラフィックのフィルタリング

DNS関連のトラフィックのみをキャプチャする必要がある場合はどうなりますか? その場合、フィルターを組み合わせることができます udpport 53。 このように、意図した出力にはDNS関連のパケットのみが表示されます。

sudo tcpdump -i any -c 5 udp port 53

今回は、UDPトランスポートプロトコルに制限されたDNS関連(A、PTR、AAAルックアップ、および応答)トラフィックのみをキャプチャしました。

プロトコルとポートフィルターの組み合わせ
プロトコルとポートフィルターの組み合わせ

ネットワークでpingフラッド攻撃が発生していると思われますか? を使って出発地と目的地を見つけてみませんか tcpdump? これを行うには、以下のコマンドを実行して、ICMPトラフィックを任意のインターフェイスでリッスンします。

-n フラグは、tcpdumpがホスト名を解決しようとするのを防ぎ、代わりにIPアドレスを表示します。 このタイプの状況では、名前解決をバイパスするとパフォーマンスが向上する可能性があります。

sudo tcpdump -n -i any icmp
ICMPネットワークパケットのキャプチャ
ICMPネットワークパケットのキャプチャ

あなたはすでに気づいているかもしれません tcpdump フィルタは強力で柔軟性があります。 さまざまなフィルターを組み合わせることで、目的の結果に関連するトラフィックをキャプチャできます。

tcpdumpフィルターの詳細については、 tcpdumpのマニュアルページ

キャプチャされたパケットをディスク上のファイルに保存する

パケットキャプチャをその場で画面に表示することは、短いキャプチャには問題ありません。 ただし、巨大なパケットキャプチャを生成している場合、画面上の出力は実用的ではなくなります。 後で分析または共有するために、キャプチャしたデータをファイルにエクスポートする方法が必要です。

幸い、tcpdumpは、キャプチャされたパケットをディスク上のファイルに保存する機能をサポートしています。 -wオプションの後にファイルパスを指定する必要があります。

以下のコマンドを実行して、システムを通過するすべてのトラフィックを/tmp/capture.pcapというファイルに保存します。 このコマンドは、任意のインターフェイスでリッスンし、自動的に終了する前に最大20パケットをキャプチャします。

sudo tcpdump -i any -w /tmp/capture.pcap -vv -c 20
パケットキャプチャをファイルに送信する
パケットキャプチャをファイルに送信する

これでパケットキャプチャファイルができました。必要に応じて、ファイルを端末に読み戻すことができます。 ファイルからパケットキャプチャを読み取るには、 -r オプションの後にパケットキャプチャファイル名が続きます。

sudo tcpdump -r /tmp/capture.pcap
パケットキャプチャファイルの読み取り
パケットキャプチャファイルの読み取り

結論

このチュートリアルでは、tcpdumpLinuxコマンドを使用してネットワークトラフィックをキャプチャおよび分析する方法を説明しました。 共通のオプションと組み合わせたフィルターを使用して、正確なパケットキャプチャを生成しました。 また、このツールを使用して、後で分析するためにパケットをファイルにキャプチャし、ファイルを端末に読み戻しました。

tcpdump Linuxツールは、すべてのネットワーク管理者のツールボックスに不可欠です。 このチュートリアルで得た知識は、ネットワークの問題のトラブルシューティングを効果的かつ効率的に行うのに役立ちます。

The post ネットワーク管理者向けの便利なtcpdumpLinuxの例 appeared first on Gamingsym Japan.