Traffic MirroringによるAWSネットワーク監視設計|マルチAZ構成でのパケットキャプチャ配置

運営:リナックスマスター.JP(代表 宮崎智広)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > AWS(Amazon Linux) > Traffic MirroringによるAWSネットワーク監視設計|マルチAZ構成でのパケットキャプチャ配置
「AWSで不審な通信が疑われるのに、どのEC2インスタンスで何が流れているか確認できない」

オンプレミス環境なら、スイッチのスパンポートでパケットをキャプチャできます。
しかしAWSのVPCでは、仮想スイッチに直接アクセスできません。

この記事では、AWS Traffic Mirroringを使ったネットワーク監視設計を解説します。
マルチAZ構成でのパケットキャプチャ収集先の配置、NLBを使った冗長化設計、AWS CLIによる設定手順まで紹介します。
この記事では、Amazon Linux 2023を搭載したEC2インスタンスを解析ツールの実行環境として説明します。

この記事のポイント

・AWS Traffic MirroringはVPCのパケットをコピーして解析できる仕組み
・マルチAZではAZごとに解析インスタンスを置くのが基本設計
・NLBをターゲットにするとHA構成と負荷分散が実現できる
・設定はAWS CLIで再現性よく管理できる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

AWS Traffic Mirroringとは何か

AWSのVPCでは、ネットワークインターフェース(ENI)を流れるパケットをコピーして、
別のENIやNetwork Load Balancerへ転送できます。
この機能がTraffic Mirroringです。

オンプレミスのスイッチで言えば、スパンポートに相当します。
コピーされたパケットは、解析用EC2インスタンス上のtcpdumpやWiresharkで受信・分析できます。

転送にはVXLANカプセリング(UDPポート4789)が使われます。
ミラーされたトラフィックは、オリジナルの通信には影響を与えません。

1. Traffic Mirroringの3つの構成要素

Traffic Mirroringの設定は3つのリソースで構成されます。

・ミラーターゲット:コピーしたパケットの送り先。解析用のENIまたはNLBを指定します
・ミラーフィルター:どのトラフィックをコピーするかのルール定義。
 送信元・宛先のCIDRやプロトコルで絞り込めます
・ミラーセッション:「どのENIから」「どのフィルターで」「どのターゲットへ」の3つをひも付けます

対応しているのは、Nitroシステムを搭載したインスタンスタイプのみです。
C5、M5、T3など多くの現行世代が対象ですが、T2インスタンスはNitroシステム非搭載のため使えません。

2. 料金と主な制限事項

Traffic Mirroringはミラーセッション1件につき時間単位の料金が発生します。
(最新の料金はAWSの公式料金ページでご確認ください)

主な制限事項:
・1つのENIに設定できるミラーセッションは最大3件
・ピアリング接続やVPNを越えたクロスVPCミラーリングは不可
・ミラーソースとターゲットは同じVPC内に配置する必要があります

マルチAZ構成でのTraffic Mirroring設計

Traffic Mirroringでは、ミラーターゲットを監視対象と同じAZに配置するのが基本設計です。

AZをまたいでパケットを転送すると、クロスAZのデータ転送費用が発生します。
本番環境では、AZごとに解析用インスタンスを配置してコストを最小化するのが一般的です。

1. AZごとに解析インスタンスを配置する構成

最もシンプルな構成は、監視対象EC2と同じAZに解析用EC2を1台ずつ置く方法です。

・ap-northeast-1a:監視対象EC2 → 解析用EC2-AZ1a(ミラーターゲット)
・ap-northeast-1c:監視対象EC2 → 解析用EC2-AZ1c(ミラーターゲット)

解析用EC2が停止すると、そのAZの監視が停止します。
冗長性が必要な場合は、次のNLBを使った構成が有効です。

2. NLBをターゲットにしたHA構成

Network Load Balancer(NLB)をミラーターゲットにすると、
複数の解析インスタンスへ負荷分散できます。

NLBのターゲットグループをUDP 4789で設定し、マルチAZを有効化します。
解析インスタンスを複数AZに分散配置すると、
1台が停止しても他のインスタンスへ引き継がれます。

NLBを使う際のポイント:
・NLBはInternal(内部向き)で作成する
・ターゲットグループのプロトコルはUDP、ポートは4789に設定する
・ヘルスチェックプロトコルはTCPを使用する(UDPはヘルスチェック非対応のため)

コストと冗長性のバランスで、どちらの構成を選ぶか検討してください。

Traffic Mirroringの設定手順(AWS CLI)

ここからは、AWS CLIを使ってTraffic Mirroringを設定する手順を説明します。

LinuxサーバーからAWSリソースをCLIで操作する土台として、Amazon Linux の基本セットアップもあわせて確認してみてください。

1. ミラーターゲットの作成(解析用EC2のENI)

解析用EC2インスタンスのENI IDを指定してターゲットを作成します。

# 解析用EC2のENI IDを確認する aws ec2 describe-instances \ --instance-ids i-0xxxxxxxxxxxxxxx \ --query "Reservations[*].Instances[*].NetworkInterfaces[*].NetworkInterfaceId" \ --output text # ミラーターゲットを作成する aws ec2 create-traffic-mirror-target \ --network-interface-id eni-0xxxxxxxxxxxxxxx \ --description "analysis-instance-az1a"

出力例(環境により異なります):

{ "TrafficMirrorTarget": { "TrafficMirrorTargetId": "tmt-0xxxxxxxxxxxxxxx", "NetworkInterfaceId": "eni-0xxxxxxxxxxxxxxx", "Type": "network-interface", "Description": "analysis-instance-az1a" } }

TrafficMirrorTargetIdを控えておきます。

2. ミラーフィルターとルールの作成

すべてのインバウンド・アウトバウンドトラフィックを対象にするフィルターを作成します。

# フィルターを作成する aws ec2 create-traffic-mirror-filter \ --description "all-traffic-filter" # インバウンドルールを追加する(すべてのトラフィック) aws ec2 create-traffic-mirror-filter-rule \ --traffic-mirror-filter-id tmf-0xxxxxxxxxxxxxxx \ --traffic-direction ingress \ --rule-number 100 \ --rule-action accept \ --destination-cidr-block "0.0.0.0/0" \ --source-cidr-block "0.0.0.0/0" \ --description "all-ingress" # アウトバウンドルールを追加する aws ec2 create-traffic-mirror-filter-rule \ --traffic-mirror-filter-id tmf-0xxxxxxxxxxxxxxx \ --traffic-direction egress \ --rule-number 100 \ --rule-action accept \ --destination-cidr-block "0.0.0.0/0" \ --source-cidr-block "0.0.0.0/0" \ --description "all-egress"

特定のプロトコルや宛先IPに絞り込みたい場合は、
--protocolや--destination-cidr-blockを指定してルールを追加します。

3. ミラーセッションの作成

ミラーソース(監視対象EC2のENI)、ターゲット、フィルターをひも付けます。

# ミラーセッションを作成する aws ec2 create-traffic-mirror-session \ --network-interface-id eni-0yyyyyyyyyyyyyyy \ --traffic-mirror-target-id tmt-0xxxxxxxxxxxxxxx \ --traffic-mirror-filter-id tmf-0xxxxxxxxxxxxxxx \ --session-number 1 \ --description "web-server-az1a-session"

session-numberは1~32766の範囲で指定します。
同一ENIに複数のセッションを設定する場合、番号が小さいセッションが優先されます。

4. 設定の確認

作成したミラーセッションを確認します。

# ミラーセッションの一覧を確認する aws ec2 describe-traffic-mirror-sessions # 特定のセッションを確認する aws ec2 describe-traffic-mirror-sessions \ --traffic-mirror-session-ids tms-0xxxxxxxxxxxxxxx

解析インスタンスでのパケット確認

解析用EC2インスタンスにSSHログインして、
VXLANで届くパケットをtcpdumpで確認します。

# VXLAN(UDP 4789)のパケットをキャプチャする sudo tcpdump -i eth0 udp port 4789 -n # ファイルに保存してWiresharkで解析する sudo tcpdump -i eth0 udp port 4789 -w /tmp/capture.pcap # VXLANカプセルを剥がして内側のパケットを確認する sudo ip link add vxlan0 type vxlan id 12288 dstport 4789 local 10.0.1.100 sudo ip link set vxlan0 up sudo tcpdump -i vxlan0 -n

tcpdumpでVXLANのカプセルを剥がすには、Linuxカーネルのvxlanモジュールを使います。
カプセルを剥がすことで、ミラーされた元のパケットをプロトコルレベルで解析できます。

解析用インスタンスのセキュリティグループに、UDP 4789のインバウンドルールを追加することを忘れないでください。

よくあるエラーと対処法

1. パケットが届かない

原因の多くはセキュリティグループの設定漏れです。
解析用EC2のセキュリティグループに、UDP 4789のインバウンドルールを追加してください。

確認すべきポイント:
・解析用EC2のSGにUDP 4789のインバウンド許可があるか
・ミラーソースとターゲットが同じVPC内にあるか
・監視対象インスタンスのタイプがNitroシステム対応か(T2などは不可)

解析インスタンスでVXLANポートの受信状態を確認するには、
Linux ポート確認の全コマンドが参考になります。

2. ミラーセッション数の上限エラー

1つのENIにセッションを4件以上作成しようとすると、上限エラーになります。
使っていないセッションを削除するか、フィルタリングで監視対象を絞り込んでください。

3. T2インスタンスで設定が通らない

T2インスタンスはNitroシステム非搭載のため、Traffic Mirroringをサポートしていません。
インスタンスタイプをT3以降に変更してください。

本記事のまとめ

Traffic Mirroringを使ったAWSネットワーク監視設計をまとめます。
やりたいこと 設定・確認方法
パケットキャプチャの送り先を設定する aws ec2 create-traffic-mirror-target
キャプチャ対象のトラフィックを絞り込む aws ec2 create-traffic-mirror-filter-rule
ミラーリングを開始する aws ec2 create-traffic-mirror-session
届いたパケットをキャプチャする sudo tcpdump -i eth0 udp port 4789
ミラーセッションの設定を確認する aws ec2 describe-traffic-mirror-sessions
AWSのネットワーク監視は、オンプレミスと違ってスイッチへの直接アクセスができません。
Traffic Mirroringを活用することで、ENIレベルのパケットキャプチャが実現できます。

マルチAZ構成では、AZごとに解析インスタンスを配置するか、
NLBを使ったHA構成を選びます。
コストと冗長性のバランスを考慮して設計してください。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、Amazon LinuxでAWSサーバーを構築・運用する方法をまとめた記事もあわせてご覧ください。

Linuxを実践的なハンズオンで学びたい方には、>>【初心者向けLinuxセミナー(2日間ハンズオン)】もご覧ください。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

運営

リナックスマスター.JP(代表 宮崎智広)

株式会社イーネットマーキュリーが運営するLinux教育サイトです。代表の宮崎智広は現役のLinuxサーバー管理者として20年以上の実務経験を持ち、累計3,100名以上のエンジニアを指導してきました。実践型のLinuxセミナーや無料マニュアルの配布を通じてLinux人材の育成に取り組んでいます。