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やテンプレートのテーブル
を保存、追加している
この関数が使われているのはこの部分のみ
結論
可変長のフローセットでなくても、データ長は変
更できる
コレクタ側は、エクスポートさせるデータの意味を知る
必要はない(数値だけであれば、受け取ることができ
る)
時刻変更がされても、エクスポーター側でテーブ
ルの変更はされない
更新はテンプレートを受け取る際に行われ続けてい
る上、指定された時間を過ぎたテーブルは使用されな
いため、問題は無い