ASA NetFlow NSELの集計

  • ベータ版だが, 正しい集計値が出ないためnfdump-1.6.14-b2を使用.
  • ASA側の設定
    • flow-export destination コレクタのいるインターフェース コレクタのIP コレクタのポート
    • flow-export template timeout-rate 1
      • NetFlow v9 のテンプレートを送信するタイミング. コレクタに早期にフォーマットを理解させるため,タイムアウトを短くしている.
    • flow-export active refresh-interval 1
      • UPDATEの出力されるタイミング. 1は最小値
    • クラス定義 class-map flow_export は match any を設定. 全ての通信を対象に集計する.
    • policy-map global_policy 内のクラス指定 class flow_export は flow-export event-type all destination でコレクタのIP を指定
    • service-policy global_policy global でポリシーを割り当て.
  • nfcapd を起動する. nfcapd -b 待ち受けIP -4 -l ログディレクトリ -S 2 -T all -t 300 -w 2>&1
    • ログディレクトリ以下で -S 2 を指定することにより, 年月日時のディレクトリが作られ, ログファイルが格納される. -tはローテーション間隔, -wはローテーション間隔への整列.
    • 指定がないとポート番号は9995
  • nfdumpによりログを集計する
    • nfdump -a -N -q -R $dir -o 'fmt:%ts %te %sa %da %pr %sp %dp %ibyt %obyt %td %in %out %nfc %xsa %xda %xsp %xdp' '( asa event 1 ) or ( asa event 5 )'
    • -aが集計, -Nが数値をM,Gなどの単位にせずそのまま出力, -Rがログを収納したディレクトリ, -o fmt:がログの出力フォーマット
    • フィルタasa event 5でASAのNSEL出力のうち,CREATE と UPDATEを対象にする.
    • %bytは%ibytと同じ, %ibyt %obytの集計ではない.
    • byt の値はフィルタの要件として使用できるが, ibyt obytはできない. bytes 0 は ibytが0 と同じ.
    • %出力はスペースでパディングされている.
    • %nfc はコネクション番号, %x?? はNAT変換後のアドレス.NSELに固有の指定.
    • DELETEを対象に入れると, 最終集計であるDELETE出力と中間集計であるUPDATE出力が重複し, 通信量が倍近くカウントされてしまう.
    • CREATE,DELETEのみを対象にしてしまうと, 通信終了時にまとめて集計結果がカウントされるため, 通信量が終了時に偏り正確に出ない.
    • syslogにはDELETEの結果しか報告されない. syslog level 6(infomational)以下の設定でないと報告自体が出ない.
    • ヘッダ情報はバイト数としてカウントされていないため, キャプチャした場合より少ない量になる.
    • NSELにパケット数の項目はない.
    • CREATEのバイト数のカウントはすべて0. 開始時刻の正確性向上のため集計に繰り入れている.
    • 全てのレコードのfirst,lastの時刻は同じ値. 最初と最後のパケットの到達時間ではない. CREATEとDELETEのfirst,lastも全て同じ値.
    • durationはレコード時刻の差を取っているため, 短い時間の通信時間が正確に測定されていない.
      • %msec というNSEL拡張のイベント発生時間の差を取った方が正確か?
    • 送受信0バイトのUPDATEレコードが,実際の通信終了よりもかなり遅れて記録されることがある. DELETEと同時に来るものらしい.
    • 通信終了の理由などは拡張イベントとして%xevtの値で設定されるらしい. 2000以上が終了コードで, 奇数ばかりだが, Ciscoの文書でも記述が省略されている.
    • UPDATEのバイト数に4GB近い異常な値が出ることがある. このときibyt+obytは 4294967295 = 2^32-1になっている. DELETEイベント後にDENYイベント(No SYN)が起きるときの現象?