Transcript ppt

分散システム特論
RFC3954
Cisco 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



長さ


本フローセットに含まれる全てのフローレコードの長さ
レコード N – フィールド値 M



フローセットごとにIDが割り振られている
このフローセットが流れる以前に生成されているテンプレートID
と対応付けられている
フローデータ・レコードの並び
N個のフローレコードと、テンプレートIDで示されたフィールドの
タイプと数のデータを含む
パディング

4バイトごとに区切られるように、0で埋められたパディング
データ・フローセット
フローセット ID = 1
長さ
テンプレートID
オプション・スコープ長
オプション長
スコープ1 フィールドタイプ
スコープ1 フィールド長
・・・
スコープN フィールド長
オプション1 フィールドタイプ
オプション1 フィールド長
・・・
オプションMフィールド長
パディング
オプション・テンプレート・フローセットのフォーマット
データ・フローセット

フローセットID


長さ


オプション・テンプレート・フローセット全部の長さ
テンプレートID


オプション・テンプレートには ID = 1 が予約
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


長さ


このフローセット全体の長さ
レコードN – オプション・フィールド値


データフローセットに対応するテンプレートのID
スコープとオプションフィールド値の長さや種類は、テ
ンプレートにより定義されており、そのデータ部分
パディング
オプション・フローセット
フィールドタイプ
値
長さ(バイト)
説明
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_SAMPL 49
ER_MODE
1
サンプリングに使用されているアルゴリ
ズムのタイプ
DIRECTION
1
フローの方向
61
テンプレートの管理

テンプレートの管理


テンプレート・レコードとフローデータ・レコードは同じエクスポー
トパケットに表れてもよい
必ずしもエクスポートパケットはテンプレートレコードを含む必要
はないが、コレクタはテンプレートレコードを保持しなければなら
ない


テンプレートがないと、フローデータを解釈できない
エクスポーター側で何か変更(再起動や時計の変更)がなされ
た場合は、既存のテンプレートは全て破棄する

新しいテンプレートレコードには、未使用のテンプレート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 < 128
field_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 flowset
data_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やテンプレートのテーブル
を保存、追加している
この関数が使われているのはこの部分のみ
結論

可変長のフローセットでなくても、データ長は変
更できる


コレクタ側は、エクスポートさせるデータの意味を知る
必要はない(数値だけであれば、受け取ることができ
る)
時刻変更がされても、エクスポーター側でテーブ
ルの変更はされない

更新はテンプレートを受け取る際に行われ続けてい
る上、指定された時間を過ぎたテーブルは使用されな
いため、問題は無い