分散システム特論 RFC3954 Cisco Systems NetFlow Services Export Version 9
-
Upload
waldemar-buckminster -
Category
Documents
-
view
94 -
download
0
description
Transcript of 分散システム特論 RFC3954 Cisco Systems NetFlow Services Export Version 9
分散システム特論RFC3954Cisco Systems NetFlow Services
Export Version 9 システム情報科学府
情報工学専攻 修士 1 年原田 義明
概要
RFC3954 とは? Netflow version9 のフォーマットについて書かれている
Netflow ネットワーク管理者に対して、データネットワーク上での IP
フローに関するデータを提供 ネットワーク構成要素 ( ルータやスイッチ ) からフローデータを収
集し、コレクタにエクスポートする 柔軟かつ詳細な計測結果を提供する
ネットワーク構成要素 Netflow コレクタ
管理者
概要
フローとは ネットワーク機器を通過した、ある共通した特性
を持つ単一方向のパケットの列 IP アドレス、パケット数、バイト数、タイムス
タンプ、 ToS(Type of Service) 、アプリケーションが使用するポート番号、入出力インターフェースなど
準備
フロー抽出のタイミング エクスポーターがフローの終わりを検出した場合
TCP コネクションの FIN もしくは RSTbit の検出など フローが一定時間非アクティブだった場合
一定時間パケットが観測されなかったフロー 長寿命のフローに関して、一定時間毎に抽出
タイムアウト時間は設定可能 エクスポーターに何かしらの内部的な制約が発生
した場合 メモリ不足やカウンターが折り返してしまう場合
NetFlow export version 9
バージョン 9 は、エクスポートフォーマットにテンプレートを使用している IP パケットのフローを柔軟性が高く、拡張性に
富んだ方法で観測することができる エクスポートする情報のフォーマットの構造を
変更せずに、新しいフィールドを NetFlow のレコードに追加できる
必要なデータのみをエクスポートできるので、ネットワーク負荷を軽減できる
準備
エクスポートされるフローセットの種類 データ・フローセット
フローデータ・レコード エクスポートされたフローのデータ部分
オプション・データ・レコード NetFlow の処理設定など、フロー以外の要求された情報
テンプレート・フローセット 何をエクスポートするのかを定義したフローセット
オプション・テンプレート・フローセット 何をエクスポートするのかを定義したフローセット フロー自体ではなく、 NetFlow の処理設定や処理固有のデー
タを提供するために利用される
フローセットの種類
フローセット内容
テンプレート・レコード データ・レコード
データ・フローセット /
フローデータ・レコードまたはオプ
ション・データ・レコード
テンプレート・フローセット
テンプレート・レコード /
オプション・テンプレート・レコード
オプション・テンプレート・レコード /
NetFlow のやり取り
エクスポーター コレクター
テンプレートフローセット
テンプレートフローセット
データフローセット
データフローセット フローデータ
これから送信するエクスポートデータのフォーマットを送信する受け取ったデータフローセットの
テンプレートは、コレクター側で保持エクスポーターは、データ・フローセットを送信するコレクターは、送られてきたデータ・フローセットと過去に受け取ったテンプレートを比較(それぞれのフローセットの ID を利用)
テンプレートがあれば、フローデータを作成できる
エクスポートパケット
エクスポートパケットは、ヘッダに続く 1 つ以上のフローセットから構成される テンプレート、データ、オプションテンプレートのいずれか フローセットにはそのフローセットのタイプを識別するため
に ID が割り振られている ID が 256 より小さいものは、テンプレートやオプションといった
特別なフローセットのために予約されている
パケットヘッダ
テンプレートフローセット
オプションテンプレートフローセット
データフローセット ・・・・・・
エクスポートパケット
パケットヘッダ
テンプレートフローセット
オプションテンプレートフローセット
データフローセット ・・・・・・ データ
フローセット
テンプレート、データ、オプションテンプレートが入り混じっている場合 新しく作られたテンプレートを、できる限り早くエクス
ポートするケース テンプレートやオプションテンプレートがスペース上の
都合により、入り混じって配置されていく
エクスポートパケット
データパケットのみにより構成 適切なテンプレートレコードが定義さ
れ、 Netflow コレクター機器に送信された後 大部分のエクスポートパケットはデータフロー
セットのみで構成される
パケットヘッダ
データフローセット
・・・・ データフローセット
データフローセット ・・・・・・・・
・・・・
エクスポートパケット
テンプレート、及びオプションテンプレートのみで構成 エクスポーターは、テンプレート、及びオプションテンプレー
トを含むパケットを定期的に NetFlow コレクターに送信する フローデータレコードの正しい定義を保持するために行われる
パケットヘッダ
テンプレートフローセット
オプションテンプレートフローセット
・・・ テンプレートフローセット
・・・
パケット・フォーマット
バージョン情報 カウント
sysUpTime
UNIX Secs
シーケンス番号
ソース IDパケットヘッダのフォーマット
パケットフォーマット
バージョン情報 エクスポートに使用されているフローレコードフォーマッ
トのバージョン番号 最新のバージョンは 9
カウント エクスポート・パケットに含まれるレコード数
オプション・フローセット・レコード、テンプレート・フローセット・レコード、データ・フローセット・レコードの合計数
sysUpTime 機器がブートしてから経過した時間をミリ秒で示したもの
パケットフォーマット
UNIX Secs エクスポートパケットがエクスポーターから創出された時刻を “ 0000 UTC 1970” を起点とした経過秒数で示したもの
シーケンス番号 エクスポーターが観測ドメインから送信した全てのエクス
ポートパケットにつけられたシーケンス番号 (昇順 ) コレクターがエクスポートパケットの取りこぼしが無い
か判断するときに使用 ソース ID
観測ドメインを特定するための 32bit の値 コレクターは、ソース ID と送信元 IP アドレスの組み合わ
せで、異なるエクスポートストリームを区別する
テンプレート・フローセット
フローセット ID = 0 長さテンプレート ID =
256フィールド数
フィールドタイプ 1 フィールド長 1
フィールドタイプ 2 フィールド長 2
・・・ ・・・フィールドタイプ N フィールド長 N
テンプレート ID = 257
フィールド数
フィールドタイプ 1 フィールド長 1
フィールドタイプ 2 フィールド長 2
・・・ ・・・フィールドタイプ M フィールド長 M
テンプレート・フローセットのフォーマット
テンプレート・フローセット
フローセット ID テンプレート・フローセットは ID=0 が割り振られている
長さ フローセット全体の長さ テンプレートフローセットの数が可変であるため、記述しなけ
ればならない テンプレート ID
テンプレートレコードに割り振られる、一意なテンプレート ID 生成した観測ドメイン内で、一意性は保障される ID は、 0~ 255 まではテンプレートフローセット、オプション・
フローセット、及び将来定義されるフローセットのために予約
テンプレート・フローセット
フィールド数 テンプレートレコードに含まれるフィールド数 この値から、次のテンプレートレコードまでの区切りを判断する
フィールドタイプ フィールドのタイプを表す数値
フィールド長 フィールドのタイプに対応した、バイト数を示
す
データ・フローセット
フローセット ID = テンプレート ID
長さ
レコード 1 – フィールド値 1 レコード 1 – フィールド値 2
レコード 1 – フィールド値 3 ・・・レコード 2 – フィールド値 1 レコード 2 – フィールド値 2
レコード 2 – フィールド値 3 ・・・レコード 2 – フィールド値 1 ・・・
・・・ パディングデータ・フローセットのフォーマット
データ・フローセット
フローセット ID フローセットごとに ID が割り振られている このフローセットが流れる以前に生成されているテンプ
レート ID と対応付けられている 長さ
本フローセットに含まれる全てのフローレコードの長さ レコード N – フィールド値 M
フローデータ・レコードの並び N個のフローレコードと、テンプレート ID で示された
フィールドのタイプと数のデータを含む パディング
4 バイトごとに区切られるように、 0 で埋められたパディング
データ・フローセット
フローセット ID = 1 長さテンプレート ID オプション・スコープ長
オプション長 スコープ 1 フィールドタイプ
スコープ 1 フィールド長 ・・・
スコープ N フィールド長 オプション 1 フィールドタイプ
オプション 1 フィールド長 ・・・オプション M フィールド長 パディングオプション・テンプレート・フローセットのフォーマット
データ・フローセット
フローセット ID オプション・テンプレートには ID = 1 が予約
長さ オプション・テンプレート・フローセット全部の長
さ テンプレート ID
256 以上の値が入っており、このオプション・テンプレートの ID を示す
オプション・スコープ長 オプション・テンプレート・レコードに含まれてい
るスコープ・フィールドの長さ
データ・フローセット
オプション長 オプション・テンプレート・レコード中のフィールド定義のバ
イト数 スコープ N フィールドタイプ
オプション・テンプレート・レコードが示しているエクスポーターや NetFlow 処理部の指定
スコープ・フィールドは必ずオプションフィールドの前に来る
1 : システム2 : インターフェース3 : ラインカード4 : キャッシュ5 : テンプレート
データ・フローセット
スコープ N フィールド長 スコープ・フィールドのバイト長
オプション M フィールド・タイプ オプション・テンプレートの中にフィールドの型を指定
オプション M フィールド長 オプションフィールドのバイト長
パディング 4 バイトごとの境界で区切れるように 0 でパディン
グ
オプション・フローセット
フローセット = テンプレートID
長さ
レコード長 = スコープ値 1 レコード 1 – オプションフィールド値 1
レコード 1 – オプションフィールド値 2
・・・
レコード長 = スコープ値 2 レコード 2 – オプションフィールド値 1
レコード 2 – オプションフィールド値 2
・・・
レコード 3 – スコープ値 1 レコード 3 – オプションフィールド値
レコード 3 – オプションフィールド値 2
・・・
・・・ パディング
データ・フローセット・フィールドのオプション・データ・レコードの説明
オプション・フローセット
フローセット ID データフローセットに対応するテンプレートの ID
長さ このフローセット全体の長さ
レコード N – オプション・フィールド値 スコープとオプションフィールド値の長さや種類
は、テンプレートにより定義されており、そのデータ部分
パディング
オプション・フローセット
フィールドタイプ
値 長さ ( バイト )
説明
IN_BYTES 1 N IP フローのバイト数N * 8ビット長で表した受信カウンターデフォルトの N は 4
IN_PKTS 2 N IP フローのパケット数N * 8ビット長で表した受信カウンターデフォルトの N は 4
FLOWS 3 N 集約されたフロー数デフォルトの N は 4
PROTOCOL 4 1 IP プロトコルタイプ
FLOW_SAMPLER_MODE
49 1 サンプリングに使用されているアルゴリズムのタイプ
DIRECTION 61 1 フローの方向
テンプレートの管理
テンプレートの管理 テンプレート・レコードとフローデータ・レコードは同じエ
クスポートパケットに表れてもよい 必ずしもエクスポートパケットはテンプレートレコード
を含む必要はないが、コレクタはテンプレートレコードを保持しなければならない テンプレートがないと、フローデータを解釈できない
エクスポーター側で何か変更 (再起動や時計の変更 ) がなされた場合は、既存のテンプレートは全て破棄する 新しいテンプレートレコードには、未使用のテンプレート
ID がふられる
エクスポーターの動作
次の場合に ( オプション ) テンプレートが送信される NetFlow 処理部分が再起動した場合
データ・フローセットと同時か、またそれ以前にテンプレート・フローセットを送信しなければならない
設定が変更された場合 できる限り速やかにテンプレート・フローセットを送信
する必要がある
早急にテンプレートを送信しなければならないため、この2つの場合はデータ・フローセットを含まずにパケットをエクスポートしてもよい
エクスポーターの動作
テンプレート情報のリフレッシュ 定期的に全ての ( オプション ) テンプレート・レコード
を送信しなければならない テンプレートには、一定の寿命を設定する
一定個数のエクスポートパケット毎 時間ベースの寿命 (○○ 分毎 )
時刻設定の変更時 できる限りすばやくテンプレート定義を送信する必要
がある
コレクタ側の動作
コレクタ側の動作 テンプレートが無いフローレコードを受け取っ
た場合 保存しておき、テンプレートが届き次第デコードを行
う エクスポーターで時刻の設定が変更になった時
そのエクスポーターに関連するテンプレートを全て破棄する必要がある
新しいテンプレートを受け取った場合 ただちに過去のテンプレートを上書きする
セキュリティ上の考慮点
NetFlow v9 は、エクスポーターとコレクターが単一のプライベートネットワーク上に存在すると過程 秘匿性や整合性、認証といった要求はプロトコル
に課されていない 現在、 IPFIX(IP Flow Information eXport) という
プロトコルが開発されている NetFlow v9 のセキュリティ上の問題を考慮しているプ
ロトコル RFC3917参照
疑問点
いくつかデータ長が可変のものがあったが、受信の際にサイズが違ったらどうなるのか? 送信元MAC アドレスは 6 バイト、など
エクスポーター側で時間設定が変更された場合、関連するテンプレートは全て破棄する必要がある コレクターはそのタイミングをどうやって知る
のか?
使用したプログラム
nfdump-1.5.2 NetFlow の version 5,7,9 に対応 NetFlow コレクタ netflow_v9.c ( nftdump の netflow のヴァージョ
ン 9への対応が書かれている部分)
データ長が違う場合は?
タイプごとに設定はされているが、テンプレートにデータ長も載せるため、別に違ってもそのまま受け付ける 可変長のデータと、固定長のデータの扱いに差は無い
for(i=0; i<count; i++ ) {field_type = ntohs(template->record[i].type) &
0x007f; // make sure field < 128field_length = ntohs(template->record[i].length);input_template[field_type].offset = offset;input_template[field_type].length = field_length;offset += field_length;
参考にしたプログラム
エクスポーター側から送信される、時間に関するデータは SysUptime と unix_secs の 2 つだけであるが、この二つに関する比較や操作は行われていなかった
typedef struct netflow_v9_header {uint16_t version;uint16_t count;uint32_t SysUptime;uint32_t unix_secs;uint32_t sequence;uint32_t source_id;
} netflow_v9_header_t;
テンプレートのリフレッシュ
では、テンプレートのリフレッシュのタイミングは? エクスポートパケット数と時間の 2 種類があった
if ( (record_count & 0xFFF) == 0 ) {// every 4096 flow records// terminate the current data flowsetdata_flowset = NULL;・・・・・・
if ( now - template->time_sent > MAX_LIFETIME ) {// refresh template is needed・・・・・・
テンプレートのリフレッシュ
エクスポーター側で時間設定が変更された場合、関連するテンプレートは全て破棄する必要がある これは、テンプレート情報 ( エクスポーター ID
や観測ドメイン情報など ) を更新できるようにするため、と RFC には書かれている
エクスポーター ID の更新は、テンプレートを受け取る時 ( のみ ) に毎回行われている
テンプレートのリフレッシュ
void Process_v9_templates(exporter_domain_t *exporter, template_flowset_t *template_flowset) {template_record_t *template;
・・・while (size_left) {
・・・setup_translation_table(exporter, id, offset);size_left -= template_size;
・・・}
setup_translation_table で、エクスポーターIDやテンプレートのテーブルを保存、追加しているこの関数が使われているのはこの部分のみ
結論
可変長のフローセットでなくても、データ長は変更できる コレクタ側は、エクスポートさせるデータの意味を知る必要はない ( 数値だけであれば、受け取ることができる )
時刻変更がされても、エクスポーター側でテーブルの変更はされない 更新はテンプレートを受け取る際に行われ続け
ている上、指定された時間を過ぎたテーブルは使用されないため、問題は無い