NetFlowとは、1996年にシスコシステムズによって開発された、IPトラフィック情報を収集するための
ネットワーク・プロトコルです。
NetFlowは、トラフィック監視の業界基準となり、様々なプラットフォームで使用されています。
SNMP | NetFlow(他フローを含む) | |
---|---|---|
リソース情報 | ○ | × |
ホスト間情報 | × | ○ |
ネットワーク | × | ○ |
アプリケーション識別 | × | ○ |
【SNMP】
【NetFlow】
NetFlow機能を持つルータやスイッチは、NetFlowを有効にした全てのインタフェースのIPトラフィック統計を収集し、NetFlow情報としてエクスポートすることができます。
NetFlowコレクターは、出力されたNetFlow情報をデータベースに収集することにより、実際にトラフィック解析をする為のレポートを作成します。
ネットワークフローは様々な方法で定義されます。
NetFlow v.5では、フローを識別する7つの要素(フローキー)を全て共有するパケットの一方向シーケンスとして定義しています。
パケットの中の情報(フローキー)が全て同一の場合は、同一のキーとして認識されます。
キーの一部が一つでも異なる場合、別のフローとして認識され異なるフローキーとして作成されます。
このフロー定義は、IPv6でも使用され、また類似する定義は、MPLSやイーサネットフローでも使用されています。
詳細なNetFlow、またはCisco Flexible NetFlowのようなIPFIX実装は、ユーザ定義のフローのキーを許可します。
ルータは、通信が終了したことを認識すると、フローレコードを出力します。通信を終了して、エクスポートするタイミングは以下の4つです。
NetFlow情報は一般的にUDPで出力され、NetFlowコレクターで収集していました。NetFlowを出力するルータ側で、NetFlowの送信先IPアドレスと宛先(送信先)UDPポートを設定する必要があります。
一般的に使われるポートは2055ですが、9555や9995、9025、9026のような他のポートを使用する場合があります。
通常ルータから出力されたNetFlowパケットがネットワーク遅延やパケット破損により中断されると、全てのフローレコードは二度と戻りません。
UDPプロトコルは、データが破損した場合パケットを再送信しません。この事は多くのパケットや、フレキシブル層に情報を搭載することができるNetFlow v.8または、v.9では、大きな問題となります。シングルUDPパケットロスは、いくつかのフロー統計に大きな影響を及ぼします。
そのため、現在のNetFlowの実装では、パケットロスを制御するために、パケットエクスポートには、ストリーム制御転送プロトコル(SCTP) を使用します。
また、NetFlow v.9のテンプレートは、関連するレコードがエクスポートされる前に受信されます。
TCPは送信されるパケットが過度のバッファリングや遅延を起こすのでNetFlowには適していません。
SCTPを使用する際の問題は、SCTPがNetFlowコレクターとNetFlowを出力しているルータ間でSCTPをサポートしている必要がある事です。
もし、ルータが多くのNetFlowコレクターに対応しなければならない、または、故障やメンテナンスのために使用できないルータに、NetFlowコレクターが対応せざるを得ない場合には、パフォーマンスに限界が生じるでしょう。
NetFlowをいくつかの独立したコレクターにエクスポートしなければならない場合、それらは、いつダウンするかもわからないテストサーバである可能性もあるので、SCTPは適さないでしょう。
UDPでは、単純なNetFlowパケットの反復にネットワークタップやL2/L3を使用することが可能です。
シンプルな構成の機器は、必要に応じて、フィルタし、UDPパケットの宛先(送信先)アドレスを変更することもできます。
NetFlow出力は、おおよそ基幹ネットワークリンクのみで使用するので、パケットロスは、ほとんど起こりません。
もし発生した場合は、おそらく、ネットワークとNetFlowコレクター間のリンク上の問題となります。
NetFlowのパケットヘッダーには、以下のものを含みます。
NetFlow出力フォーマットは、フロー内のトラフィックに関する幅広い情報を含まれます。NetFlow v.5 (v.9の次に一般的に使われているバージョンのうちの一つ)は、次のものを含みます。
ICMPフローの場合、発信元ポートはゼロ、および、宛先(送信先)ポート番号フィールドコードICMPメッセージタイプとコード(ポート=ICMPタイプ * 256 + ICMPコード)となります。
発信元と宛先(送信先)自律システム(AS)ナンバーフィールドは、ルータ設定によって、宛先(送信先)AS(ASパスの最後のAS)、またはすぐ隣のAS(ASパスの最初のAS)をレポートすることができます。
しかし、AS機能がサポートされていない、ルートが不明、もしくはBGPによる案内がない、またはローカルASの場合には、ASナンバーは、ゼロと表示されます。それらを見分ける明白な方法はありません。NetFlow v.9は、それらのフィールドをすべて含むことができ、MPLSラベルとIPv6アドレス/ポートのような追加情報も追加可能です。
フローデータを分析することにより、ネットワーク内のトラフィックフローの図面やトラフィック量を可視化することができます。NetFlowレコードフォーマットは、バージョンナンバーを含んでいるので、時間とともに進展しています。Ciscoは、異なるバージョンナンバーの詳細や各バージョンのパケットレイアウトを保存しています。
NetFlowは、通常、NetFlowを含むルータ構成の負荷やエクスポートされたNetFlowレコードの量を制限するために、インタフェース毎に有効にします。
NetFlowは、通常、イングレスIPアドレスによって受信した全てのパケットをキャプチャしますが、パケットがNetFlowによって監視可能な場合には、NetFlowコレクターにはIPフィルタを使用します。NetFlowコレクターによっては、エグレスIPインタフェース上でパケット監視も可能です。
しかし、エグレスを使用する際は注意が必要となります。NetFlowが有効な任意のイングレスインタフェースから、NetFlowが有効な任意のインタフェースへの全フローは、2重でカウントされてしまいます。
その為、フローコレクターによっては、実際の通信量よりも多い値を表示してしまう場合があります。
通常のNetFlowは、インタフェース上で全てのIPパケットを処理するように設計されています。
しかし、いくつかの環境、例えば、インターネットの基幹ルータでは、各パケットや同時発生する大量なフロー毎に追加処理を必要とされるため、ルータのCPU負荷やNDE量が膨大なものになります。
そのため、サンプリング機能を活用する事で、CPU負荷やNDE量を減らす事ができます。現在ではNetFlowを実装している全ての高性能ルータでサンプリングが使用可能です。
ルータ設定によりn (サンプル率)が決まる場合、nからの一つの送信パケットのみが処理されます。サンプリングには、固定レートサンプリングとランダムサンプリングがあります。
全てのインタフェースにおいて、サンプル率は通常同じですが、ルータのインタフェース毎に変更することができます。
NetFlowサンプリングが使用されているときには、NetFlowレコードは、サンプリング効果に応じてNetFlowレコードを調節しなければなりません。特に現在、トラフィック量は、実際に測定したフロー量よりも推量として使用されています。
サンプリング率は、NetFlow v.5(全インタフェースで同じサンプリング率)のヘッダーフィールド、もしくはNetFlow v.9(インタフェース毎のサンプリング率)のオプションレコード内に表示されます
バージョン | 説明 |
---|---|
1 | 初期のバージョン、今では旧式、IPv4(IPmask とAS Numberなし)に限定 |
2 | Cisco内部バージョン、発売なし |
3 | Cisco内部バージョン、発売なし |
4 | Cisco内部バージョン、発売なし |
5 | 最も一般的なバージョン、異なるブランドの多くのルータで使用可能(2014年現在)。ただし、IPv4に限定 |
6 | Ciscoからのサポート終了、カプセル化情報 |
7 | v.5とほぼ同一だが、ソースルータフィールド(TCPフラグ,ToS情報)は含まない。 Cisco Catalyst スイッチ 6500、Cisco 7600 のみで使用 |
8 | 集合フォーム、但し、v.5レコードで既にあった情報のみ(リソースの有効活用のため) |
9 | テンプレートベースで拡張性を考慮したフォーマット(フィールドの追加が簡単に行える)。 多くは、IPv6、MPLS、マルチキャスト、BGPネクストホップのあるIPv4のようなフローをレポートするのに使用 |
IPFIX(v.10) | 別名IPFIX、エンタープライズ確定フィールドタイプのようないくつかの拡張つき IETF標準化NetFlow v.9と変数レングスフィールドから構成される |
NetFlowは、当初Ciscoによって実装され、その後RFC 3954(CiscoシステムズNetFlowサービスエクスポートv.9)に記述されました。
NetFlowプロトコル自身は、インターネットプロトコルフロー情報エクスポート(IPFIX)にその座を奪われました。NetFlow v.9の実装に基づくと、IPFIXは、2008年に出版されたRFC 5101、RFC 5102等のあるIETFスタンダードトラック(標準化過程)です。
Cisco以外のベンダーは、ベンダー毎のルータやスイッチでNetFlowと同等の技術を提供しています。
しかしNetFlowは、Ciscoの商標だと考えられているので、その技術には別の名称が使われることがあります。(実際には、2012年3月よりCiscoの商標リストから外れています。)
ベンダー | 方法 | NetFlowバージョン | 実装 | コメント |
---|---|---|---|---|
Cisco IOS-XR ルータ | CRS、 ASR9000 旧 12000 |
v.5、 v.8、 v.9 |
Line card CPU上でソフトウエアを稼働 | IPv6とMPLSの包括サポート |
Cisco IOSルータ | 10000、 7200、 old7500 |
v.5、 v.8、 v.9 |
ルートプロセッサ上でソフトウエアを稼働 | IPv6 または 現モデルを要するMPLSとIOSのサポート |
Cisco Catalystスイッチ | 7600、 6500、 4500 |
v.5、 v.8、 v.9 |
ACLsにも使用されている、専用のハードウエアTCAM | 高性能モデルRSP720とSup720のIPv6サポート、但し、最大128Kまたは256Kフロー/各PCF card. |
Cisco Nexus スイッチ | 7018、 7010 |
v.5、 v.9 |
ACLsにも使用されている、専用のハードウエアTCAM、最大512Kフローまで。IPv4/IPv6/L2をサポート | MPLSはサポートしていない |
Juniper legacyルータ | M-series、 T-series、 DPCのあるMX-series |
v.5、 v.8 |
ソフトウエアjFlowと呼ばれるルーティングエンジンでソフトウエアを稼働 | IPv6とMPLSはサポートしていない |
M-series、 T-series、 DPCのあるMX-series |
v.5、 v.8、 v.9 |
ハードウエアjFlowまたはsampledとよばれサービスPICでソフトウエアを稼働 | MS-DPC、MultiService-PIC、AS-PIC2でIPv6またはMPLSをサポート | |
Juniperルータ | MPC-3DのあるMX-series、 T4000の後継FPC5 |
v.5、 IPFIX |
inline jFlowと呼ばれるハードウエア(trio chipset) | JUNOS 11.4R2(バックポートターゲット)を要するIPv6、MPLSのサポート不明、12.3まではMPC3Eは含まれていない |
Alcatel-Lucent ルータ | 7750SR | v.5、 v.8、 v.9、 IPFIX |
セントラルプロセッサモジュールでソフトウエアを稼働 | IPv6またはIOM3 line card、もしくはそれ以上を使用しているMPLS |
Huawei ルータ | NE5000E NE40E/X NE80E |
v.5、 v.9 |
service cardでソフトウエアを稼働 | IPv6をサポート、MPLSは不明 |
Enterasys スイッチ | S-Seriesと N-Series |
v.5、 v.9 |
専用のハードウエア | IPv6サポートは不明 |
INVEA-TECH 調査 | FlowMon Probe 1000、 2000、 4000、 6000、 10000、 20000 |
v.5、 v.9、 IPFIX |
ソフトウエアまたは加速されたハードウエア | IPv6とMPLS、wire-speed包括サポート |
Nまたはtelスイッチ | イーサネットルーティング Switch 5500 Series (ERS5510、5520と5530)と8600(Chassis-based) |
v.5、 v.9、 IPFIX |
Line card CPUでソフトウエアを稼働 | IPv6包括サポート |
PCとサーバ | Linux FreeBSD NetBSD OpenBSD |
v.5、 v.9、 IPFIX |
fprobeやipt-netflowまたはpflowのようなソフトウエア | 使用されているソフトウエアによってIPv6サポート |
VMwareサーバ | vSphere 5.x | v.5 | ソフトウエア | IPv6サポートは不明 |
Mikro Tik ルータOS | ルータOS 3.x、 4.x、 5.x |
v.1、 v.5、 v.9 |
ソフトウエアとRouterBoardハードウエア | IPv6サポートは不明 |
Cisco ASA 5580製品に導入されたNetFlowセキュリティイベントロギング(NSEL)は 、高機能環境において、効率的にセキュリティ遠隔測定をするためにNetFlow v.9フィールドとテンプレートを使用します。
NetFlowセキュリティイベントログ(NSEL)測定は、同等レベルでの詳細やログイベントでの粒度を提供している間は、Syslogよりもよりも優れています。
NSELは3つのFlow Statusに基づきフローを生成します。
-Flow creation、teardown及びdenial
※重複するSyslogはdisableを推奨
-NSELトラフィックはMPF(Modular Policy Framework)でフィルタリング可能
2009年10月にCiscoは、NBAR(Network Based Application Recognition)というNetFlowを利用した新しい機能をリリースしました。
NBARはアプリケーションIDを利用して詳細のレポートを作成できます。たとえば「H.323、Telnet、RTP、Skype」などのアプリケーションを認識してNetFlow v.9フィールドのテンプレートを利用してレポート化します。
NetFlowプローブを使用したNetFlowの収集は、ルータとスイッチからフローを収集する選択肢のひとつです。このアプローチは、ルータに基づくNetFlow監視のいくつかの限界を打開します。
NetFlowプローブは、TAPやSPANポート機器を使用している機器のアプライアンスとして、監視ネットワークに接続されます。
NetFlow監視は、ルータに設定をするよりは専用プローブで実行する方が簡単です。しかし、この方法にはいくつかの欠点があります。
上記のような問題に対して最も簡単に対処する方法は、ルータの前にあるパケットキャプチャアプライアンスを使用し、ルータからの全NetFlowをキャプチャすることです。
この方法は、大量のNetFlowデータ(一般的には、長年におよぶ貴重なデータ)を蓄積することができ、そして、ネットワーク再設定をする必要もありません。
専用プローブのNetFlow収集は、犯罪やハッキングなどのトラフィック監視に大変適しています。一方で、ルータのNetFlowは、ネットワークの帯域のレポート化や計算、パフォーマンス監視やセキュリティのために使うことができるトラフィックネットワークの見える化を提供します。
NetFlowは、元々CiscoルータのCiscoパケット交換技術で、1990年ごろIOS 11.xに実装されていました。当初は、Cisco 7000、7200と7500にソフトウエア実装され、当時最新のCisco高速交換の改善だと考えられていました。そのアイデアは、フローの最初のパケットがNetFlow交換レコードを作成するだろうというものでした。
このレコードは、その後、フローが完了するまで、同じフローの全パケットに使用されていました。
フローの最初のパケットだけは、マッチングルートを探すようルートテーブルに調査要求をします。
これは、特に転送情報ベース(FIB)のない旧式では、ソフトウエア実装の高価なオペレーションとなります。
NetFlow交換レコードは、実際、ルートキャッシュレコードのようなもので、IOSの旧バージョンは、現在もIPルートキャッシュとしてNetFlowキャッシュを参照しています。
この技術は、ローカルネットワークには好都合でした。ACLがフローの最初パケットのみを評価しなければならなかったように、ACLがいくつかのトラフィックをフィルタしなければならなかった場合には、特に当てはまりました。
NetFlow交換レコードは、すぐに大きなルータ、特に、基幹インターネットルータには適さなくなりました。
一方で、同時フロー数は、ローカルネットワーク上のものよりも重要でした。そして、いくつかのトラフィックは、ドメイン名システム (DNS)が要求するように、多くの短いフローを発生します。
(セキュリティ理由のためにソースポートは、ランダムです)
フローは、交換技術として、1995年ごろにCisco Express Forwardingに取って代わりました。
最初は、Cisco 12000ルータに載り、のちにCisco 7200とCisco 7500の詳細なIOS上で、NetFlow交換の後継となりました。
2012年時点で、 NetFlow交換に類似する技術は、現在でも、ほとんどのファイアウォールやソフトウエアベースのIPルータで使用されています。
例えば、LinuxでNetfilter構成のconntrack機能を使用していました。
NetFlowやsFlowの設定例を以下にまとめました。
あくまでも設定例となりますので、詳細については各ベンダーのサイトやマニュアルを参照して下さい。
Router (Cisco IOS) - NetFlow v5
Router (Cisco IOS) - Flexible NetFlow
FNF(Flexible NetFlow)の基本は以下の4つのステップです。
【設定例】
Catalyst 2960X - Netflow-lite
参考:こちら
Nexus 3000 sFlow
参考:こちら
Catalyst 4500X Flexible Netflow(w/VSS)
参考:こちら
Switch or Router - sFlow
参考:こちら
Fortigate(FortiOS 5.2.X) - NetFlow v9