AWS VPCトラフィックミラーリングを使用してEC2インスタンスのトラフィックを調査する方法
はじめに
こんにちは。SHIFTのインフラエンジニアの末盛です。
AWSのVPCトラフィックミラーリングを使って、EC2インスタンスのネットワークトラフィックを調査する機会がありましたので、手順を共有したいと思います。
開発環境などでは問題が起きているインスタンスでパケットキャプチャを実施すれば良いと思いますが、本番環境のように負荷をかけたり直接変更を加えたくない環境で調査をする場面では、VPCトラフィックミラーリングを使用して他インスタンスに通信を複製した上で調査をすると安心です。
AWS VPCトラフィックミラーリング
AWS VPCトラフィックミラーリングは、Elastic Network Interface(ENI)でやり取りしているネットワークトラフィックを別のENIにミラーすることができる機能です。
ミラーリングといっても全てのトラフィックをミラーしてしまうわけではなく、使用ポートやプロトコル、送受信元のIPアドレスなどでフィルタしてミラーすることができます。(もちろん全ての通信をミラーすることもできます。)
使用用途としては、通信の監視や脅威検出、トラブルシューティングなどがあげられます。
https://docs.aws.amazon.com/vpc/latest/mirroring/what-is-traffic-mirroring.html
構成図
今回VPCトラフィックミラーリングを設定した際の最終的な構成は下図のようになりました。
構成のポイントは以下3点です。
調査対象とは別に調査用のEC2インスタンスを起動し、トラフィックをミラーリングする。
調査用インスタンスではダンプファイルの取得のみを行い、詳細の分析は作業端末で行う。
ミラー先インスタンスはUDP/4789を受信できるようにする必要がある。
調査用インスタンスでは情報の収集のみを行い分析は作業端末で行うことで、調査用インスタンスのインスタンスタイプに、より低コストのものを選択できるようにしました。
ファイルの送受信がセキュリティ上の理由などで難しい場合は、調査用インスタンスをWindowsインスタンスにすると、少しコストはかかりますが調査しやすいと思います。
手順
ここから上述の構成図に従って、各種設定を行う手順を紹介します。
流れは以下の通りです。
調査用EC2インスタンス作成
VPCトラフィックミラーリング設定
パケットキャプチャ
キャプチャしたファイルを分析
それぞれ詳細な手順を説明していきます。
調査用EC2インスタンス作成
トラフィックミラー先の調査用EC2インスタンスを作成します。今回は以下の条件を満たすようインスタンスを作成しました。
tcpdumpが使用可能なこと:ミラーしたトラフィックに対しパケットキャプチャを行う際にtcpdumpを使用します。
調査対象インスタンスからUDP/4789の通信を受信可能なこと
キャプチャファイルを作業端末に転送可能なこと:環境によってはファイルを外部に転送できないネットワークセグメントなどがあると思いますが、そのような場所に作成することは避ける必要があります。
参考までに、インスタンス作成時に指定した設定値の一部を下表にまとめました。
VPCトラフィックミラーリング設定
続いて調査対象インスタンスから調査用インスタンスにトラフィックをミラーリングする設定を行います。
ここでは以下3点のリソースを作成します。
トラフィックミラーターゲット:ミラートラフィックの送信先
トラフィックミラーフィルタ:どの通信をミラーするかの設定
トラフィックミラーセッション:ミラーの実行設定
まずはトラフィックミラーターゲットを作成します。VPCマネジメントコンソールの左ペインで「ミラーターゲット」をクリックします。
「トラフィックミラーターゲットの作成」をクリックします。
ターゲットに調査用インスタンスのENIを指定し「作成」をクリックします。
次にトラフィックミラーフィルタを作成します。VPCマネジメントコンソールの左ペインで「ミラーフィルター」をクリックします。
「トラフィックミラーフィルタの作成」をクリックします。
今回はHTTPサーバが送受信している通信を分析したいという想定で、以下のような設定を行います。
この設定により、調査対象インスタンスのTCP/80(HTTP)で送受信されるトラフィックをミラーすることができます。
最後にトラフィックミラーセッションを作成します。こちらのリソースを作成するとトラフィックミラーが始まり、実際に調査対象インスタンスの通信が調査用インスタンスにミラーされます。
VPCマネジメントコンソールの左ペインで「ミラーセッション」をクリックします。
「トラフィックミラーセッションの作成」をクリックします。
以下の設定値で作成します。
パケットキャプチャ
これまでの手順で調査用インスタンスの4789ポートでミラートラフィックを受信している状態になりました。
調査用インスタンスにSSH接続し、以下のコマンドを実行することで、ミラートラフィックのパケットキャプチャを開始します。
$ sudo tcpdump -i eth0 -n port 4789 -w dump.pcap
各オプションの説明は次の通りです。
キャプチャを開始したら調査したい通信を発生させ、キャプチャファイル(dump.pcap)を作業端末に転送します。
キャプチャしたファイルを分析
キャプチャしたファイルの分析にはWiresharkが便利です。
Wiresharkはパケットキャプチャツール(今回のtcpdumpのようなことができるツール)ですが、キャプチャファイルのビューワとしても利用可能です。
インストーラやインストール手順については以下リンクをご覧ください。今回は閲覧ができれば良いのでポータブル版(ダウンロードページのPortableApps)でも問題ありません。
インストールが完了したらWiresharkを起動し、左上の「ファイル」>「開く」からキャプチャファイルを開きます。
キャプチャしたデータが表形式で表示されますので、時間帯やプロトコル、HTTPステータスコードでフィルタするなど様々な分析が可能です。
Wiresharkの操作の詳細については本記事では割愛します。
HTTPプロトコルに絞って表示した例
検証時に発生した課題
調査用EC2インスタンスが起動していない状態でトラフィックミラーセッションを作成した場合、以下画像のエラーが発生しました。
この場合、EC2インスタンスを起動し、再度トラフィックミラーセッションを作成すれば解決します。
まとめ
調査用インスタンスの作成など準備は必要ですが、比較的簡単な手順でトラフィックミラーリングをすることができました。
調査対象インスタンスに対する設定変更は基本的には発生しないため、稼働中のシステムに対する影響を最小限にとどめつつ、パケットキャプチャをすることができます。
パケットキャプチャの取得は、トラブルシューティングの際にしばしば実施すると思いますので、その時にはぜひ本手順を参考にしていただければと思います。
それでは皆様も良いAWSライフを!!
参考リンク
https://docs.aws.amazon.com/vpc/latest/mirroring/what-is-traffic-mirroring.html
https://aws.amazon.com/jp/blogs/news/new-vpc-traffic-mirroring/
https://blog.denet.co.jp/vpc-traffic-mirroring/
お問合せはお気軽に
https://service.shiftinc.jp/contact/
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/
PHOTO:UnsplashのSergey Zolkin