1. ネットワーク監視やコンフィグ管理ならロジックベイン
  2. 製品情報
  3. Scrutinizer
  4. NetFlowとは?

ネットワークの『見える化』 Scrutinizer フロー監視ツール

ScrutinizerにおけるNetFlowとは?

NetFlowとは、1996年にシスコシステムズによって開発された、IPトラフィック情報を収集するための
ネットワーク・プロトコルです。
NetFlowは、トラフィック監視の業界基準となり、様々なプラットフォームで使用されています。

NetFlowとSNMPの違い

SNMP NetFlow(他フローを含む)
リソース情報 ×
ホスト間情報 ×
ネットワーク ×
アプリケーション識別 ×

【SNMP】

【NetFlow】

プロトコルについて

NetFlow機能を持つルータやスイッチは、NetFlowを有効にした全てのインタフェースのIPトラフィック統計を収集し、NetFlow情報としてエクスポートすることができます。
NetFlowコレクターは、出力されたNetFlow情報をデータベースに収集することにより、実際にトラフィック解析をする為のレポートを作成します。


ネットワークフロー

ネットワークフローは様々な方法で定義されます。
NetFlow v.5では、フローを識別する7つの要素(フローキー)を全て共有するパケットの一方向シーケンスとして定義しています。

  1. 送信元IPアドレス
  2. 宛先IPアドレス
  3. 送信元UDP/TCPポート番号
  4. 宛先UDP/TCPポート番号
  5. IPプロトコル
  6. ToSバイト(DSCP)
  7. 入力インタフェース

パケットの中の情報(フローキー)が全て同一の場合は、同一のキーとして認識されます。
キーの一部が一つでも異なる場合、別のフローとして認識され異なるフローキーとして作成されます。
このフロー定義は、IPv6でも使用され、また類似する定義は、MPLSやイーサネットフローでも使用されています。
詳細なNetFlow、またはCisco Flexible NetFlowのようなIPFIX実装は、ユーザ定義のフローのキーを許可します。

NetFlowレコードのエクスポート

ルータは、通信が終了したことを認識すると、フローレコードを出力します。通信を終了して、エクスポートするタイミングは以下の4つです。

  1. TCPのRSTまたはFINを検出してTCPセッションが終了したとき(通常の通信終了時)
  2. アクティブタイマー※1が設定時間を経過したとき(デフォルト値:30分)
  3. インアクティブタイマー※2が設定時間を経過したとき(デフォルト値:15秒)
  4. NetFlowのキャッシュテーブルが一杯になったとき

NetFlowパケットトランスポートプロトコル

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出力フォーマット

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レコードの量を制限するために、インタフェース毎に有効にします。

NetFlowは、通常、イングレスIPアドレスによって受信した全てのパケットをキャプチャしますが、パケットがNetFlowによって監視可能な場合には、NetFlowコレクターにはIPフィルタを使用します。NetFlowコレクターによっては、エグレスIPインタフェース上でパケット監視も可能です。

しかし、エグレスを使用する際は注意が必要となります。NetFlowが有効な任意のイングレスインタフェースから、NetFlowが有効な任意のインタフェースへの全フローは、2重でカウントされてしまいます。

その為、フローコレクターによっては、実際の通信量よりも多い値を表示してしまう場合があります。

NetFlowサンプリング

通常の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とIPFIX

NetFlowは、当初Ciscoによって実装され、その後RFC 3954(CiscoシステムズNetFlowサービスエクスポートv.9)に記述されました。

NetFlowプロトコル自身は、インターネットプロトコルフロー情報エクスポート(IPFIX)にその座を奪われました。NetFlow v.9の実装に基づくと、IPFIXは、2008年に出版されたRFC 5101、RFC 5102等のあるIETFスタンダードトラック(標準化過程)です。

参照

NetFlowと類似したもの

Cisco以外のベンダーは、ベンダー毎のルータやスイッチでNetFlowと同等の技術を提供しています。
しかしNetFlowは、Ciscoの商標だと考えられているので、その技術には別の名称が使われることがあります。(実際には、2012年3月よりCiscoの商標リストから外れています。)

NetFlowサポート

ベンダー 方法 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 NetFlowセキュリティイベントロギング (NSEL)

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)でフィルタリング可能

Cisco Network Based Application Recognition (NBAR)

2009年10月にCiscoは、NBAR(Network Based Application Recognition)というNetFlowを利用した新しい機能をリリースしました。
NBARはアプリケーションIDを利用して詳細のレポートを作成できます。たとえば「H.323、Telnet、RTP、Skype」などのアプリケーションを認識してNetFlow v.9フィールドのテンプレートを利用してレポート化します。

NetFlowプローブを使用したNetFlow監視

NetFlowプローブを使用したNetFlowの収集は、ルータとスイッチからフローを収集する選択肢のひとつです。このアプローチは、ルータに基づくNetFlow監視のいくつかの限界を打開します。
NetFlowプローブは、TAPやSPANポート機器を使用している機器のアプライアンスとして、監視ネットワークに接続されます。
NetFlow監視は、ルータに設定をするよりは専用プローブで実行する方が簡単です。しかし、この方法にはいくつかの欠点があります。

上記のような問題に対して最も簡単に対処する方法は、ルータの前にあるパケットキャプチャアプライアンスを使用し、ルータからの全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機能を使用していました。

Flowの設定例

NetFlowやsFlowの設定例を以下にまとめました。
あくまでも設定例となりますので、詳細については各ベンダーのサイトやマニュアルを参照して下さい。

Cisco

Router (Cisco IOS) - NetFlow v5

  • router(config)# ip cef
  • router(config)# ip flow-export version 5
  • router(config)# ip flow-export destination
  • router(config)# ip flow-export source FastEthernet0
  • router(config)# ip flow-cache timeout active 1
  • router(config)# ip flow-cache timeout inactive 15
  • router(config)# interface fastEthernet 0/0
  • router(config-if)# ip flow ingress
  • router(config-if)# ip flow egress
  • router(config-if)# end

Router (Cisco IOS) - Flexible NetFlow

FNF(Flexible NetFlow)の基本は以下の4つのステップです。

  • 1.flow recordを作成する
  • 2.flow exporterを作成する
  • 3.flow monitorを作成する
  • 4.作成したflow monitorをインタフェースに適用する

【設定例】

  • router(config)# flow record NetFlow
  • router(config-flow-record)# match ipv4 source address
  • router(config-flow-record)# match ipv4 destination address
  • router(config-flow-record)# match transport tcp source-port
  • router(config-flow-record)# match transport tcp destination-port
  • router(config-flow-record)# match ipv4 protocol
  • router(config-flow-record)# match input interface
  • router(config-flow-record)# match ipv4 tos
  • router(config-flow-record)# match flow direction
  • router(config-flow-record)# collect output interface
  • router(config-flow-record)# collect counter bytes long
  • router(config-flow-record)# collect counter packets long
  • router(config-flow-record)# collect routing source as
  • router(config-flow-record)# collect routing destination as
  • router(config-flow-record)# collect routing next-hop address ipv4
  • router(config-flow-record)# collect transport tcp flags
  • router(config-flow-record)# collect ipv4 dscp
  • router(config-flow-record)# collect ipv4 ttl
  • router(config-flow-record)# collect ipv4 source prefix
  • router(config-flow-record)# collect ipv4 destination prefix
  • router(config-flow-record)# collect transport round-trip-time
  • router(config-flow-record)# collect transport event packet-loss counter
  • router(config-flow-record)# collect timestamp sys-uptime first
  • router(config-flow-record)# collect timestamp sys-uptime last
  • router(config-flow-record)# collect application name
  • !
  • router(config)# flow exporter Export-to-Scrutinizer
  • router(config-flow-exporter)# destination x.x.x.x !Scrutinizer’s ip address
  • router(config-flow-exporter)# source XXXXXXX !interface name
  • router(config-flow-exporter)# transport udp 2055
  • router(config-flow-exporter)# template data timeout 60
  • router(config-flow-exporter)# option interface-table
  • router(config-flow-exporter)# option application-table
  • !
  • router(config)# flow monitor Scrutinizer-monitor
  • router(config-flow-monitor)# record NetFlow
  • router(config-flow-monitor)# exporter Export-to-Scrutinizer
  • router(config-flow-monitor)# cache timeout active 60
  • !
  • router(config)# interface XXXXXX !interface name
  • router(config-if)# ip flow monitor Scrutinizer-monitor input
  • router(config-if)# ip flow monitor Scrutinizer-monitor output

Catalyst 2960X - Netflow-lite

  • Switch(config)# flow exporter export1
  • Switch(config-flow-exporter)# destination
  • Switch(config-flow-exporter)# transport udp2055
  • Switch(config-flow-exporter)# template data timeout 60
  • Switch(config-flow-exporter)# exit
  • Switch(config)# flow record record1
  • Switch(config-flow-record)# match ipv4 source address
  • Switch(config-flow-record)# match ipv4 destination address
  • Switch(config-flow-record)# match ipv4 protocol
  • Switch(config-flow-record)# match transport source-port
  • Switch(config-flow-record)# match transport destination-port
  • Switch(config-flow-record)# collect counter bytes long
  • Switch(config-flow-record)# collect counter packets long
  • Switch(config-flow-record)# collect timestamp sys-uptime first
  • Switch(config-flow-record)# collect timestamp sys-uptime last
  • Switch(config-flow-record)# exit
  • Switch(config)# sampler SampleTest
  • Switch(config-sampler)# mode random 1 out-of100
  • Switch(config-sampler)# exit
  • Switch(config)# flow monitor monitor1
  • Switch(config-flow-monitor)# cache timeout active 300
  • Switch(config-flow-monitor)# cache timeout inactive 120
  • Switch(config-flow-monitor)# record record1
  • Switch(config-flow-monitor)# exporter export1
  • Switch(config-flow-monitor)# exit
  • Switch(config)# interface GigabitEthernet1/0/1
  • Switch(config-if)# ipflow monitor monitor1 sampler SampleTestinput
  • Switch(config-if)# end

参考:こちら

Nexus 3000 sFlow

  • feature sflow
  • sflowsampling-rate 5000
  • sflowmax-sampled-size 200
  • sflowcounter-poll-interval 100
  • sflowmax-datagram-size 2000
  • sflowcollector-ip vrfmanagement
  • sflowcollector-port 7000
  • sflowagent-ip 192.0.2.3
  • sflowdata-source interface ethernet1/5

参考:こちら

Catalyst 4500X Flexible Netflow(w/VSS)

  • flow exporter e1
  • destination
  • !
  • flow record r1
  • match ipv4 source address
  • match ipv4 destination address
  • collect counter bytes long
  • collect counter packets long
  • collect timestamp sys-uptime first
  • collect timestamp sys-uptime last
  • !
  • flow monitor m1
  • record r1
  • exporter e1
  • cache timeout active 60
  • cache timeout inactive 30
  • cache entries 1000
  • ip flow monitor m1 layer2-switched input
  • interface GigabitEthernet2/3/2
  • ip flow monitor m1 input

参考:こちら

Juniper

Switch or Router - sFlow

  • [edit protocols sflow]
  • user@switch# set collector
  • user@switch# set collector udp-port
  • user@switch# set interfaces interface-name
  • user@switch# set polling-interval seconds
  • user@switch# set sample-rate number

  • [edit protocols sflow interfaces]
  • user@switch# set polling-interval seconds
  • user@switch# set sample-rate number

参考:こちら

Fortinet

Fortigate(FortiOS 5.2.X) - NetFlow v9

  • config system netflow
  • set collector-ip
  • set collector-port set source-ip
  • set active-flow-timeout 1
  • set inactive-flow-timeout 15
  • config system interface
  • edit
  • set netflow-sampler {disable | tx | rx | both}
  • end
  • end