SlideShare une entreprise Scribd logo
1  sur  19
EC2上でパケットをミラーリング
安川 健太
Solutions Architect
Amazon Data Services Japan
自己紹介
名前
• 安川 健太
• アマゾンデータサービスジャパン
ソリューションアーキテクト
好きなAWSのサービス
• CloudFormation
ソーシャル
• @thekentiest
• www.facebook.com/kenta.yasukawa
趣味
• 車いじり
• パケットキャプチャ
本日の発表
EC2の上でレイヤーの低いところでいろいろ試してみた
体験談を皆さんと共有
• せいぜいL3とかL2とかくらいです
• L1までは行きません
(行けません)
ある日こんな質問を頂きました
パケットキャプチャ型のアクセス解析
• HTTPのリクエストとレスポンスをスヌーピングしてWebアクセ
ス解析
• 一般的にはポートミラーリングしてパケットをキャプチャ
パケットキャプチャ型のアク
セス解析ソフトを使っている
システムがあってAWS移行考
えてるんだけどどうにかなら
ない?
古いシステムの移行だから出来
れば手を入れたくないんだよね
とはいえ、EC2ではポートミラーリングも何も。
というわけで、考えてみる
こうすれば通過するパケット全部取れるけど
Availability Zone Availability Zone
Web Web
パケットコレクタ兼リバースプロキシ
とてもこんなシステム本番に投入できません!
ならばWebサーバに仕込むか
Webサーバからパケットの複製をコレクタに送る
Availability Zone Availability Zone
Web Web
DNS RR等
コレクタ
• これならコレクタ障害時もサービスは継続可
• コレクタはENIの付け替え等でフェイルオーバー可
• コレクタのパケット取りこぼしリスクはポートミラーリングでも同様
どうするのがシンプルか考えてみる
iptablesのteeターゲットを使えばパケットを集めるのは簡単
• リクエストパケットはちゃんと取れそう
• But, レスポンスパケットは無意味なデータに
ならパケットコピーしてL2で送りつけるか
• Classic EC2じゃ無理
• VPCだとしてもサブネット越えられない罠
GET Web コレクタ
fe:ff:ff:ff:ff:ff …
GET
200OK200OK
クライアントIPアド
レスが残らない
L3トンネル掘るしかないですかね
とはいえ
• オーバーヘッドは最小限にしたい
• 特別なソフトウェアは入れたくない
• カーネルで処理を完結させたいのが人情
IP-in-IPにしましょうか
IP-in-IPでコレクタにパケットを集める
図にしてみると
コレクタ
Web 1
Web 2
GET
192.168.1.10
192.168.1.100 192.168.1.101
200OK
ENIのSource/Destinationチェックは外すこと!
200OK
GET
192.168.1.10 192.168.1.20
GET
GET
192.168.1.10 192.168.1.20
Dst Src
IP-in-IPトンネルを作って
tcでパケットのコピーを流し込むよう設定
Webサーバ側
コレクター側
# ip tunnel add ipip0 mode ipip remote 192.168.1.20 local 192.168.1.10 ttl 64
# ip tunnel add ipip0 mode ipip remote 192.168.1.10 local 192.168.1.20 ttl 64
# tc qdisc add dev eth0 root handle 10: prio
# tc filter add dev eth0 parent 10: prio 10 protocol ip u32 match ip protocol 6
0xff match ip sport 80 0xffff flowid 10:1 action mirred egress mirror dev ipip0
# tc qdisc add dev eth0 ingress
# tc filter add dev eth0 parent ffff: prio 10 protocol ip u32 match ip protocol 6
0xff match ip dport 80 0xffff flowid 10:1 action mirred egress mirror dev ipip0
早速検証開始!
コレクタで tcpdump -n -i ipip0
手元のPCで curl http://<web serverのIPアドレス>
カーネルが刺さる。。。
パケットキャプチャしてみると
# tcpdump -n -i ipip0
listening on ipip0, link-type RAW (Raw IP), capture size 65535
bytes
06:20:11.189928 IP 54.248.89.97.43276 > 192.168.1.133.http:
Flags [S], seq 3142846341, win 14600, options [mss
1460,sackOK,TS val 41435115 ecr 0,nop,wscale 4], length 0
06:20:11.189961 unknown ip 0
なんだこれ?
もう少し詳しく見てみると
あれ?IPヘッダがこ
んなところから始
まってる
14 octets
なんだ、Ethernetの
ヘッダじゃないか
ご丁寧に次がIPヘッ
ダって書いてあるし
ループバックや物理I/Fには出ないトンネルI/Fだけに出る挙動 … バグ?
仕方ないのでコードを書く
元のIPパケットを新しいIPパケットのペイロードに
新しいIPヘッダを生成
プロトコル番号を4 (= IP in IP)にセット
期待通り動きました
やってみまーす!
よかったらこちら
で検証などを
ところでVPCならL2も自由になります
VPCならいろいろL2を使ったトリックが使
えそう
L2 NAT (ebtablesとか)
DSR (Direct Server Return)
なんちゃってブロードキャスト/マルチキャスト
• ブロードキャストEthernetフレームをユニキャストで送り直す
まとめ
IP-in-IPを使えばパケットを集めてキャプチャするよう
なユースケースも実現出来る
但し、IP-in-IP + tc on Linuxは要注意
VPCならL2まで自由が利く
人から聞いた「クラウドだと○○は出来ない」は鵜呑みに
せず試してみるのが大事
EC2上でパケットをミラーリング

Contenu connexe

Tendances

EC2でマルチキャスト
EC2でマルチキャストEC2でマルチキャスト
EC2でマルチキャスト
Kenta Yasukawa
 

Tendances (20)

テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
EC2でマルチキャスト
EC2でマルチキャストEC2でマルチキャスト
EC2でマルチキャスト
 
AWSでDockerを扱うためのベストプラクティス
AWSでDockerを扱うためのベストプラクティスAWSでDockerを扱うためのベストプラクティス
AWSでDockerを扱うためのベストプラクティス
 
AWSでGPUも安く大量に使い倒せ
AWSでGPUも安く大量に使い倒せ AWSでGPUも安く大量に使い倒せ
AWSでGPUも安く大量に使い倒せ
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
Google Cloud で実践する SRE
Google Cloud で実践する SRE  Google Cloud で実践する SRE
Google Cloud で実践する SRE
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
 
Aws auto scalingによるwebapサーバbatchサーバの構成例
Aws auto scalingによるwebapサーバbatchサーバの構成例Aws auto scalingによるwebapサーバbatchサーバの構成例
Aws auto scalingによるwebapサーバbatchサーバの構成例
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
 
ネットワークでなぜ遅延が生じるのか
ネットワークでなぜ遅延が生じるのかネットワークでなぜ遅延が生じるのか
ネットワークでなぜ遅延が生じるのか
 
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
WayOfNoTrouble.pptx
WayOfNoTrouble.pptxWayOfNoTrouble.pptx
WayOfNoTrouble.pptx
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
ロードバランスへの長い道
ロードバランスへの長い道ロードバランスへの長い道
ロードバランスへの長い道
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 

Similaire à EC2上でパケットをミラーリング

Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
Masakazu Muraoka
 
Ec2でwebサイトを運用するメリット
Ec2でwebサイトを運用するメリットEc2でwebサイトを運用するメリット
Ec2でwebサイトを運用するメリット
Katsuhiro Masaki
 
実践!AWSクラウドデザインパターン
実践!AWSクラウドデザインパターン実践!AWSクラウドデザインパターン
実践!AWSクラウドデザインパターン
Hiroyasu Suzuki
 
Mroongaを選んだ理由と
ちょっと嬉しかった話
Mroongaを選んだ理由と
ちょっと嬉しかった話Mroongaを選んだ理由と
ちょっと嬉しかった話
Mroongaを選んだ理由と
ちょっと嬉しかった話
Terui Masashi
 

Similaire à EC2上でパケットをミラーリング (20)

Multicastが出来ないならUnicastすればいいじゃない
Multicastが出来ないならUnicastすればいいじゃないMulticastが出来ないならUnicastすればいいじゃない
Multicastが出来ないならUnicastすればいいじゃない
 
What's Amazon Athena? - re:Growth 2016 Osaka
What's Amazon Athena? - re:Growth 2016 OsakaWhat's Amazon Athena? - re:Growth 2016 Osaka
What's Amazon Athena? - re:Growth 2016 Osaka
 
JAWSUG architecture-crowler
JAWSUG architecture-crowlerJAWSUG architecture-crowler
JAWSUG architecture-crowler
 
Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
 
利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤利用者主体で行う分析のための分析基盤
利用者主体で行う分析のための分析基盤
 
Developers.IO 2019 Effective Datalake
Developers.IO 2019 Effective DatalakeDevelopers.IO 2019 Effective Datalake
Developers.IO 2019 Effective Datalake
 
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
Kinesis Analyticsの適用できない用途と、Kinesis Firehoseの苦労話
 
Ec2でwebサイトを運用するメリット
Ec2でwebサイトを運用するメリットEc2でwebサイトを運用するメリット
Ec2でwebサイトを運用するメリット
 
Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップス
Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップスScraping withawsAWSを利用してスクレイピングの悩みを解決するチップス
Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップス
 
メディアコンテンツ向け記事検索DBとして使うElasticsearch
メディアコンテンツ向け記事検索DBとして使うElasticsearchメディアコンテンツ向け記事検索DBとして使うElasticsearch
メディアコンテンツ向け記事検索DBとして使うElasticsearch
 
Observability, Service Mesh and Microservices
Observability, Service Mesh and MicroservicesObservability, Service Mesh and Microservices
Observability, Service Mesh and Microservices
 
Zynga
ZyngaZynga
Zynga
 
Aws privte20110406 arai
Aws privte20110406 araiAws privte20110406 arai
Aws privte20110406 arai
 
ENGINEER WORK!!
ENGINEER WORK!!ENGINEER WORK!!
ENGINEER WORK!!
 
20141220 clrh etw
20141220 clrh etw20141220 clrh etw
20141220 clrh etw
 
Elastic StackでWebサーバのログ解析を始めた件について
Elastic StackでWebサーバのログ解析を始めた件についてElastic StackでWebサーバのログ解析を始めた件について
Elastic StackでWebサーバのログ解析を始めた件について
 
サーバーレスでアンケートフォームを作ってみた
サーバーレスでアンケートフォームを作ってみたサーバーレスでアンケートフォームを作ってみた
サーバーレスでアンケートフォームを作ってみた
 
実践!AWSクラウドデザインパターン
実践!AWSクラウドデザインパターン実践!AWSクラウドデザインパターン
実践!AWSクラウドデザインパターン
 
Mroongaを選んだ理由と
ちょっと嬉しかった話
Mroongaを選んだ理由と
ちょっと嬉しかった話Mroongaを選んだ理由と
ちょっと嬉しかった話
Mroongaを選んだ理由と
ちょっと嬉しかった話
 
JAWS DAYS 2015
JAWS DAYS 2015JAWS DAYS 2015
JAWS DAYS 2015
 

EC2上でパケットをミラーリング