21
(C)Copyright 1996-2015 SAKURA Internet Inc. IaaS L2 ののののののの sFlow のののののの さささささささささささささ さささ さ[email protected] 2015/10/16 flowops22

2015.10.16 Flowops22

Embed Size (px)

Citation preview

Page 1: 2015.10.16 Flowops22

(C)Copyright 1996-2015 SAKURA Internet Inc.

IaaS の L2 ネットワークに

sFlow を導入した話

さくらインターネット研究所 大久保 修一[email protected]

2015/10/16 flowops22

Page 2: 2015.10.16 Flowops22

2

• 今回 flowops では3回目になります。

• 2010/4/2 Flowops Meeting - 12th

– sFlow を用いた DoS アタック検出システム• 2011/4/8 Flowops Meeting - 14th

–クラウドインフラにおける xFlow の応用について

自己紹介

一部商用環境に入れてみました

Page 3: 2015.10.16 Flowops22

3

• お客様ネットワーク単位のインターネット向けトラフィックの流量計測

• お客様向けにコントロールパネルでの帯域グラフ表示• 運用・管理目的での全契約の積み上げグラフ表示• 将来的に転送量課金にも対応できるように

実現したかったこと

Page 4: 2015.10.16 Flowops22

4

• 「さくらのクラウド」のオプションメニュー• お客様毎に独立した VLAN を払い出し、グローバル IP

アドレスを Prefix で提供• 帯域メニュー: 100M, 500M, 1Gbps (2015/10/16 現在 )• IP アドレスサイズ : /28 ~ /24• 帯域の変更は無停止で可能

「ルータ+スイッチ」について

以前トラフィックがわからなかった

Page 5: 2015.10.16 Flowops22

5

ルータ+スイッチの論理構成

133.242.xx.xx/28

専用の VLAN をアサイン

お客様サーバ( VM )

インターネット

インターネット向けゲートウェイ(ルータ)ここの帯域を

計測したい

サーバ間の通信は除外したい

Page 6: 2015.10.16 Flowops22

6

物理構成

ToR スイッチ

コアスイッチ

ルータ

ホストサーバ

802.1Q VLAN

ここを VLAN 単位で

トラフィック計測できればよさそう

SVI を設定

SVI = Switched Virtual Interface

Page 7: 2015.10.16 Flowops22

7

• ルータの SVI の snmp カウンタを参照する案

検討その1

$ snmpwalk -v2c -c XXXXXXXXX nn.nn.nn.nn ifHCInOctetsIF-MIB::ifHCInOctets.2 = Counter64: 5856192896095311IF-MIB::ifHCInOctets.3 = Counter64: 0IF-MIB::ifHCInOctets.4 = Counter64: 51912730060IF-MIB::ifHCInOctets.5 = Counter64: 30916826608353959IF-MIB::ifHCInOctets.6 = Counter64: 0IF-MIB::ifHCInOctets.7 = Counter64: 0IF-MIB::ifHCInOctets.8 = Counter64: 0IF-MIB::ifHCInOctets.9 = Counter64: 0IF-MIB::ifHCInOctets.11 = Counter64: 0IF-MIB::ifHCInOctets.17 = Counter64: 0IF-MIB::ifHCInOctets.19 = Counter64: 500IF-MIB::ifHCInOctets.20 = Counter64: 15613326IF-MIB::ifHCInOctets.21 = Counter64: 294IF-MIB::ifHCInOctets.22 = Counter64: 0IF-MIB::ifHCInOctets.23 = Counter64: 0IF-MIB::ifHCInOctets.24 = Counter64: 0<snip>

MIB は存在するが、正しくカウントされていない

このあたりがSVI の MIB

物理 IF は正しく取れている

Page 8: 2015.10.16 Flowops22

8

• ルータで NetFlow を動かすのはどうか?

検討その2

http://www.cisco.com/c/en/us/td/docs/switches/lan/catalyst4500/12-2/53SG/configuration/config/nfswitch.html

Supervisor Engine 6-E and Catalyst 4900Mchassis does not support Netflow.

Page 9: 2015.10.16 Flowops22

9

• コア L2 スイッチで見るのはどうか?

• 物理インターフェイスの VLAN 単位の snmp MIB は存在しない。

• sFlow はそこそこ動作!

• コア L2 スイッチで sFlow を動かし、サンプリングを行う方向で検討

• ただし、 Ingress のサンプリングしかサポートしていないため、 Egress を見る場合は工夫が必要

検討その3

Page 10: 2015.10.16 Flowops22

10

sFlow サンプリングの構成

ToR スイッチ

コアスイッチ

ルータ

VCS 構成

全ポートでsFlow を有効化 sFlow コレクタ

Page 11: 2015.10.16 Flowops22

11

sFlowレプリケーションプロセス

sFlow コレクタの構成

VIP

JSON RRD

pcap

トラフィック計測プロセス

フォレンジックプロセス

sFlow パケット

sFlowレプリケーションプロセス

JSON RRD

pcap

トラフィック計測プロセス

フォレンジックプロセス

VIP

Keepalived で冗長化

2 台のサーバで同じ集計プロセスを同時実行

Port6343 Port6343

Port26343

Port36343

Port26343

Port36343

Active Standby

Page 12: 2015.10.16 Flowops22

12

• sflowtool コマンドを引数なしで起動すると、デコード結果がテキストで表示される

トラフィック計測プロセスについて

startDatagram ================datagramSourceIP 10.131.X.XXdatagramSize 1144unixSecondsUTC 1408531174datagramVersion 4agent 10.131.X.XXpacketSequenceNo 114032sysUpTime 31177000samplesInPacket 7startSample ----------------------sampleType_tag 0:1sampleType FLOWSAMPLEsampleSequenceNo 303920sourceId 0:10101meanSkipCount 32768samplePool 1368915968dropEvents 0inputPort 10101outputPort 0flowSampleType HEADERheaderProtocol 1sampledPacketSize 68headerLen 64

headerBytes 9C-A3-BA-XX-XX-XX-70-81-05-XX-XX-XX-81-00-02-01-08-00-45-00-00-dstMAC 9ca3baXXXXXXsrcMAC 708105XXXXXXdecodedVLAN 513decodedPriority 0IPSize 50ip.tot_len 44srcIP XXX.XXX.XXX.XXXdstIP XXX.XXX.XXX.XXXIPProtocol 6IPTOS 0IPTTL 50TCPSrcPort 80TCPDstPort 10349TCPFlags 18extendedType SWITCHin_vlan 0in_priority 0out_vlan 0out_priority 0endSample ----------------------

これを perl でリアルタイムテキスト処理して集計

2006/9/22 IRS10 で発表したものがベースhttp://irs.ietf.to/past/docs_20060922/

Page 13: 2015.10.16 Flowops22

13

API サーバ、コンパネとの連携

クラウドコンパネ

API

JSONRRD pcap

API サーババッチサーバsFlow コレクタ

VLAN とリソース ID のマッピング

お客様オペレータ

Web UI

運用ツール

HTTP

Page 14: 2015.10.16 Flowops22

14

コンパネでの表示例

Page 15: 2015.10.16 Flowops22

15

運用ツールでの表示例

Page 16: 2015.10.16 Flowops22

16

• sFlow サンプルを pcap 形式で一定期間保存• DoS 攻撃などのセキュリティインシデント発生時に、

通信ログ解析

ネットワークフォレンジックとしての活用

クラックされ外部に攻撃を仕掛けているとともに、報復として DoS 攻撃を受けている仮想サーバのトラフィック例

Page 17: 2015.10.16 Flowops22

17

運用ツールでの表示例

Page 18: 2015.10.16 Flowops22

18

• スイッチのファームウェアをバージョンアップしたら、 VCS ISL Trunk ポートからのサンプルの sampledPacketSize に正しい値が入らなくなった。

sFlow ではまったところ ( その1 )

ISL Trunk

vLAGこっちは大丈夫

ここが正しくとれない

startDatagram =================================datagramSourceIP 10.132.XX.XXdatagramSize 348unixSecondsUTC 1441098132datagramVersion 5agentSubId 0agent 10.132.XX.XXpacketSequenceNo 125707593sysUpTime 2170975112samplesInPacket 1startSample ----------------------sampleType_tag 0:3sampleType FLOWSAMPLEsampleSequenceNo 13003896sourceId 0:404127792meanSkipCount 8192samplePool 3448700928dropEvents 0inputPort 404127792outputPort 403931173flowBlock_tag 0:1flowSampleType HEADERheaderProtocol 1sampledPacketSize 224strippedBytes 4headerLen 220<snip>

なぜか 224(Bytes)以上の値が入らない

Page 19: 2015.10.16 Flowops22

19

• sflowtool –t で pcap に保存していたが、 ISL Trunk ポートからのサンプルに Trill ヘッダがついていて、 tcpdump の IP アドレスフィルタがマッチしない。 Inner のパケットを見たい。

sFlow ではまったところ ( その2 )

headerBytes 50-EB-1A-XX-XX-XX-50-EB-1A-XX-XX-XX-81-00-00-00-22-F3-

00-3F-00-01-04-0A-00-00-0C-9F-F0-01-9C-A3-BA-XX-XX-XX-

81-00-01-1D-08-00-45-00-05-<snip>

Outer MAC

Trill Header Inner MAC 0x22F3 = TRILL

VLAN ID IPv4 IPv4 Header

sub strip_trill { my $packet_bin = shift;

my $ethertype1 = unpack('n', substr($packet_bin, 12, 2)); return $packet_bin unless ($ethertype1 == 0x8100); my $ethertype2 = unpack('n', substr($packet_bin, 16, 2)); return $packet_bin unless ($ethertype2 == 0x22f3);

return substr($packet_bin, 24);}

headerBytes のダンプからPcap ファイルを出力するプログラムを作成し、 0x22f3 だったら先頭 24 バイトを削って保存する処理を追加。

Page 20: 2015.10.16 Flowops22

20

JANOG31.5 高嶋さんのスライドよりhttp://www.janog.gr.jp/meeting/janog31.5/program/ietf-trill-update.html

Page 21: 2015.10.16 Flowops22

21

• 当方の環境ではテナント単位のトラフィックが SNMPで取得できず、サンプリング (sFlow) を活用した。

• 精度はそこそこなので、あくまでも目安程度。• 今後、 ( 転送量 ) 課金に適用するとなった場合は、も

う一工夫必要か?• ファブリック技術を用いている装置でのサンプリング

は要注意!?

まとめ