ネットワーク管理者として、ネットワークの問題のトラブルシューティングは日常業務の一部です。 ネットワーク関連の問題に取り組む際に不可欠なツールの1つは、 tcpdump Linuxコマンド。
このチュートリアルでは、tcpdumpが一般的なネットワークの問題の診断にどのように役立つかについての実際の例をいくつか紹介します。 このチュートリアルを終了すると、tcpdumpを利用して独自のネットワーク問題をトラブルシューティングする方法をよりよく理解できるようになります。
前提条件
このチュートリアルは、実践的なデモンストレーションになります。 フォローしたい場合は、Linuxマシンを使用していることを確認してください。 このチュートリアルではUbuntu20.04を使用していますが、現在のLinuxディストリビューションであればどれでも機能します。
tcpdumpLinuxツールのインストール
最近のほとんどのLinuxディストリビューション、特にサーバーには、すでにtcpdumpがあります。 しかし、そうでなくても、インストールは汗をかかないで迅速なので心配しないでください。
1.お好みのSSHクライアントを使用してLinuxコンピューターにログインします。
2.まず、以下のコマンドを実行して、tcpdumpがすでにインストールされているかどうかを確認します。
sudo apt list --installed tcpdump
マシンにtcpdumpが存在する場合は、以下のスクリーンショットと同様の出力が表示されます。
tcpdumpが存在しない場合は、代わりに次の結果が得られます。

3. tcpdumpがインストールされていないことを確認したら、以下のコマンドを実行してインストールします。
# Update the package index
sudo apt update -y
# Install tcpdump
sudo apt install tcpdump -y

4.最後に、以下のコマンドを実行して、インストールされているtcpdumpのバージョンを確認します。
この記事の執筆時点で、Ubuntuリポジトリからの最新のtcpdumpバージョンは4.9.3です。

デフォルトインターフェイスでのパケットトラフィックのキャプチャ
tcpdumpの主な用途は、パケットのキャプチャです。 おかげ pcapライブラリ、ツールは、イーサネット、Wi-Fi、PPPなどのさまざまなネットワークタイプからパケットをキャプチャできます。
tcpdumpコマンドの基本形式の構文は次のとおりです。
tcpdump [options] [expression]
どこ:
options
:さまざまなtcpdumpオプションを設定します。 オプションは、tcpdumpがパケットをキャプチャして表示する方法を制御します。expression
:キャプチャするトラフィックのタイプをフィルタリングまたは指定します。 式については、このチュートリアルの後半で詳しく説明します。
tcpdumpの最も基本的な使用例は、デフォルトのネットワークインターフェイス上のすべてのトラフィックをキャプチャし、データを標準出力に表示することです。
を実行します tcpdump
オプションや式を指定せずにコマンドを実行して、デフォルトのインターフェイスですべてのトラフィックをキャプチャします。
ネットワークインターフェイスへのアクセスは特権操作であるため、tcpdumpをrootとして、またはsudoプレフィックスを使用して実行する必要があります。
ザ tcpdump
以下に示すように、ツールはパケットをキャプチャし、出力を端末に出力します。 十分なパケットをキャプチャしたと思われる場合は、を押します CTRL+C
キャプチャを停止します。

パケットキャプチャ数の制限
ザ 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
。

特定またはすべてのインターフェイスでのパケットのキャプチャ
前の例では、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のトラフィックのみをキャプチャしました。

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

注:tcpdumpツールは、ポート番号の代わりにサービスプロトコル名を認識するのに十分な機能を備えています。 たとえば、SSHトラフィックをフィルタリングするためにポート22を指定する代わりに、代わりにポートsshを指定できます。 HTTPトラフィックのポート80、ポートhttpについても同じことが言えます。
プロトコルによるフィルタリング
名前を聞かせないでください tcpdump
TCPトラフィックでのみ機能すると思わせてください。 このツールは、ICMPやUDPなどの非TCPトラフィックをキャプチャすることもできます。
たとえば、次のコマンドは任意のインターフェイスからパケットをキャプチャしますが、UDPトラフィックのみをフィルタリングします。
sudo tcpdump -i any -c 5 udp
その結果、以下の結果はUDPトラフィックのみを示しています。これは、NTPおよびDNS操作に関するパケットのようです。

DNS関連のトラフィックのみをキャプチャする必要がある場合はどうなりますか? その場合、フィルターを組み合わせることができます udp
と port 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

あなたはすでに気づいているかもしれません 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.