目的
- オンプレ時代にネットワークにTAPを入れてwireshark等でパケットキャプチャするような仕事があったが、同じようなことをAWSでできると聞いたため、どんなものかを確認してみることにした。
VPC Traffic Mirroring とは(自分の理解)
- 特定のENIを通るトラフィックをミラーリングして、別のENIもしくはNLBに出力できる。
やったこと
- インスタンス1(Amazon Linux2) と インスタンス2(WS2019) を作成する。インスタンス2には、RDP用のENIとミラーリングを受ける用のENIの2つをアタッチする。
- インスタンス1にアタッチしたENIをミラーリングのSource、インスタンス2にアタッチしたENIをミラーリングのTargetに設定する。
- インスタンス1にssh接続する。そのパケットをインスタンス2のwiresharkでキャプチャして、sshの通信を表示する。
構成図
作業手順
インスタンス作成
- インスタンス1(Amazon Linux2),インスタンス2(WS2019) を作成する。VPC Traffic Mirroringを行うには、SourceとなるENIをアタッチするインスタンスがNitro世代である必要あり(2019/11時点)。そのため、今回はインスタンス1は、t3.nanoを使用する。インスタンス2は何でもよい。
- インスタンス2には追加のENIをアタッチする。追加したENIはOS上ではethernet 3として認識された。
- インスタンス2にWireshark(パケットキャプチャ用ツール)をインストールする。
VPC Traffic Mirroringの設定
VPCのメニュー画面にて、以下の順で設定を行う。
- Targetの設定:
- ミラーリングの出力先となるENIもしくはNLBをTargetとして設定する。
- 今回は出力先はインスタンス2の追加ENI(RDPに使わないほう)を指定する。
- Filterの設定:
- Sourceのトラフィックに対し、ミラーリングに出力させる前にFilterをかけることができる。
- 今回はtcp全てを取得するよう設定する。
- Sessionの設定:
- 「SourceのENI」、「Filter」、「Target」の3つを組み合わせて、Traffic MirroringのSessionを作成する。
- 今回はSourceはインスタンス1のENIとし、FilterとTargetは先に作ったものを使用する。
- ミラーリングを行う際、元のパケットがVXLANでカプセル化される。VXLANのVNI(識別用ID)が自動設定される。
ssh トラフィックのミラーリングとパケットキャプチャ
- インスタンス2でWiresharkを起動し、ethernet 3の通信をキャプチャする設定にした上で、手元のPCからインスタンス1へssh接続を行う。
- x.x.x.233(手元のPC)から、10.0.1.249(インスタンス1のENI)へのssh通信が、インスタンス2にてキャプチャできている。また、パケットがVXLANでカプセル化されていることも確認できる。
所感
- 今までNetwork型IDSはAWSには設置不可という考え方だったが、TargetとしてIDSを指定すればそれも可能になりそう。
参考
- (公式ブログ)最新 – VPC トラフィックミラーリング – ネットワークトラフィックを捉えて検査する
-
[新機能] EC2 インスタンス(Nitro)の通信内容をVPC側からミラーする VPC Traffic Mirroring が発表されました!
- GUIの画面付きで説明してあり分かりやすい。
-
AWS re:Inforce2019 re:Cap LT
- Traffic Mirroringの仕組みが図解されており分かりやすい。