1 / 40

分散システム特論 RFC3954 Cisco Systems NetFlow Services Export Version 9

分散システム特論 RFC3954 Cisco Systems NetFlow Services Export Version 9. システム情報科学府 情報工学専攻 修士 1 年 原田 義明. 概要. RFC3954 とは? Netflow version9 のフォーマットについて書かれている Netflow ネットワーク管理者に対して、データネットワーク上での IP フローに関するデータを提供 ネットワーク構成要素 ( ルータやスイッチ ) からフローデータを収集し、コレクタにエクスポートする 柔軟かつ詳細な計測結果を提供する. 管理者. ネットワーク

Télécharger la présentation

分散システム特論 RFC3954 Cisco Systems NetFlow Services Export Version 9

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 分散システム特論RFC3954Cisco Systems NetFlow Services Export Version 9 システム情報科学府 情報工学専攻 修士1年 原田 義明

  2. 概要 • RFC3954とは? • Netflow version9 のフォーマットについて書かれている • Netflow • ネットワーク管理者に対して、データネットワーク上でのIPフローに関するデータを提供 • ネットワーク構成要素(ルータやスイッチ)からフローデータを収集し、コレクタにエクスポートする • 柔軟かつ詳細な計測結果を提供する 管理者 ネットワーク 構成要素 Netflowコレクタ

  3. 概要 • フローとは • ネットワーク機器を通過した、ある共通した特性を持つ単一方向のパケットの列 • IPアドレス、パケット数、バイト数、タイムスタンプ、ToS(Type of Service)、アプリケーションが使用するポート番号、入出力インターフェースなど

  4. 準備 • フロー抽出のタイミング • エクスポーターがフローの終わりを検出した場合 • TCPコネクションのFINもしくはRSTbitの検出など • フローが一定時間非アクティブだった場合 • 一定時間パケットが観測されなかったフロー • 長寿命のフローに関して、一定時間毎に抽出 • タイムアウト時間は設定可能 • エクスポーターに何かしらの内部的な制約が発生した場合 • メモリ不足やカウンターが折り返してしまう場合

  5. NetFlow export version 9 • バージョン9は、エクスポートフォーマットにテンプレートを使用している • IPパケットのフローを柔軟性が高く、拡張性に富んだ方法で観測することができる • エクスポートする情報のフォーマットの構造を変更せずに、新しいフィールドをNetFlowのレコードに追加できる • 必要なデータのみをエクスポートできるので、ネットワーク負荷を軽減できる

  6. 準備 • エクスポートされるフローセットの種類 • データ・フローセット • フローデータ・レコード • エクスポートされたフローのデータ部分 • オプション・データ・レコード • NetFlowの処理設定など、フロー以外の要求された情報 • テンプレート・フローセット • 何をエクスポートするのかを定義したフローセット • オプション・テンプレート・フローセット • 何をエクスポートするのかを定義したフローセット • フロー自体ではなく、NetFlowの処理設定や処理固有のデータを提供するために利用される

  7. フローセットの種類

  8. NetFlowのやり取り テンプレート フローセット データ フローセット コレクター エクスポーター これから送信するエクスポートデータの フォーマットを送信する テンプレート フローセット データ フローセット フローデータ 受け取ったデータフローセットの テンプレートは、コレクター側で保持 エクスポーターは、データ・フローセットを送信する コレクターは、 送られてきたデータ・フローセットと 過去に受け取ったテンプレートを比較 (それぞれのフローセットのIDを利用) テンプレートがあれば、 フローデータを作成できる

  9. エクスポートパケット • エクスポートパケットは、ヘッダに続く1つ以上のフローセットから構成される • テンプレート、データ、オプションテンプレートのいずれか • フローセットにはそのフローセットのタイプを識別するためにIDが割り振られている • IDが256より小さいものは、テンプレートやオプションといった特別なフローセットのために予約されている パケット ヘッダ テンプレート フローセット データ フローセット オプション テンプレート フローセット ・・・・・・

  10. エクスポートパケット • テンプレート、データ、オプションテンプレートが入り混じっている場合 • 新しく作られたテンプレートを、できる限り早くエクスポートするケース • テンプレートやオプションテンプレートがスペース上の都合により、入り混じって配置されていく パケット ヘッダ テンプレート フローセット データ フローセット データ フローセット オプション テンプレート フローセット ・・・・・・

  11. エクスポートパケット • データパケットのみにより構成 • 適切なテンプレートレコードが定義され、Netflowコレクター機器に送信された後 • 大部分のエクスポートパケットはデータフローセットのみで構成される パケット ヘッダ データ フローセット データ フローセット データ フローセット ・・・・ ・・・・ ・・・・ ・・・・

  12. エクスポートパケット • テンプレート、及びオプションテンプレートのみで構成 • エクスポーターは、テンプレート、及びオプションテンプレートを含むパケットを定期的にNetFlowコレクターに送信する • フローデータレコードの正しい定義を保持するために行われる パケット ヘッダ テンプレート フローセット オプション テンプレート フローセット テンプレート フローセット ・・・ ・・・

  13. パケット・フォーマット パケットヘッダのフォーマット

  14. パケットフォーマット • バージョン情報 • エクスポートに使用されているフローレコードフォーマットのバージョン番号 • 最新のバージョンは9 • カウント • エクスポート・パケットに含まれるレコード数 • オプション・フローセット・レコード、テンプレート・フローセット・レコード、データ・フローセット・レコードの合計数 • sysUpTime • 機器がブートしてから経過した時間をミリ秒で示したもの

  15. パケットフォーマット • UNIX Secs • エクスポートパケットがエクスポーターから創出された時刻を “0000 UTC 1970” を起点とした経過秒数で示したもの • シーケンス番号 • エクスポーターが観測ドメインから送信した全てのエクスポートパケットにつけられたシーケンス番号(昇順) • コレクターがエクスポートパケットの取りこぼしが無いか判断するときに使用 • ソースID • 観測ドメインを特定するための32bitの値 • コレクターは、ソースIDと送信元IPアドレスの組み合わせで、異なるエクスポートストリームを区別する

  16. テンプレート・フローセット テンプレート・フローセットのフォーマット

  17. テンプレート・フローセット • フローセットID • テンプレート・フローセットはID=0が割り振られている • 長さ • フローセット全体の長さ • テンプレートフローセットの数が可変であるため、記述しなければならない • テンプレートID • テンプレートレコードに割り振られる、一意なテンプレートID • 生成した観測ドメイン内で、一意性は保障される • IDは、0~255まではテンプレートフローセット、オプション・フローセット、及び将来定義されるフローセットのために予約

  18. テンプレート・フローセット • フィールド数 • テンプレートレコードに含まれるフィールド数 • この値から、次のテンプレートレコードまでの区切りを判断する • フィールドタイプ • フィールドのタイプを表す数値 • フィールド長 • フィールドのタイプに対応した、バイト数を示す

  19. データ・フローセット データ・フローセットのフォーマット

  20. データ・フローセット • フローセットID • フローセットごとにIDが割り振られている • このフローセットが流れる以前に生成されているテンプレートIDと対応付けられている • 長さ • 本フローセットに含まれる全てのフローレコードの長さ • レコード N – フィールド値 M • フローデータ・レコードの並び • N個のフローレコードと、テンプレートIDで示されたフィールドのタイプと数のデータを含む • パディング • 4バイトごとに区切られるように、0で埋められたパディング

  21. データ・フローセット オプション・テンプレート・フローセットのフォーマット

  22. データ・フローセット • フローセットID • オプション・テンプレートには ID = 1 が予約 • 長さ • オプション・テンプレート・フローセット全部の長さ • テンプレートID • 256以上の値が入っており、このオプション・テンプレートのIDを示す • オプション・スコープ長 • オプション・テンプレート・レコードに含まれているスコープ・フィールドの長さ

  23. データ・フローセット • オプション長 • オプション・テンプレート・レコード中のフィールド定義のバイト数 • スコープN フィールドタイプ • オプション・テンプレート・レコードが示しているエクスポーターやNetFlow処理部の指定 • スコープ・フィールドは必ずオプションフィールドの前に来る 1 : システム 2 : インターフェース 3 : ラインカード 4 : キャッシュ 5 : テンプレート

  24. データ・フローセット • スコープN フィールド長 • スコープ・フィールドのバイト長 • オプションM フィールド・タイプ • オプション・テンプレートの中にフィールドの型を指定 • オプションM フィールド長 • オプションフィールドのバイト長 • パディング • 4バイトごとの境界で区切れるように0でパディング

  25. オプション・フローセット データ・フローセット・フィールドの オプション・データ・レコードの説明

  26. オプション・フローセット • フローセットID • データフローセットに対応するテンプレートのID • 長さ • このフローセット全体の長さ • レコードN – オプション・フィールド値 • スコープとオプションフィールド値の長さや種類は、テンプレートにより定義されており、そのデータ部分 • パディング

  27. オプション・フローセット

  28. テンプレートの管理 • テンプレートの管理 • テンプレート・レコードとフローデータ・レコードは同じエクスポートパケットに表れてもよい • 必ずしもエクスポートパケットはテンプレートレコードを含む必要はないが、コレクタはテンプレートレコードを保持しなければならない • テンプレートがないと、フローデータを解釈できない • エクスポーター側で何か変更(再起動や時計の変更)がなされた場合は、既存のテンプレートは全て破棄する • 新しいテンプレートレコードには、未使用のテンプレートIDがふられる

  29. エクスポーターの動作 • 次の場合に(オプション)テンプレートが送信される • NetFlow処理部分が再起動した場合 • データ・フローセットと同時か、またそれ以前にテンプレート・フローセットを送信しなければならない • 設定が変更された場合 • できる限り速やかにテンプレート・フローセットを送信する必要がある 早急にテンプレートを送信しなければならないため、 この2つの場合はデータ・フローセットを含まずに パケットをエクスポートしてもよい

  30. エクスポーターの動作 • テンプレート情報のリフレッシュ • 定期的に全ての(オプション)テンプレート・レコードを送信しなければならない • テンプレートには、一定の寿命を設定する • 一定個数のエクスポートパケット毎 • 時間ベースの寿命(○○分毎) • 時刻設定の変更時 • できる限りすばやくテンプレート定義を送信する必要がある

  31. コレクタ側の動作 • コレクタ側の動作 • テンプレートが無いフローレコードを受け取った場合 • 保存しておき、テンプレートが届き次第デコードを行う • エクスポーターで時刻の設定が変更になった時 • そのエクスポーターに関連するテンプレートを全て破棄する必要がある • 新しいテンプレートを受け取った場合 • ただちに過去のテンプレートを上書きする

  32. セキュリティ上の考慮点 • NetFlow v9は、エクスポーターとコレクターが単一のプライベートネットワーク上に存在すると過程 • 秘匿性や整合性、認証といった要求はプロトコルに課されていない • 現在、IPFIX(IP Flow Information eXport) というプロトコルが開発されている • NetFlow v9 のセキュリティ上の問題を考慮しているプロトコル • RFC3917参照

  33. 疑問点 • いくつかデータ長が可変のものがあったが、受信の際にサイズが違ったらどうなるのか? • 送信元MACアドレスは6バイト、など • エクスポーター側で時間設定が変更された場合、関連するテンプレートは全て破棄する必要がある • コレクターはそのタイミングをどうやって知るのか?

  34. 使用したプログラム • nfdump-1.5.2 • NetFlow のversion 5,7,9に対応 • NetFlowコレクタ • netflow_v9.c(nftdumpのnetflowのヴァージョン9への対応が書かれている部分)

  35. データ長が違う場合は? • タイプごとに設定はされているが、テンプレートにデータ長も載せるため、別に違ってもそのまま受け付ける • 可変長のデータと、固定長のデータの扱いに差は無い 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;

  36. 参考にしたプログラム • エクスポーター側から送信される、時間に関するデータは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;

  37. テンプレートのリフレッシュ • では、テンプレートのリフレッシュのタイミングは? • エクスポートパケット数と時間の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 ・・・ ・・・

  38. テンプレートのリフレッシュ • エクスポーター側で時間設定が変更された場合、関連するテンプレートは全て破棄する必要がある • これは、テンプレート情報(エクスポーターIDや観測ドメイン情報など)を更新できるようにするため、とRFCには書かれている • エクスポーターIDの更新は、テンプレートを受け取る時(のみ)に毎回行われている

  39. テンプレートのリフレッシュ 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やテンプレートのテーブル を保存、追加している この関数が使われているのはこの部分のみ

  40. 結論 • 可変長のフローセットでなくても、データ長は変更できる • コレクタ側は、エクスポートさせるデータの意味を知る必要はない(数値だけであれば、受け取ることができる) • 時刻変更がされても、エクスポーター側でテーブルの変更はされない • 更新はテンプレートを受け取る際に行われ続けている上、指定された時間を過ぎたテーブルは使用されないため、問題は無い

More Related