TCPflow - Linuxでネットワークトラフィックを分析およびデバッグする
TCPflowは、LinuxなどのUnix系システム上でネットワークトラフィックを分析するための、無料でオープンソースの強力なコマンドラインベースのツールです。これは、TCP接続を介して受信または転送されたデータをキャプチャし、後で分析するためにファイルに保存します。このデータは、プロトコル分析やデバッグに便利な形式で保存されます。
関連情報: Linuxでネットワーク使用状況を分析するための16の優れた帯域幅監視ツール
実際には、tcpdumpのようなツールであり、ワイヤーからまたは保存されたファイルからパケットを処理します。対応するツールと同じ強力なフィルタリング式をサポートしています。唯一の違いは、tcpflowがすべてのTCPパケットを順序どおりに処理し、各フローを別々のファイル(フローの各方向に対して1つのファイル)に組み立てて、後で分析できるようにすることです。
その機能セットには、圧縮されたHTTP接続を解凍し、MIMEエンコーディングを元に戻し、ポストプロセッシングのためにサードパーティのプログラムを呼び出すための高度なプラグインシステムが含まれており、その他にも多くの機能があります。
tcpflowの利用ケースは多く、ネットワークパケットの流れを理解するために使用されるほか、ネットワークフォレンジックを実行し、HTTPセッションの内容を明らかにすることもサポートしています。
LinuxシステムにTCPflowをインストールする方法
TCPflow は主流の GNU/Linux ディストリビューションの公式リポジトリにあり、パッケージマネージャを使ってインストールできます。
$ sudo apt install tcpflow #Debian/Ubuntu
sudo yum install tcpflow #CentOS/RHEL
sudo dnf install tcpflow #Fedora 22+
tcpflowをインストールした後は、スーパーユーザー権限で実行できますが、そうでなければsudoコマンドを使用してください。アクティブなネットワークインターフェース(例えば、enp0s3)でリスニングすることに注意してください。
$ sudo tcpflow
tcpflow: listening on enp0s3
デフォルトでは、tcpflowはキャプチャされたすべてのデータを、(特定のオプションを使用する場合は異なる場合があります)の形式の名前を持つファイルに保存します。
sourceip.sourceport-destip.destport
192.168.043.031.52920-216.058.210.034.00443
では、tcpフローがファイルにキャプチャされているかどうかを確認するためにディレクトリリストを取得しましょう。
$ ls -1
total 20
-rw-r--r--. 1 root root 808 Sep 19 12:49 192.168.043.031.52920-216.058.210.034.00443
-rw-r--r--. 1 root root 59 Sep 19 12:49 216.058.210.034.00443-192.168.043.031.52920
前述のように、各TCPフローはそれぞれのファイルに保存されています。上記の出力から、tcpflowの2つの反対方向を示す3つのトランスクリプトファイルがあることがわかります。最初のファイルにはソースIPがあり、2番目のファイルには宛先IPがあり、その逆も同様です。
最初のファイル192.168.043.031.52920-216.058.210.034.00443には、ポート52920を介してホスト192.168.043.031(tcpflowが実行されたローカルホスト)からホスト216.058.210.034(リモートホスト)へのデータ転送が含まれています。ポート443を介して。
そして、第二のファイル216.058.210.034.00443-192.168.043.031.52920には、ホスト216.058.210.034(リモートホスト)からポート443を介してホスト192.168.043.031(tcpflowが実行されたローカルホスト)へポート52920を介して送信されたデータが含まれています。
プログラムに関する情報、例えばどのようにコンパイルされたか、どのコンピュータで実行されたか、そしてすべてのTCP接続の記録を含むXMLレポートも生成されます。
ご存知かもしれませんが、tcpflowはデフォルトで現在のディレクトリにトランスクリプトファイルを保存します。-oオプションを使用すると、トランスクリプトファイルが書き込まれる出力ディレクトリを指定できます。
$ sudo tcpflow -o tcpflow_files
$ sudo ls -l tcpflow_files
total 32
-rw-r--r--. 1 root root 1665 Sep 19 12:56 157.240.016.035.00443-192.168.000.103.45986
-rw-r--r--. 1 root root 45 Sep 19 12:56 169.044.082.101.00443-192.168.000.103.55496
-rw-r--r--. 1 root root 2738 Sep 19 12:56 172.217.166.046.00443-192.168.000.103.39954
-rw-r--r--. 1 root root 68 Sep 19 12:56 192.168.000.102.00022-192.168.000.103.42436
-rw-r--r--. 1 root root 573 Sep 19 12:56 192.168.000.103.39954-172.217.166.046.00443
-rw-r--r--. 1 root root 4067 Sep 19 12:56 192.168.000.103.45986-157.240.016.035.00443
-rw-r--r--. 1 root root 38 Sep 19 12:56 192.168.000.103.55496-169.044.082.101.00443
-rw-r--r--. 1 root root 3159 Sep 19 12:56 report.xml
受信したパケットの内容をファイルにキャプチャデータを保存することなく、stdoutに印刷することもできます。これには、次のように-cフラグを使用します。
これを効果的にテストするために、2つ目の端末を開き、pingを実行するか、インターネットをブラウズしてください。tcpflowによってpingの詳細やブラウジングの詳細がキャプチャされているのを見ることができるはずです。
$ sudo tcpflow -c
特定のポート、例えばポート80(HTTP)のすべてのトラフィックをキャプチャすることが可能です。HTTPトラフィックの場合は、HTTPヘッダーとその後のコンテンツがすべて標準出力に表示されるか、-cスイッチが削除されていれば1つのファイルに表示されます。
$ sudo tcpflow port 80
特定のネットワークインターフェースからパケットをキャプチャするには、-iフラグを使用してインターフェース名を指定します。
$ sudo tcpflow -i eth0 port 80
ターゲットホストを指定することもできます(受け入れられる値はIPアドレス、ホスト名、またはドメインです)。
$ sudo tcpflow -c host 192.68.43.1
OR
sudo tcpflow -c host www.google.com
すべてのスキャナーを使用してすべての処理を有効にするには、-aフラグを使用します。これは、-eオプションのすべてに相当します。
$ sudo tcpflow -a
OR
sudo tcpflow -e all
特定のスキャナーもアクティブにすることができます。利用可能なスキャナーには、md5、http、netviz、tcpdemux、wifivizが含まれています(各スキャナーの詳細情報を表示するには、tcpflow -Hを実行してください)。
$ sudo tcpflow -e http
OR
sudo tcpflow -e md5
OR
sudo tcpflow -e netviz
OR
sudo tcpflow -e tcpdemux
OR
sudo tcpflow -e wifiviz
以下の例は、tcpdemuxを除くすべてのスキャナーを有効にする方法を示しています。
$ sudo tcpflow -a -x tcpdemux
TCPflowは通常、パケットをキャプチャする前にネットワークインターフェースをパケットモードに設定しようとします。これを防ぐには、次のように-pフラグを使用できます。
$ sudo tcpflow -p -i eth0
tcpdumpのpcapファイルからパケットを読み取るには、-rフラグを使用します。
$ sudo tcpflow -f file.pcap
-v または -d 10 オプションを使用して、詳細モードを有効にできます。
$ sudo tcpflow -v
OR
sudo tcpflow -d 10
重要: tcpflowの一つの制限は、現時点ではIPフラグメントを理解しないため、IPフラグメントを含むTCP接続の一部として送信されるデータが正しくキャプチャされないことです。
さらなる情報と使用オプションについては、tcpflowのマニュアルページを参照してください。
$ man tcpflow
TCPflowのGitHubリポジトリ: https://github.com/simsong/tcpflow
これで今回は終わりです!TCPflowは、ネットワークパケットのフローを理解し、ネットワークフォレンジックを行うのに役立つ強力なTCPフローレコーダーです。他にも多くの機能がありますので、ぜひ試してみて、コメントで感想を教えてください。