はじめに
こんにちは。ネットワークエンジニアの「だいまる」です。
今回は、CCNPの勉強の続きでNETFLOWについてまとめていきたいと思います。
NETFLOWはネットワーク運用・保守の基本となるものだと思うので、以下に参考となる教材も記載させていただきます。
Netflowとは
Netflowとは、ルータを通過するパケットをキャプチャし、IPアドレスやポート番号、L3プロトコルなどの複数の情報からフローを分析する機能となります。
この記事を書く上で色々調べた時に知ったのが、今まで私が思っていたNetflowは「Flexible Netflow」であり、元々のNetflowは若干違うものだったみたいです。
今回は「Netflow」と「Flexible Netflow」の2つをまとめていきます。
Netflow
まず、Netflowについてまとめていきますが、一般的なNetflowの処理フローは全3ステップとなります。
Netflowの処理フローは全部で3ステップ
同一フローの判定にはIPアドレス、ポート番号、L3プロトコル、ToS、入力IFの情報を基に判断されます。
- Netflowキャッシュとは?
-
→Netflowのフローデータをある程度貯めておく機能
存在する場合:キャッシュ情報を更新
存在しない場合:新規エントリーを作成
- NDEサーバとは?
-
→NDE(Netflow Data Exporter)の名前の通り、Netflowのデータ出力先となるサーバ
キャッシュタイマの種類は3つ
また、Netflowキャッシュタイマはそれぞれデフォルト値が存在し、タイムアウトもしくはキャッシュテーブルが満杯になった場合は、UDP通信を利用してNDEサーバに出力されるようです。
- インアクティブタイマー(Default:15秒)
- 同一フローの通信が存在しなくなった時にカウント開始されるタイマ
- アクティブタイマー(Defaul:30分)
- 同一フローの有無に関係なく、エントリが作成された時に開始されるタイマ
- Netflowキャッシュテーブルが満杯になった時やTCPセッションが終了した時(タイマ関係ない)
基本的な設定方法(Cisco IOS)
最低限の設定は以下の5行です。
interface配下でingress or egressを指定し、取得フローの方向(TX/RX)を決めます。
(config)# interface <IF名>
(config-if)# ip flow [ingress | egress]
取得フローの方向を決めた後は、NDEサーバへの出力設定を行います。
バージョン設定や出力先のアドレス・ポート番号はサーバ側の設定に合わせる必要があります。
(config)# ip flow-export version [1|5|9]
(config)# ip flow-export destination <出力先のアドレス> <出力先のポート番号>
(config)# ip flow-export source <送信元IF名>
オプション(キャッシュチューニング・Top Talker)
ここからはキャッシュのチューニング等のオプションコマンドとなります。
(config)# ip flow-cache entries <値> ※デフォルト値:64536
(config)# ip flow-cache timeout active <時間(分)>
(config)# ip flow-cache timeout inactive <時間(秒)>
「ip flow-cache entries <値>」は、キャッシュできるエントリ数を指定します。
「ip flow-cache timeout active <時間(分)>」は、アクティブタイマの設定変更を行います。
「ip flow-cache inactive <時間(秒)>」は、インアクティブタイマの設定変更のコマンドとなります。
最後に、指定した条件によるランキング上位のフローを表示するTop Talkerの設定となります。
(config)# ip flow-top-talkers
(config-flow-top-talkers)# top <値>
(config-flow-top-talkers)# sort-by bytes
(config-flow-top-talkers)# cache-timeout <値>
※その他、様々な条件指定が可能(実機で確認してみてください)
「top <値>」は、ソートしたパケットの中で上位<値>数のフローを出力する設定となります。
Flexible Netflow
Netflowの次は、「Flexbile Netflow」です。
この機能はNetflowよりもフローの詳細情報を取得することが可能となります。
収集フローの条件指定を行うRecord
Recordは、フロー識別条件の設定となります。
matchコマンドで送信元/宛先IPアドレスやVLAN ID、プロトコルを指定し、フローの識別を行います。
また、Collectコマンドでパケットのカウンタやタイムスタンプ、IFの指定を行うことでより細かい識別条件を指定することができます。
(config)# flow record <レコード名>
(config-flow-record)# match [ ipv4 | ipv6 ] [ destination | souce ] (アドレス)
(config-flow-record)# match datalink [ destination-vlan-id | dot1q |ethertype | mac | source-vlan-id ]
(config-flow-record)# match transport [ icmp | igmp | source-port | destination-port | tcp | udp ]
(config-flow-record)# collect counter [ bytes [ exported | long ] flows [ exported ] | packets ] [ exported | long ]
(config-flow-record)# collect timestamp sys-uptime [ first | last ]
(config-flow-record)# collect interface [ input | output ] snmp
Exporterの設定
Exporterは、フロー情報の出力先や出力データの制御を行う設定となります。
(config)# flow exporter <エクスポータ名>
(config-flow-exporter)# destination <アドレス> [ vrf <VRF名> ]
(config-flow-exporter)# dscp (DSCP値)
(config-flow-exporter)# source < IF名 > ※送信元となるIFの指定
(config-flow-exporter)# option [ exporter-stats | interface-table | sampler-table] [ timeout (秒数) ]
(config-flow-exporter)# template data timeout <秒数> (デフォルト:600秒 / 指定範囲:1~86400)
(config-flow-exporter)# ttl <TTL値> (デフォルト:255)
(config-flow-exporter)# transport udp <ポート番号>
Monitorの設定
MonitorはRecordの指定とCacheタイマの設定、Exporterの指定を行います。
(config)# flow monitor <モニタ名>
(config-flow-monitor)# record <レコード名> ※設定したレコード名
(config-flow-monitor)# cache [ timeout active <秒数> | type normal ]
・timeout active:アクティブタイマーの秒数指定(デフォルト:1800秒)
・type normal:通常フローの削除設定
(config-flow-monitor)# exporter <エクスポート名>
Samplerの設定
Samplerはエクスポータに出力するデータ量や取捨選択の指定を行います。
全トラフィックを分析対象とする場合、大量データの処理によるルータの負荷増大がパケットドロップなどに繋がる可能性があります。
そのため、リソースの有効活用やルータの負荷軽減のためにSamplerの設定を行う必要があります。
(config)# sample <サンプル名>
(config-sampler)# mode random [ deterministic | random ] 1 out-of < rate >
・deterministic:ランダムではないトラフィックの選出
・random:ランダムでトラフィックを選出
・1 out-of < rate >:1/rateのトラフィック量をサンプリング
IFへのMonitorとSamplingの適用
最後に今まで作成・投入した設定をIFに適用します。
(config)# interface <IF名> ※Flexible Netflowを適用するIF名を指定
(config-if)# [ ip | ipv6 ] flow monitor <モニタ名> [ multicast | sampler <サンプル名> | unicast ] [ input | output ]
IFへの適用を終え、初めてルータ側での設定が完了します。
最後に
今回は、ネットワーク運用・保守やセキュリティで必要となるNetflowやFlexbile Netflowについてまとめました。
個人の環境にもいずれ、Netflowを導入し分析したいと思っていますが、ルータの購入にはまだ時間がかかりそうです