SlideShare a Scribd company logo
SF-TAP: 柔軟で規模追従可能なトラフィック解析基盤の設計
SF-TAP : Design of Scalable and Flexible Traffic Analysis Platform
IEICE ICM研究会 2015年1月15日
高野 祐輝,三浦 良介,安田 真悟,
明石 邦夫,井上 朋哉!
!
情報通信研究機構!
北陸先端科学技術大学院大学
1
おしながき
❖ 背景と目的,本研究の位置づけ!
❖ SF-TAPの設計!
❖ SF-TAPの実装!
❖ パフォーマンス計測
2
背景と目的(1)
❖ もっとプログラマブルなL7解析器がほしい!
❖ Python,Ruby,Cで解析ロジックを書きたい!
❖ DSL覚えたくない!
❖ Cで文字列処理したくない!
❖ 自前でTCPストリームの再構成処理とか書いてられな
い
3
背景と目的(2)
❖ もっとスケーラビリティの高い解析器がほしい!
❖ 高bps,高pps!
❖ 水平スケール,コアスケール!
❖ コモディティベースで実現したい!
❖ 高価で取り回しの難しいアプライアンスを使いたくない!
❖ ベンダーロックインからの開放!
❖ NFVのVNFとしてサービスチェインを行い,ネットワークトラフィッ
ク解析をソフトウェアで自由に行いたい
4
関連研究と本研究の位置づけ
トラフィックキャプチャ技術
BPF netmap
DPDK
GASPP[USENIX ATC 2014]
SCAP[IMC 2012]
フローレベル解析技術 L7プロトコル判別
nDPI
libprotoident
l7-filter
本研究:SF-TAP
+モジュラリティ&スケーラビリティ
libnids
pcap
5
SF-TAPの提案
柔軟で,スケーラビリティのある!
L7レベルトラフィック解析基盤
6
SF-TAPのハイレベルアーキテクチャ
7
CPU CPU CPU CPU
Flow Abstractor
CPU CPU CPU CPU
Flow Abstractor
CPU CPU CPU CPU
Flow Abstractor
CPU CPU CPU CPU
Flow Abstractor
Cell Incubator
The Internet
SF-TAP Cell SF-TAP Cell SF-TAP Cell SF-TAP Cell
Intra Network
Core ScalingCore Scaling Core Scaling Core Scaling
Horizontal Scaling
Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer
10GbE 10GbE
SF-TAPの設計原理(1)
❖ フロー抽象化!
❖ トラフィックをL7プロトコルで抽象化!
❖ Unixの/devやBPFのような抽象化IF!
❖ 開発者の得意な言語で解析ロジックの記述が可能!
❖ ネットワークフォレンジック,IDS,IPS,機械学習など,用途に応じた言
語の選択が可能!
❖ モジュラアーキテクチャ!
❖ 解析ロジックとキャプチャ部分の分離!
❖ 解析ロジックの容易な付替えが可能に
8
SF-TAPの設計原理(2)
❖ 水平スケール!
❖ 解析ロジック(機械学習など)の処理には,多量の計算リソース
が必要!
❖ 台数効果で計算リソース不足を解消!
❖ コアスケール!
❖ 計算リソースを有効に活用!
❖ キャプチャ部分及び,解析ロジック部分のコアスケールを可能に
9
SF-TAPの設計(1)
❖ SF-TAP Cell!
❖ Flow Abstractor!
❖ IPパケット再構成!
❖ フロー識別!
❖ TCPストリーム再構成!
❖ L7プロトコル判別!
❖ Application Protocol Analyzer!
❖ ユーザが記述!
❖ HTTPパーサなど
そこで,我々は,フロー制御部分と,トラフィック
解析ロジック部分を分離し,解析ロジックをモジュラ
化した,モジュラ型のアーキテクチャを提案する.フ
ロー制御部分とトラフィック解析部分を,ソフトウェ
ア的に分離し,解析ロジック部分のモジュラ化を行う
ことで,トラフィック解析ロジックの動的な変更や,
追加が容易に行えるようになる.さらに,研究/開発
段階のソフトウェアにはバグが混入することが多い
が,解析ロジックをモジュラ化することで,そのバグ
の影響範囲を,単一の解析モジュールに留めることが
できる.
2.3 水平スケール
一般的に,L7 プロトコルの解析には,大きな計算量
が必要となる場合が多い.例えば,HTTP プロトコル
を解析するためには,文字列のパースを行わなけれ
ばならなず,リアルタイムで URL フィルタリングを
行いたい場合は,正規表現などを用いた文字列マッチ
ングを行う必要が有るが,このような文字列処理は非
常に負荷の高い処理である.また,トラフィックの特
徴抽出などに,機械学習が用いられる場合があるが,
機械学習もまた,大きな計算能力を必要とする処理で
NW I/F
HTTP I/F
TLS I/F
Flow Abstractor
Flow
Classifier TLS Analyzer
HTTP Analyzer
HTTP Proxy
TCP, UDP
Handler
filter and
classifier
rule
L7 Loopback I/F
DB
Forensic
IDS/IPS
etc...
Application
Protocol Analyzer
etc...TCP Default I/F
UDP Default I/F
Analyzer PlaneAbstractor Plane
Capturer
Plane
SF-TAP Cell
Incubator
Flow
Identifier
Flow
Separator
Separator
Plane
separated traffic
SF-TAP Cell
L3/L7 Sniffer
libopenssl
API hooker
etc...
other SF-TAP cells
IP Packet
Defragmenter
L2 Bridge
mirroring
traffic
Packet Forwarder
IP Fragment
Handler
10
SF-TAPの設計(2)
❖ SF-TAP Cell Incubator!
❖ フロー単位のトラフィック
分割!
❖ TAP&インラインモード!
❖ IPフラグメント対応
そこで,我々は,フロー制御部分と,トラフィック
解析ロジック部分を分離し,解析ロジックをモジュラ
化した,モジュラ型のアーキテクチャを提案する.フ
ロー制御部分とトラフィック解析部分を,ソフトウェ
ア的に分離し,解析ロジック部分のモジュラ化を行う
ことで,トラフィック解析ロジックの動的な変更や,
追加が容易に行えるようになる.さらに,研究/開発
段階のソフトウェアにはバグが混入することが多い
が,解析ロジックをモジュラ化することで,そのバグ
の影響範囲を,単一の解析モジュールに留めることが
できる.
2.3 水平スケール
一般的に,L7 プロトコルの解析には,大きな計算量
が必要となる場合が多い.例えば,HTTP プロトコル
を解析するためには,文字列のパースを行わなけれ
ばならなず,リアルタイムで URL フィルタリングを
行いたい場合は,正規表現などを用いた文字列マッチ
ングを行う必要が有るが,このような文字列処理は非
常に負荷の高い処理である.また,トラフィックの特
徴抽出などに,機械学習が用いられる場合があるが,
機械学習もまた,大きな計算能力を必要とする処理で
NW I/F
HTTP I/F
TLS I/F
Flow Abstractor
Flow
Classifier TLS Analyzer
HTTP Analyzer
HTTP Proxy
TCP, UDP
Handler
filter and
classifier
rule
L7 Loopback I/F
DB
Forensic
IDS/IPS
etc...
Application
Protocol Analyzer
etc...TCP Default I/F
UDP Default I/F
Analyzer PlaneAbstractor Plane
Capturer
Plane
SF-TAP Cell
Incubator
Flow
Identifier
Flow
Separator
Separator
Plane
separated traffic
SF-TAP Cell
L3/L7 Sniffer
libopenssl
API hooker
etc...
other SF-TAP cells
IP Packet
Defragmenter
L2 Bridge
mirroring
traffic
Packet Forwarder
IP Fragment
Handler
11
SF-TAPの実装
❖ Flow Abstractor!
❖ C++で実装!
❖ L7 IF部分はUnix Domain Socketを利用!
❖ pcapを用いてトラフィックキャプチャ!
❖ SF-TAP Cell Incubator!
❖ C++で実装!
❖ netmapを利用!
❖ HTTP Parser!
❖ Pythonで実装!
❖ 解析ロジックの一例
12
Flow Abstractorの設定ファイル
1 http:
2 up = ˆ[-a-zA-Z]+ .+ HTTP/1.(0r?n|1r?n([-a-
zA-Z]+: .+r?n)+)
3 down = ˆHTTP/1.[01] [1-9][0-9]{2} .+r?n
4 proto = TCP # TCP or UDP
5 if = http # path to UNIX domain socket
6 nice = 100 # priority
7 balance = 4 # balaced by 4 IFs
8
9 torrent_tracker: # BitTorrent Tracker
10 up = ˆGET .*(announce|scrape).*?.*info_hash
=.+&.+ HTTP/1.(0r?n|1r?n([-a-zA-Z]+: .+r?n)+)
11 down = ˆHTTP/1.[01] [1-9][0-9]{2} .+r?n
12 proto = TCP
13 if = torrent_tracker
14 nice = 90 # priority
15
16 dns_udp:
17 proto = UDP
18 if = dns
19 port = 53
20 nice = 200
1 $ ls -R
2 loopbac
3
4 /tmp/sf
5 default
6 dns=
7 ftp=
8 http0=
9 http1=
10
11 /tmp/sf
12 default
Figure 4:
リ構造
Flow A
い,図 4 で13
Flow Abstractorの設定ファイル
1 http:
2 up = ˆ[-a-zA-Z]+ .+ HTTP/1.(0r?n|1r?n([-a-
zA-Z]+: .+r?n)+)
3 down = ˆHTTP/1.[01] [1-9][0-9]{2} .+r?n
4 proto = TCP # TCP or UDP
5 if = http # path to UNIX domain socket
6 nice = 100 # priority
7 balance = 4 # balaced by 4 IFs
8
9 torrent_tracker: # BitTorrent Tracker
10 up = ˆGET .*(announce|scrape).*?.*info_hash
=.+&.+ HTTP/1.(0r?n|1r?n([-a-zA-Z]+: .+r?n)+)
11 down = ˆHTTP/1.[01] [1-9][0-9]{2} .+r?n
12 proto = TCP
13 if = torrent_tracker
14 nice = 90 # priority
15
16 dns_udp:
17 proto = UDP
18 if = dns
19 port = 53
20 nice = 200
1 $ ls -R
2 loopbac
3
4 /tmp/sf
5 default
6 dns=
7 ftp=
8 http0=
9 http1=
10
11 /tmp/sf
12 default
Figure 4:
リ構造
Flow A
い,図 4 で
この正規表現にマッチしたトラフィックが出力される
L4プロトコル選択出力先IF
パターンの優先順位
ロードバランス用
ポート番号指定
14
Flow Abstractorの
抽象L7 IFディレクトリ構造
1 $ ls -R /tmp/sf-tap
2 loopback7= tcp/ udp/
3
4 /tmp/sf-tap/tcp:
5 default= http2= ssh=
6 dns= http3= ssl=
7 ftp= http_proxy= torrent_tracker=
8 http0= irc= websocket=
9 http1= smtp=
10
11 /tmp/sf-tap/udp:
12 default= dns= torrent_dht=
15
Flow Abstractorの出力例
❖ IPアドレス,ポート番号,L3/L4プロトコル,hopでフロー判別!
❖ hopはFlow Abstractorへ,トラフィックを再注入した場合に
利用される!
❖ TCPの複雑なイベントを,CREATED,DATA,DESTROYEDに
抽象化
1 ip1=192.168.0.1,ip2=192.168.0.2,port1=62918,port2=80,hop=0,l3=ipv4,l4=tcp,event=CREATED
2 ip1=192.168.0.1,ip2=192.168.0.2,port1=62918,port2=80,hop=0,l3=ipv4,l4=tcp,event=DATA,from=2,match=down,len=1398
3
4 1398[bytes] Binary Data
5
6 ip1=192.168.0.1,ip2=192.168.0.2,port1=62918,port2=80,hop=0,l3=ipv4,l4=tcp,event=DESTROYED
Figure 5: L7 インターフェースからの出力例
3.2.3 フローと TCP セッションの抽象化
一般的に,フローの単位は,送信元と宛先の IP アド
レスとポート番号,及び L4,L3 プロトコル種別を用
いることが多いが,我々はこれらに加えて,3.2.2 節で
説明した,Hop Count もフローの識別子と利用する.
図 5 は,L7 インターフェースからの出力例を示して
いる.Flow Abstractor は,基本的に,フロー識別子と,
TCP イベントなどの付随情報を含むヘッダ情報を,テ
キストベースのフォーマットで出力し,その後にデー
タを含むならバイナリデータを出力する.
図 5 の 1 行 目 で は ,192.168.0.1:62918 と
192.168.0.2:80 の 間 で TCP セッション が 確 立 さ
れたことが示されている.2 行目では,192.168.0.2:80
から 192.168.0.1:62918 へ向けて,1398 バイトのデー
違いはない.そのため,BitTorrent Tracker 用の正規
表現よりも先に,HTTP 用の正規表現を使ってプロト
コル判別を行ってしまうと,ファーストマッチの場合
BitTorrent Tracker 用の正規表現は全くマッチしなく
なってしまう.この問題は,優先順位を設定すること
で回避でき,図 3 では,HTTP プロトコルよりも先に,
BitTorrent Tracker のルールを優先するよう設定して
ある.
3.2.5 抽象フローインターフェースレベルの負荷分散
一般的なネットワークでは,HTTP など,ある特定の
プロトコルが偏って出現するのが通常である.そのた
め,L7 プロトコルと抽象フローインターフェースが,
1対1対応してしまうと,特定のプロトコルパーサ16
HTTP Parser
❖ 解析ロジックの一例!
❖ Pythonで実装(469行)!
❖ Flow Abstractorの出力をスト
リーム処理でパースし,JSON形
式で出力
1 {
2 "client": {
3 "port": "61906",
4 "ip":"192.168.11.12",
5 "header": {
6 "host": "www.nsa.gov",
7 "user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS
X 10.9; rv:31.0) Gecko/20100101 Firefox/31.0",
8 "connection": "keep-alive",
9 "pragma": "no-cache",
10 "accept": "text/html,application/xhtml+xml,
application/xml;q=0.9,*/*;q=0.8",
11 "accept-language": "ja,en-us;q=0.7,en;q=0.3", 11 "
accept-encoding": "gzip, deflate",
12 "cache-control": "no-cache"
13 },
14 "method": {
15 "method": "GET",
16 "uri": "/",
17 "ver": "HTTP/1.1"
18 },
19 "trailer": {}
20 },
21 "server": {
22 "port": "80",
23 "ip": "23.6.116.226",
24 "header": {
25 "connection": "keep-alive",
26 "content-length":"6268",
27 "date": "Sat, 16 Aug 2014 11:38:25 GMT",
28 "content-encoding": "gzip",
29 "vary": "Accept-Encoding",
30 "x-powered-by": "ASP.NET",
31 "server": "Microsoft-IIS/7.5",
32 "content-type": "text/html"
33 },
34 "response": {
35 "ver": "HTTP/1.1",
36 "code": "200",
37 "msg": "OK"
38 },
39 "trailer": {}
40 }
41 }17
評価:HTTP Parserのスケーラビリティ
❖ Flow Abstractorのbalanceを利用して,PythonのHTTP Parserを複数プロセスに増加さ
せた時の,CPU利用率!
❖ 複数プロセスの場合,上手くロードバランスされていることが分かる!
❖ スクリプト言語を用いても,容易にコアスケールが可能に
(a) HTTP Parser x 1 (b) HTTP Parser x 2 (c) HTTP Parser x 4
generate 50 clients / sec, 1000 clients maximum, 2500 requests / sec on average
Figure 7: CPU Load of HTTP Parser and Flow Abstractor
10Gbps トラフィックのフローレベル解析を実現して
いる.SCAP は Linux カーネル内で動作し,NIC の送
受信キューに対してスレッドを割り当てることで高速
化を行っている.また,Subzero-Copy Packet Transfer
と呼ばれる機構を備えており,必要なトラフィックの
み選択的に解析することが可能となっている.GASPP
は GPGPU を利用したフローレベルの解析エンジンで18
評価:SF-TAP Cell Incubator
❖ netmapを利用!
❖ 現在計測中!
❖ L2最小フレームサイズにおける処理能力!
❖ 12M [pps]以上は利用可能!
❖ Lagopus(DPDKを利用)で2M [pps]程度
19

More Related Content

What's hot

Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
KamezawaHiroyuki
 
Hydrogen → Helium での Linux kernel の違い
Hydrogen → Helium での Linux kernel の違いHydrogen → Helium での Linux kernel の違い
Hydrogen → Helium での Linux kernel の違い
Masakazu Asama
 
GPU-FPGA協調プログラミングを実現するコンパイラの開発
GPU-FPGA協調プログラミングを実現するコンパイラの開発GPU-FPGA協調プログラミングを実現するコンパイラの開発
GPU-FPGA協調プログラミングを実現するコンパイラの開発
Ryuuta Tsunashima
 
Wiresharkで検出できないチャットプログラム
Wiresharkで検出できないチャットプログラムWiresharkで検出できないチャットプログラム
Wiresharkで検出できないチャットプログラム
Shinichi Hirauchi
 
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
Ryuuta Tsunashima
 
Lagopus 0.2.2
Lagopus 0.2.2Lagopus 0.2.2
Lagopus 0.2.2
Masaru Oki
 
Intel 82599 10GbE Controllerで遊ぼう
Intel 82599 10GbE Controllerで遊ぼうIntel 82599 10GbE Controllerで遊ぼう
Intel 82599 10GbE Controllerで遊ぼうTakuya ASADA
 
Lagopus どれだけ速いのか
Lagopus どれだけ速いのかLagopus どれだけ速いのか
Lagopus どれだけ速いのか
Masaru Oki
 
Xeon dとlagopusと、pktgen dpdk
Xeon dとlagopusと、pktgen dpdkXeon dとlagopusと、pktgen dpdk
Xeon dとlagopusと、pktgen dpdk
Masaru Oki
 
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
稔 小林
 
about Tcpreplay
about Tcpreplayabout Tcpreplay
about Tcpreplay
@ otsuka752
 
数値計算のための Python + FPGA
数値計算のための Python + FPGA数値計算のための Python + FPGA
数値計算のための Python + FPGA
ryos36
 
LagopusでPPPoEを使えるか考えてみた件
LagopusでPPPoEを使えるか考えてみた件LagopusでPPPoEを使えるか考えてみた件
LagopusでPPPoEを使えるか考えてみた件
Masaru Oki
 
Trema day 1
Trema day 1Trema day 1
Trema day 1
ykuga
 
OpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワークOpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワーク
M Hagiwara
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
Kazuho Oku
 
Lagopus Switch Usecases
Lagopus Switch UsecasesLagopus Switch Usecases
Lagopus Switch Usecases
Sakiko Kawai
 
Linux packet-forwarding
Linux packet-forwardingLinux packet-forwarding
Linux packet-forwardingMasakazu Asama
 
機械語の動作トレース による処理装置のはたらきの説明スライド
機械語の動作トレース による処理装置のはたらきの説明スライド機械語の動作トレース による処理装置のはたらきの説明スライド
機械語の動作トレース による処理装置のはたらきの説明スライド
seastar orion
 

What's hot (20)

Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
 
Hydrogen → Helium での Linux kernel の違い
Hydrogen → Helium での Linux kernel の違いHydrogen → Helium での Linux kernel の違い
Hydrogen → Helium での Linux kernel の違い
 
GPU-FPGA協調プログラミングを実現するコンパイラの開発
GPU-FPGA協調プログラミングを実現するコンパイラの開発GPU-FPGA協調プログラミングを実現するコンパイラの開発
GPU-FPGA協調プログラミングを実現するコンパイラの開発
 
Wiresharkで検出できないチャットプログラム
Wiresharkで検出できないチャットプログラムWiresharkで検出できないチャットプログラム
Wiresharkで検出できないチャットプログラム
 
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
 
Lagopus 0.2.2
Lagopus 0.2.2Lagopus 0.2.2
Lagopus 0.2.2
 
Intel 82599 10GbE Controllerで遊ぼう
Intel 82599 10GbE Controllerで遊ぼうIntel 82599 10GbE Controllerで遊ぼう
Intel 82599 10GbE Controllerで遊ぼう
 
Lagopus どれだけ速いのか
Lagopus どれだけ速いのかLagopus どれだけ速いのか
Lagopus どれだけ速いのか
 
Xeon dとlagopusと、pktgen dpdk
Xeon dとlagopusと、pktgen dpdkXeon dとlagopusと、pktgen dpdk
Xeon dとlagopusと、pktgen dpdk
 
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
 
about Tcpreplay
about Tcpreplayabout Tcpreplay
about Tcpreplay
 
数値計算のための Python + FPGA
数値計算のための Python + FPGA数値計算のための Python + FPGA
数値計算のための Python + FPGA
 
LagopusでPPPoEを使えるか考えてみた件
LagopusでPPPoEを使えるか考えてみた件LagopusでPPPoEを使えるか考えてみた件
LagopusでPPPoEを使えるか考えてみた件
 
Trema day 1
Trema day 1Trema day 1
Trema day 1
 
OpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワークOpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワーク
 
#pakeana 14
#pakeana 14#pakeana 14
#pakeana 14
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
 
Lagopus Switch Usecases
Lagopus Switch UsecasesLagopus Switch Usecases
Lagopus Switch Usecases
 
Linux packet-forwarding
Linux packet-forwardingLinux packet-forwarding
Linux packet-forwarding
 
機械語の動作トレース による処理装置のはたらきの説明スライド
機械語の動作トレース による処理装置のはたらきの説明スライド機械語の動作トレース による処理装置のはたらきの説明スライド
機械語の動作トレース による処理装置のはたらきの説明スライド
 

Similar to SF-TAP: 柔軟で規模追従可能なトラフィック解析基盤の設計

20060520.tcp
20060520.tcp20060520.tcp
20060520.tcp
Ken SASAKI
 
Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419エイシュン コンドウ
 
plotnetcfg入門 | Introduction to plotnetcfg
plotnetcfg入門 | Introduction to plotnetcfgplotnetcfg入門 | Introduction to plotnetcfg
plotnetcfg入門 | Introduction to plotnetcfg
Kentaro Ebisawa
 
FD.io VPP事始め
FD.io VPP事始めFD.io VPP事始め
FD.io VPP事始め
tetsusat
 
VPP事始め
VPP事始めVPP事始め
VPP事始め
npsg
 
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Tomoya Hibi
 
組み込みシステムのセキュリティ
組み込みシステムのセキュリティ組み込みシステムのセキュリティ
組み込みシステムのセキュリティFFRI, Inc.
 
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりRubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつり
Yuya Rin
 
Container Networking Deep Dive
Container Networking Deep DiveContainer Networking Deep Dive
Container Networking Deep Dive
Hirofumi Ichihara
 
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)高速ネットワーク最新動向と具体例 (ENOG58 Meeting)
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)
Naoto MATSUMOTO
 
HaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミングHaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミングKiwamu Okabe
 
P2Pって何?
P2Pって何?P2Pって何?
P2Pって何?
Junya Yamaguchi
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
Takaaki Hoyo
 
HPC Phys-20201203
HPC Phys-20201203HPC Phys-20201203
HPC Phys-20201203
MITSUNARI Shigeo
 
技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたい
技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたい技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたい
技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたい
Kenichiro MATOHARA
 
2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料Yasutaka Hamada
 
ロボットシステム学2015年第8回
ロボットシステム学2015年第8回ロボットシステム学2015年第8回
ロボットシステム学2015年第8回
Ryuichi Ueda
 
20150715 xflow kikuta_final
20150715 xflow kikuta_final20150715 xflow kikuta_final
20150715 xflow kikuta_final
Kazumasa Ikuta
 

Similar to SF-TAP: 柔軟で規模追従可能なトラフィック解析基盤の設計 (20)

20060520.tcp
20060520.tcp20060520.tcp
20060520.tcp
 
Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419
 
Inside winnyp
Inside winnypInside winnyp
Inside winnyp
 
plotnetcfg入門 | Introduction to plotnetcfg
plotnetcfg入門 | Introduction to plotnetcfgplotnetcfg入門 | Introduction to plotnetcfg
plotnetcfg入門 | Introduction to plotnetcfg
 
FD.io VPP事始め
FD.io VPP事始めFD.io VPP事始め
FD.io VPP事始め
 
VPP事始め
VPP事始めVPP事始め
VPP事始め
 
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
 
組み込みシステムのセキュリティ
組み込みシステムのセキュリティ組み込みシステムのセキュリティ
組み込みシステムのセキュリティ
 
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりRubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつり
 
Container Networking Deep Dive
Container Networking Deep DiveContainer Networking Deep Dive
Container Networking Deep Dive
 
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)高速ネットワーク最新動向と具体例 (ENOG58 Meeting)
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)
 
Scapy presentation
Scapy presentationScapy presentation
Scapy presentation
 
HaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミングHaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミング
 
P2Pって何?
P2Pって何?P2Pって何?
P2Pって何?
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
 
HPC Phys-20201203
HPC Phys-20201203HPC Phys-20201203
HPC Phys-20201203
 
技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたい
技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたい技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたい
技適なBluetooth GNSS/GPSレシーバーをRaspberryPiで作りたい
 
2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料
 
ロボットシステム学2015年第8回
ロボットシステム学2015年第8回ロボットシステム学2015年第8回
ロボットシステム学2015年第8回
 
20150715 xflow kikuta_final
20150715 xflow kikuta_final20150715 xflow kikuta_final
20150715 xflow kikuta_final
 

More from Yuuki Takano

アクターモデル
アクターモデルアクターモデル
アクターモデル
Yuuki Takano
 
π計算
π計算π計算
π計算
Yuuki Takano
 
FARIS: Fast and Memory-efficient URL Filter by Domain Specific Machine
FARIS: Fast and Memory-efficient URL Filter by Domain Specific MachineFARIS: Fast and Memory-efficient URL Filter by Domain Specific Machine
FARIS: Fast and Memory-efficient URL Filter by Domain Specific Machine
Yuuki Takano
 
リアクティブプログラミング
リアクティブプログラミングリアクティブプログラミング
リアクティブプログラミング
Yuuki Takano
 
Transactional Memory
Transactional MemoryTransactional Memory
Transactional Memory
Yuuki Takano
 
Tutorial of SF-TAP Flow Abstractor
Tutorial of SF-TAP Flow AbstractorTutorial of SF-TAP Flow Abstractor
Tutorial of SF-TAP Flow Abstractor
Yuuki Takano
 
SF-TAP: Scalable and Flexible Traffic Analysis Platform (USENIX LISA 2015)
SF-TAP: Scalable and Flexible Traffic Analysis Platform (USENIX LISA 2015)SF-TAP: Scalable and Flexible Traffic Analysis Platform (USENIX LISA 2015)
SF-TAP: Scalable and Flexible Traffic Analysis Platform (USENIX LISA 2015)
Yuuki Takano
 
CUDAメモ
CUDAメモCUDAメモ
CUDAメモ
Yuuki Takano
 
【やってみた】リーマン多様体へのグラフ描画アルゴリズムの実装【実装してみた】
【やってみた】リーマン多様体へのグラフ描画アルゴリズムの実装【実装してみた】【やってみた】リーマン多様体へのグラフ描画アルゴリズムの実装【実装してみた】
【やってみた】リーマン多様体へのグラフ描画アルゴリズムの実装【実装してみた】
Yuuki Takano
 
MindYourPrivacy: Design and Implementation of a Visualization System for Thir...
MindYourPrivacy: Design and Implementation of a Visualization System for Thir...MindYourPrivacy: Design and Implementation of a Visualization System for Thir...
MindYourPrivacy: Design and Implementation of a Visualization System for Thir...
Yuuki Takano
 
Measurement Study of Open Resolvers and DNS Server Version
Measurement Study of Open Resolvers and DNS Server VersionMeasurement Study of Open Resolvers and DNS Server Version
Measurement Study of Open Resolvers and DNS Server Version
Yuuki Takano
 
Security workshop 20131220
Security workshop 20131220Security workshop 20131220
Security workshop 20131220
Yuuki Takano
 
Security workshop 20131213
Security workshop 20131213Security workshop 20131213
Security workshop 20131213
Yuuki Takano
 
Security workshop 20131127
Security workshop 20131127Security workshop 20131127
Security workshop 20131127
Yuuki Takano
 
A Measurement Study of Open Resolvers and DNS Server Version
A Measurement Study of Open Resolvers and DNS Server VersionA Measurement Study of Open Resolvers and DNS Server Version
A Measurement Study of Open Resolvers and DNS Server Version
Yuuki Takano
 

More from Yuuki Takano (15)

アクターモデル
アクターモデルアクターモデル
アクターモデル
 
π計算
π計算π計算
π計算
 
FARIS: Fast and Memory-efficient URL Filter by Domain Specific Machine
FARIS: Fast and Memory-efficient URL Filter by Domain Specific MachineFARIS: Fast and Memory-efficient URL Filter by Domain Specific Machine
FARIS: Fast and Memory-efficient URL Filter by Domain Specific Machine
 
リアクティブプログラミング
リアクティブプログラミングリアクティブプログラミング
リアクティブプログラミング
 
Transactional Memory
Transactional MemoryTransactional Memory
Transactional Memory
 
Tutorial of SF-TAP Flow Abstractor
Tutorial of SF-TAP Flow AbstractorTutorial of SF-TAP Flow Abstractor
Tutorial of SF-TAP Flow Abstractor
 
SF-TAP: Scalable and Flexible Traffic Analysis Platform (USENIX LISA 2015)
SF-TAP: Scalable and Flexible Traffic Analysis Platform (USENIX LISA 2015)SF-TAP: Scalable and Flexible Traffic Analysis Platform (USENIX LISA 2015)
SF-TAP: Scalable and Flexible Traffic Analysis Platform (USENIX LISA 2015)
 
CUDAメモ
CUDAメモCUDAメモ
CUDAメモ
 
【やってみた】リーマン多様体へのグラフ描画アルゴリズムの実装【実装してみた】
【やってみた】リーマン多様体へのグラフ描画アルゴリズムの実装【実装してみた】【やってみた】リーマン多様体へのグラフ描画アルゴリズムの実装【実装してみた】
【やってみた】リーマン多様体へのグラフ描画アルゴリズムの実装【実装してみた】
 
MindYourPrivacy: Design and Implementation of a Visualization System for Thir...
MindYourPrivacy: Design and Implementation of a Visualization System for Thir...MindYourPrivacy: Design and Implementation of a Visualization System for Thir...
MindYourPrivacy: Design and Implementation of a Visualization System for Thir...
 
Measurement Study of Open Resolvers and DNS Server Version
Measurement Study of Open Resolvers and DNS Server VersionMeasurement Study of Open Resolvers and DNS Server Version
Measurement Study of Open Resolvers and DNS Server Version
 
Security workshop 20131220
Security workshop 20131220Security workshop 20131220
Security workshop 20131220
 
Security workshop 20131213
Security workshop 20131213Security workshop 20131213
Security workshop 20131213
 
Security workshop 20131127
Security workshop 20131127Security workshop 20131127
Security workshop 20131127
 
A Measurement Study of Open Resolvers and DNS Server Version
A Measurement Study of Open Resolvers and DNS Server VersionA Measurement Study of Open Resolvers and DNS Server Version
A Measurement Study of Open Resolvers and DNS Server Version
 

SF-TAP: 柔軟で規模追従可能なトラフィック解析基盤の設計

  • 1. SF-TAP: 柔軟で規模追従可能なトラフィック解析基盤の設計 SF-TAP : Design of Scalable and Flexible Traffic Analysis Platform IEICE ICM研究会 2015年1月15日 高野 祐輝,三浦 良介,安田 真悟, 明石 邦夫,井上 朋哉! ! 情報通信研究機構! 北陸先端科学技術大学院大学 1
  • 3. 背景と目的(1) ❖ もっとプログラマブルなL7解析器がほしい! ❖ Python,Ruby,Cで解析ロジックを書きたい! ❖ DSL覚えたくない! ❖ Cで文字列処理したくない! ❖ 自前でTCPストリームの再構成処理とか書いてられな い 3
  • 4. 背景と目的(2) ❖ もっとスケーラビリティの高い解析器がほしい! ❖ 高bps,高pps! ❖ 水平スケール,コアスケール! ❖ コモディティベースで実現したい! ❖ 高価で取り回しの難しいアプライアンスを使いたくない! ❖ ベンダーロックインからの開放! ❖ NFVのVNFとしてサービスチェインを行い,ネットワークトラフィッ ク解析をソフトウェアで自由に行いたい 4
  • 5. 関連研究と本研究の位置づけ トラフィックキャプチャ技術 BPF netmap DPDK GASPP[USENIX ATC 2014] SCAP[IMC 2012] フローレベル解析技術 L7プロトコル判別 nDPI libprotoident l7-filter 本研究:SF-TAP +モジュラリティ&スケーラビリティ libnids pcap 5
  • 7. SF-TAPのハイレベルアーキテクチャ 7 CPU CPU CPU CPU Flow Abstractor CPU CPU CPU CPU Flow Abstractor CPU CPU CPU CPU Flow Abstractor CPU CPU CPU CPU Flow Abstractor Cell Incubator The Internet SF-TAP Cell SF-TAP Cell SF-TAP Cell SF-TAP Cell Intra Network Core ScalingCore Scaling Core Scaling Core Scaling Horizontal Scaling Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer Analyzer 10GbE 10GbE
  • 8. SF-TAPの設計原理(1) ❖ フロー抽象化! ❖ トラフィックをL7プロトコルで抽象化! ❖ Unixの/devやBPFのような抽象化IF! ❖ 開発者の得意な言語で解析ロジックの記述が可能! ❖ ネットワークフォレンジック,IDS,IPS,機械学習など,用途に応じた言 語の選択が可能! ❖ モジュラアーキテクチャ! ❖ 解析ロジックとキャプチャ部分の分離! ❖ 解析ロジックの容易な付替えが可能に 8
  • 9. SF-TAPの設計原理(2) ❖ 水平スケール! ❖ 解析ロジック(機械学習など)の処理には,多量の計算リソース が必要! ❖ 台数効果で計算リソース不足を解消! ❖ コアスケール! ❖ 計算リソースを有効に活用! ❖ キャプチャ部分及び,解析ロジック部分のコアスケールを可能に 9
  • 10. SF-TAPの設計(1) ❖ SF-TAP Cell! ❖ Flow Abstractor! ❖ IPパケット再構成! ❖ フロー識別! ❖ TCPストリーム再構成! ❖ L7プロトコル判別! ❖ Application Protocol Analyzer! ❖ ユーザが記述! ❖ HTTPパーサなど そこで,我々は,フロー制御部分と,トラフィック 解析ロジック部分を分離し,解析ロジックをモジュラ 化した,モジュラ型のアーキテクチャを提案する.フ ロー制御部分とトラフィック解析部分を,ソフトウェ ア的に分離し,解析ロジック部分のモジュラ化を行う ことで,トラフィック解析ロジックの動的な変更や, 追加が容易に行えるようになる.さらに,研究/開発 段階のソフトウェアにはバグが混入することが多い が,解析ロジックをモジュラ化することで,そのバグ の影響範囲を,単一の解析モジュールに留めることが できる. 2.3 水平スケール 一般的に,L7 プロトコルの解析には,大きな計算量 が必要となる場合が多い.例えば,HTTP プロトコル を解析するためには,文字列のパースを行わなけれ ばならなず,リアルタイムで URL フィルタリングを 行いたい場合は,正規表現などを用いた文字列マッチ ングを行う必要が有るが,このような文字列処理は非 常に負荷の高い処理である.また,トラフィックの特 徴抽出などに,機械学習が用いられる場合があるが, 機械学習もまた,大きな計算能力を必要とする処理で NW I/F HTTP I/F TLS I/F Flow Abstractor Flow Classifier TLS Analyzer HTTP Analyzer HTTP Proxy TCP, UDP Handler filter and classifier rule L7 Loopback I/F DB Forensic IDS/IPS etc... Application Protocol Analyzer etc...TCP Default I/F UDP Default I/F Analyzer PlaneAbstractor Plane Capturer Plane SF-TAP Cell Incubator Flow Identifier Flow Separator Separator Plane separated traffic SF-TAP Cell L3/L7 Sniffer libopenssl API hooker etc... other SF-TAP cells IP Packet Defragmenter L2 Bridge mirroring traffic Packet Forwarder IP Fragment Handler 10
  • 11. SF-TAPの設計(2) ❖ SF-TAP Cell Incubator! ❖ フロー単位のトラフィック 分割! ❖ TAP&インラインモード! ❖ IPフラグメント対応 そこで,我々は,フロー制御部分と,トラフィック 解析ロジック部分を分離し,解析ロジックをモジュラ 化した,モジュラ型のアーキテクチャを提案する.フ ロー制御部分とトラフィック解析部分を,ソフトウェ ア的に分離し,解析ロジック部分のモジュラ化を行う ことで,トラフィック解析ロジックの動的な変更や, 追加が容易に行えるようになる.さらに,研究/開発 段階のソフトウェアにはバグが混入することが多い が,解析ロジックをモジュラ化することで,そのバグ の影響範囲を,単一の解析モジュールに留めることが できる. 2.3 水平スケール 一般的に,L7 プロトコルの解析には,大きな計算量 が必要となる場合が多い.例えば,HTTP プロトコル を解析するためには,文字列のパースを行わなけれ ばならなず,リアルタイムで URL フィルタリングを 行いたい場合は,正規表現などを用いた文字列マッチ ングを行う必要が有るが,このような文字列処理は非 常に負荷の高い処理である.また,トラフィックの特 徴抽出などに,機械学習が用いられる場合があるが, 機械学習もまた,大きな計算能力を必要とする処理で NW I/F HTTP I/F TLS I/F Flow Abstractor Flow Classifier TLS Analyzer HTTP Analyzer HTTP Proxy TCP, UDP Handler filter and classifier rule L7 Loopback I/F DB Forensic IDS/IPS etc... Application Protocol Analyzer etc...TCP Default I/F UDP Default I/F Analyzer PlaneAbstractor Plane Capturer Plane SF-TAP Cell Incubator Flow Identifier Flow Separator Separator Plane separated traffic SF-TAP Cell L3/L7 Sniffer libopenssl API hooker etc... other SF-TAP cells IP Packet Defragmenter L2 Bridge mirroring traffic Packet Forwarder IP Fragment Handler 11
  • 12. SF-TAPの実装 ❖ Flow Abstractor! ❖ C++で実装! ❖ L7 IF部分はUnix Domain Socketを利用! ❖ pcapを用いてトラフィックキャプチャ! ❖ SF-TAP Cell Incubator! ❖ C++で実装! ❖ netmapを利用! ❖ HTTP Parser! ❖ Pythonで実装! ❖ 解析ロジックの一例 12
  • 13. Flow Abstractorの設定ファイル 1 http: 2 up = ˆ[-a-zA-Z]+ .+ HTTP/1.(0r?n|1r?n([-a- zA-Z]+: .+r?n)+) 3 down = ˆHTTP/1.[01] [1-9][0-9]{2} .+r?n 4 proto = TCP # TCP or UDP 5 if = http # path to UNIX domain socket 6 nice = 100 # priority 7 balance = 4 # balaced by 4 IFs 8 9 torrent_tracker: # BitTorrent Tracker 10 up = ˆGET .*(announce|scrape).*?.*info_hash =.+&.+ HTTP/1.(0r?n|1r?n([-a-zA-Z]+: .+r?n)+) 11 down = ˆHTTP/1.[01] [1-9][0-9]{2} .+r?n 12 proto = TCP 13 if = torrent_tracker 14 nice = 90 # priority 15 16 dns_udp: 17 proto = UDP 18 if = dns 19 port = 53 20 nice = 200 1 $ ls -R 2 loopbac 3 4 /tmp/sf 5 default 6 dns= 7 ftp= 8 http0= 9 http1= 10 11 /tmp/sf 12 default Figure 4: リ構造 Flow A い,図 4 で13
  • 14. Flow Abstractorの設定ファイル 1 http: 2 up = ˆ[-a-zA-Z]+ .+ HTTP/1.(0r?n|1r?n([-a- zA-Z]+: .+r?n)+) 3 down = ˆHTTP/1.[01] [1-9][0-9]{2} .+r?n 4 proto = TCP # TCP or UDP 5 if = http # path to UNIX domain socket 6 nice = 100 # priority 7 balance = 4 # balaced by 4 IFs 8 9 torrent_tracker: # BitTorrent Tracker 10 up = ˆGET .*(announce|scrape).*?.*info_hash =.+&.+ HTTP/1.(0r?n|1r?n([-a-zA-Z]+: .+r?n)+) 11 down = ˆHTTP/1.[01] [1-9][0-9]{2} .+r?n 12 proto = TCP 13 if = torrent_tracker 14 nice = 90 # priority 15 16 dns_udp: 17 proto = UDP 18 if = dns 19 port = 53 20 nice = 200 1 $ ls -R 2 loopbac 3 4 /tmp/sf 5 default 6 dns= 7 ftp= 8 http0= 9 http1= 10 11 /tmp/sf 12 default Figure 4: リ構造 Flow A い,図 4 で この正規表現にマッチしたトラフィックが出力される L4プロトコル選択出力先IF パターンの優先順位 ロードバランス用 ポート番号指定 14
  • 15. Flow Abstractorの 抽象L7 IFディレクトリ構造 1 $ ls -R /tmp/sf-tap 2 loopback7= tcp/ udp/ 3 4 /tmp/sf-tap/tcp: 5 default= http2= ssh= 6 dns= http3= ssl= 7 ftp= http_proxy= torrent_tracker= 8 http0= irc= websocket= 9 http1= smtp= 10 11 /tmp/sf-tap/udp: 12 default= dns= torrent_dht= 15
  • 16. Flow Abstractorの出力例 ❖ IPアドレス,ポート番号,L3/L4プロトコル,hopでフロー判別! ❖ hopはFlow Abstractorへ,トラフィックを再注入した場合に 利用される! ❖ TCPの複雑なイベントを,CREATED,DATA,DESTROYEDに 抽象化 1 ip1=192.168.0.1,ip2=192.168.0.2,port1=62918,port2=80,hop=0,l3=ipv4,l4=tcp,event=CREATED 2 ip1=192.168.0.1,ip2=192.168.0.2,port1=62918,port2=80,hop=0,l3=ipv4,l4=tcp,event=DATA,from=2,match=down,len=1398 3 4 1398[bytes] Binary Data 5 6 ip1=192.168.0.1,ip2=192.168.0.2,port1=62918,port2=80,hop=0,l3=ipv4,l4=tcp,event=DESTROYED Figure 5: L7 インターフェースからの出力例 3.2.3 フローと TCP セッションの抽象化 一般的に,フローの単位は,送信元と宛先の IP アド レスとポート番号,及び L4,L3 プロトコル種別を用 いることが多いが,我々はこれらに加えて,3.2.2 節で 説明した,Hop Count もフローの識別子と利用する. 図 5 は,L7 インターフェースからの出力例を示して いる.Flow Abstractor は,基本的に,フロー識別子と, TCP イベントなどの付随情報を含むヘッダ情報を,テ キストベースのフォーマットで出力し,その後にデー タを含むならバイナリデータを出力する. 図 5 の 1 行 目 で は ,192.168.0.1:62918 と 192.168.0.2:80 の 間 で TCP セッション が 確 立 さ れたことが示されている.2 行目では,192.168.0.2:80 から 192.168.0.1:62918 へ向けて,1398 バイトのデー 違いはない.そのため,BitTorrent Tracker 用の正規 表現よりも先に,HTTP 用の正規表現を使ってプロト コル判別を行ってしまうと,ファーストマッチの場合 BitTorrent Tracker 用の正規表現は全くマッチしなく なってしまう.この問題は,優先順位を設定すること で回避でき,図 3 では,HTTP プロトコルよりも先に, BitTorrent Tracker のルールを優先するよう設定して ある. 3.2.5 抽象フローインターフェースレベルの負荷分散 一般的なネットワークでは,HTTP など,ある特定の プロトコルが偏って出現するのが通常である.そのた め,L7 プロトコルと抽象フローインターフェースが, 1対1対応してしまうと,特定のプロトコルパーサ16
  • 17. HTTP Parser ❖ 解析ロジックの一例! ❖ Pythonで実装(469行)! ❖ Flow Abstractorの出力をスト リーム処理でパースし,JSON形 式で出力 1 { 2 "client": { 3 "port": "61906", 4 "ip":"192.168.11.12", 5 "header": { 6 "host": "www.nsa.gov", 7 "user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko/20100101 Firefox/31.0", 8 "connection": "keep-alive", 9 "pragma": "no-cache", 10 "accept": "text/html,application/xhtml+xml, application/xml;q=0.9,*/*;q=0.8", 11 "accept-language": "ja,en-us;q=0.7,en;q=0.3", 11 " accept-encoding": "gzip, deflate", 12 "cache-control": "no-cache" 13 }, 14 "method": { 15 "method": "GET", 16 "uri": "/", 17 "ver": "HTTP/1.1" 18 }, 19 "trailer": {} 20 }, 21 "server": { 22 "port": "80", 23 "ip": "23.6.116.226", 24 "header": { 25 "connection": "keep-alive", 26 "content-length":"6268", 27 "date": "Sat, 16 Aug 2014 11:38:25 GMT", 28 "content-encoding": "gzip", 29 "vary": "Accept-Encoding", 30 "x-powered-by": "ASP.NET", 31 "server": "Microsoft-IIS/7.5", 32 "content-type": "text/html" 33 }, 34 "response": { 35 "ver": "HTTP/1.1", 36 "code": "200", 37 "msg": "OK" 38 }, 39 "trailer": {} 40 } 41 }17
  • 18. 評価:HTTP Parserのスケーラビリティ ❖ Flow Abstractorのbalanceを利用して,PythonのHTTP Parserを複数プロセスに増加さ せた時の,CPU利用率! ❖ 複数プロセスの場合,上手くロードバランスされていることが分かる! ❖ スクリプト言語を用いても,容易にコアスケールが可能に (a) HTTP Parser x 1 (b) HTTP Parser x 2 (c) HTTP Parser x 4 generate 50 clients / sec, 1000 clients maximum, 2500 requests / sec on average Figure 7: CPU Load of HTTP Parser and Flow Abstractor 10Gbps トラフィックのフローレベル解析を実現して いる.SCAP は Linux カーネル内で動作し,NIC の送 受信キューに対してスレッドを割り当てることで高速 化を行っている.また,Subzero-Copy Packet Transfer と呼ばれる機構を備えており,必要なトラフィックの み選択的に解析することが可能となっている.GASPP は GPGPU を利用したフローレベルの解析エンジンで18
  • 19. 評価:SF-TAP Cell Incubator ❖ netmapを利用! ❖ 現在計測中! ❖ L2最小フレームサイズにおける処理能力! ❖ 12M [pps]以上は利用可能! ❖ Lagopus(DPDKを利用)で2M [pps]程度 19