こんにちは、アイディーエスの大島です。

VPCのトラフィックミラーリングを調査する機会があったので、その内容を共有したいと思います。

はじめに

この記事では、EC2に流れてくるパケットのモニタリングを行います。
内容は以下のサイトに沿って進めていきます。

最新 – VPC トラフィックミラーリング – ネットワークトラフィックを捉えて検査する
https://aws.amazon.com/jp/blogs/news/new-vpc-traffic-mirroring/

構築のイメージ図はこちらです。
EC2①に関するパケットキャプチャをEC2②で取得し、Wiresharkでファイルを参照するような流れです。

前提

  • VPC,ALB,EC2①②がすでに配置されていること

ミラーリングの設定を行う

EC2のENIコピー

まず始めに、2つのEC2のENIをコピーしておきます。
ミラーリングの設定に必要になります。

ミラーリングのターゲットを作成する

ではまずVPCミラーリングのターゲットとなるEC2②を登録する作業を行います。

[VPC] > [トラフィックミラーリング] > [ミラーターゲット] >[トラフィックミラーターゲットの作成] を押下します。
ターゲットに先ほどコピーしたEC2②のENIを入力します。

トラフィックミラーターゲットが完成しました。

ミラーリングのフィルターを作成する

次にミラーフィルターを作成します。
承認/拒否を行うプロトコルとCIDRを決めることが出来ます。

では、[VPC] > [トラフィックミラーリング] > [ミラーフィルター] >[トラフィックミラーフィルタの作成] を押下します。

ここでは自分が取得したいプロトコルやCIDRを記載するようにしてください。

パケットキャプチャ分析ツール(WireSharkなど)でフィルターを行うことも可能なので、今回はすべてを許可するように記載します。

フィルターが完成しました。

ミラーセッションを作成する

次にミラーセッションを作成します。

[VPC] > [トラフィックミラーリング] > [ミラーセッション] > [トラフィックミラーセッションの作成] を押下します。

ミラーソースとミラーターゲット、ミラーフィルターを入力します。

  • ミラーソース:送信元となるEC2①のENIを入力
  • ミラーターゲット:EC2②を登録したミラーターゲットを選択
  • ミラーフィルター:作成したミラーフィルターを選択

作成を押下したところで、エラーが出てしまいました。

eni-0xxxxxxxx must be attached to a supported instance

ENIはサポートされたインスタンスにアタッチされている必要があるそうです。

t2.microを使っていたのでt3.smallに変えてみます。
他にもp4d.*やu-.metal、n.metalはサポートされていないようです。
ちなみに、ミラーターゲットとなるEC2②の方もt2.microだったのですがセッション作成時に怒られました…
先ほどのターゲット作成時には怒られないようです。

インスタンスタイプ変更後、セッションの作成に成功しました。

以上で設定は完了となります。

パケットキャプチャを行う

では実際にパケットキャプチャを行っていきます。
1. 送信先のEC2②に接続します。

2. ミラーターゲットとなるEC2②でtcpdumpを行います。

$ sudo tcpdump -i ens5 -n port 4789

3. EC2①で通信を発生させます。

$ curl https://www.yahoo.co.jp/

ここで、パケットが取得されていることが確認できます。

 $ sudo tcpdump -i ens5 -n port 4789
 …
 …
 IP 52.x.x.xx.xxx.https > 10.x.x.xx.xxx: Flags [P.], seq 11421:11744, ack 41323, win 3432, length 323
 11:32:55.565731 IP 10.0.12.59.65525 > 10.0.16.67.vxlan: VXLAN, flags I, vni 12388352
 IP 10.x.x.xx.xxx > 52.x.x.xx.xxx.https: Flags [.], ack 11744, win 442, length 0
 11:32:55.565732 IP 10.0.12.59.65525 > 10.0.16.67.vxlan: VXLAN, flags I, vni 12388352
 IP 52.x.x.xx.xxx.https > 10.x.x.xx.xxx: Flags [P.], seq 11744:12067, ack 41323, win 3432, length 323
 11:32:55.579466 IP 10.0.12.59.65525 > 10.0.16.67.vxlan: VXLAN, flags I, vni 12388352
 IP 52.x.x.xx.xxx.https > 10.x.x.xx.xxx: Flags [P.], seq 12067:12390, ack 41323, win 3432, length 323
 11:32:55.579765 IP 10.0.12.59.65525 > 10.0.16.67.vxlan: VXLAN, flags I, vni 12388352
 IP 10.x.x.xx.xxx > 52.x.x.xx.xxx.https: Flags [.], ack 12390, win 442, length 0
 ^C
 184 packets captured
 184 packets received by filter
 0 packets dropped by kernel

2のtcpdumpを行う際に、-wオプションを付けることで出力先ファイルを指定することも可能です。
今回はWiresharkでファイルの参照をしたいので、ファイルを出力して、ローカルにダウンロードを行っていきます。

2′. 出力先のパスとファイル名を指定してEC2②でtcpdumpを行います。

$ sudo tcpdump -i ens5 -n port 4789 -w /tmp/trafficmirror_20241125.out

3. EC2①で通信を発生させます。

$ curl https://www.yahoo.co.jp/

4. EC2②でパケットの取得を終了し、S3にファイルをコピーします。

$ aws s3 cp /tmp/trafficmirror_20241125.out s3://xxoshima-general/20241126
upload: ../../tmp/trafficmirror_20241125.out to s3://xxoshima-general/20241126

5. S3からファイルをダウンロードします。

6.Wireshark等でファイルを開き、参照します
 ダウンロードができたら、Wiresharkでファイルを開きます。
 [ファイル] > [開く]で開くか、ドラッグアンドドロップでも開くことが出来ます。

以上でパケットキャプチャの取得・参照が完了となります。

最後に

今回はVPCトラフィックミラーリングでENIに流れるネットワークトラフィックを取得しました。
たくさんの情報が取れるので、実際に設定するときはミラーフィルターで情報を厳選したいと思います。

是非皆さんも参考に設定してみてください。
最後までお読みいただきありがとうございました。