Netflow的統計-->使用flow-tools
高雄市教育局 資教中心
網路組組長 張宏明
更新日期:2003/09/07
一、緣由:
Netflow是目前各縣市網路中心用來統計網路使用狀況及病毒或攻擊偵測分析的一個重要工具。在Netflow分析程式方面,要感謝交通大學提供原始碼供各區縣網使用;但原有之分析程式是由perl所撰寫出來的,在使用router的時代尚可使用,但是進入了高頻寬及病毒攻擊的今天,在效能表現上,就顯得力不從心了。以高雄市網而言,在連接兩百多個連線單位之ADSL的Cisco 7513上,每天平常計算一整天netflow量,就耗費了近六個小時才算得完;但是遇到像CordRed及Nimda攻擊的狀況下,每天幾乎算不完。
自從市網骨幹改接Giga線路及開下學校以FastEthernet連線市網後,每天統計全天的Netflow量,均長達十小時左右,若流量在增加的話,用原有的架構,鐵定會很慘的。因此,就開始尋找一個免費替代品—flow-tools。
其實早在兩年前,本中心為了即時能統計出各學校單位的流量分析,以方便學校網管能即時找出佔用頻寬的IP,在效能考量下,老早就把原有之netflow工具,以flow-tools工具替代了;只是因為蔽中心沒有人會寫perl或c類似的程式,統計Netflow的工具仍沿用交大版。但是flow-tools到了0.66版(2003/04/04)加強了flow-nfilter及flow-report兩個命令工具,並啟用定義檔的方式來增加它在分析、統計上的彈性,於是就投入在這兩個小工具上,利用這兩個小工具來做出類似交大Netflow統計程式的功能,並測試其統計時間的長短。
結果,由於其定義檔的功能完整,又是用c寫成的工項,不僅可以做出像交大的功能,並且統計時間由原來的10小時縮短為18分鐘,只不過flow-report只能做出純文字的報表檔,要變成網頁的格式,尚需要另外用perl將純文字報表轉換成html格式。
二、Netflow工具及出處:
Netflow工具的使用,我們採用flow-tools這個套件,管方網站在http://www.splintered.net/sw/flow-tools/,您可直接去下載flow-tools這個工具,自行編譯後即可使用。
三、flow-tools工具架構及簡介:
flow-tools是由十幾個小命令工具所組成的套件,其中幾個主要常用的命令如下:
flow-capture:將Router上傳回的netflow資料流存成檔案。
flow-cat:將存在檔案內的flow資料dump出來以便做後續的動作。
flow-report:將flow資料依定義檔之定義,做成指定格式之報告(目前只支援純文字)。
flow-nfilter:將flow資料依定義檔之定義,過濾出您要的資料以便後續做統計(flow-stat)或顯示(flow-print)。
flow-filter:與flow-nfilte功能一樣,但沒有定義檔,只能對特定的介面或參數作過濾動作,後續的統計仍然需要flow-stat的協助。
fow-print:將flow資料轉換成人們可以解讀的文字資料顯示出來。
其詳之用法,請參考各命令之man page。
四、router的設定:
本段文件主要是以Cisco 6509為主,其它Cisco型號請參考其自身命令之手冊。
因為Cisco 6509本身為Switch及router兩者的集合體,所以netflow資料的導出會分為兩個部份,一個是PFC,另一個是MSFC。
PFC:
mls nde sender version 5 (使用netflow第五版格式)
mls flow ip interface-full (flow紀錄欄位包含進出的介面號碼及詳細完整資料)
mls nde interface
int vlan 11 (縣市網到區網的中華電信介面)
mls netflow sampling (開啟flow取樣功能)
int vlan 21 (縣市網到區網的東森寬頻介面)
mls netflow sampling (開啟flow取樣功能)
MSFC:
int vlan 11 (縣市網到區網的中華電信介面)
ip route-cache flow (開啟紀錄flow功能)
int vlan 21 (縣市網到區網的東森寬頻介面)
ip route-cache flow (開啟紀錄flow功能)
ip flow-export version 5 (使用netflow第五版格式)
ip flow-export destination 163.28.136.200 9991 (將flow資料透過udp 9991傳送給163.28.136.200)
五、安裝flow-tools:
下載flow-tools相關的設定檔及統計轉換程式:
ftp://ftp.kh.edu.tw/pub/APPL/flow-tools/flow-tools-khconfig.tar.gz
解壓縮並tar開來
tar
zxvf flow-toolw-khconfig.tar.gz -C /home
下載flow-tools工具:
ftp://ftp.eng.oar.net/pub/flow-tools/flow-tools-0.66.tar.gz
解壓縮並tar開來
tar
zxvf flow-tools-0.66.tar.gz
進入flow-tools的目錄內
cd
flow-tools-0.66
設定並編譯成執行檔:
./configure
–prefix=/home/flow-tools
make
make install
六、開始從router接收netflow資料:
執行:/home/flow-tools/etc/capture.sh
說明:
capture.sh內容為:
/home/flow-tools/bin/flow-capture -z 9 -n 143 -e 7200 -w /home/flow-tools/logs -N -1 0/0/9991
參數說明:
-z
壓縮率(1-9,9最高)
-n
一天要存成幾個檔案(143就是0-143,所以一天存144個檔,也就是10分鐘存一次檔)
-e
硬碟中最多留存幾個flow紀錄檔案(7200個,
就是五十天,
視硬碟空間而定)
-w
存檔的路徑
-N
檔名的型式(-1,儲存格式為YYYY-MM-DD/flow-file)
0/0/9991
local IP/remote IP/udp通訊port(local及remote
Ip不限,用udp
9991 port傳進來)
七、相關設定檔介紹:
本系統包含四支perl寫成的程式,大部份的工作只是在作文字檔與html檔的轉換工作,實際上的運算,全部交給flow-report來處理。Perl程式放於/home/flow-tools/analysis目錄內,其所需用到的定義檔則全部在/home/flow-tools/etc目錄內。
flow-report的設定檔(定義檔)其實是由三個部份所組成的,最主要的是report主定義檔(如:daily-report.cfg、daily-report-check.cfg及10min-report.cfg)只是定義哪個report要使用那些nfilter定義及要輸出那些欄位、筆數,再配合nfilter的filter定義檔(如:nfilter-10min.cfg及nfilter-daily.cfg)。至於netmask的定義檔(kh-masks.cfg),是因為cisco router上的netflow有缺陷,造成各ip所帶的netmask都不見了,因此利用這個netmask定義檔來重新將所有ip套上正確的netmask,以方便在統計以各學校為單位的各項排行榜report時,直接由netmask來轉換網路號碼,而不用再作額外的轉換統計工作。
茲將本系統使用的程式一一介紹:
每日的各項服務排行榜:
由flowtools-daily.pl這支程式來處理,主要是利用flow-report來處理daily-report.cfg這個定義檔,daily-report.cfg定義中又引入了nfilter-daily.cfg(filter定義)及kn-masks.cfg(netmask定義),將所有定義各項排行榜作成report檔;最後由flowtools-daily.pl的後半段程式,將各項report檔轉成相對應的html檔。
每日各項病毒偵測排行榜:
由flowtools-daily-check.pl這支程式來處理,主要是利用flow-report來處理daily-check-report.cfg這個定義檔,而在daily-check-report.cfg中引入了病毒行為特性的filter檔(nfilter-10min.cfg),將所有各項病毒排行榜作成report檔;最後由flowtools-daily-check.pl的後半段程式,將各項report檔轉成相對應的html檔。
即時各項病毒偵測排行榜:
每十分鐘由flowtools-10min-check.pl這支程式來處理,主要是利用flow-report來處理10min-report.cfg這個定義檔,而在10min-report.cfg中引入了病毒行為特性的filter檔(nfilter-10min.cfg),將所有各項病毒排行榜作成report檔;最後由flowtools-10min-check.pl的後半段程式,將各項report檔轉成相對應的html檔。
由IP查得學校(單位)名稱:
以上三種排行榜中,特別對縣市內網段多加了學校(單位)名稱的欄位,而並不是用domain
name,因此另外寫了一支自動由ip查得學校(單位)名稱的子程式(getschoolbyip.pl)。而這支程式會用到網路號碼及學校名稱的對照表(ip_domain_flow.csv)。
八、設定檔的修改:
因為從router紀錄netflow的介面,最主要在從縣市網對外的兩路Giga線路,所以要使用這些現成的nfilter定義,要先修改進出介面號碼。要特別注意對外的兩路Giga介面,要Layer 3的介面才對,也就是Vlan 11及Vlan 21,而不是實體的gi 3/15及gi 3/16。
至於netmask、nfilter及report的定義檔您可將flow-mask、flow-nfilter、flow-report這三個命令的man page列印出來參考,其內有相當詳細的說明。
修改nfilter-daily.cfg
filter-primitive
door
type ifindex
permit
105,107
其中105及107就是vlan11及vlan21的介面號碼,請依您router的實際狀況修改。
修改nfilter-10min.cfg
filter-primitive
outdoor
type ifindex
permit 105,107
filter-primitive
indoor
type ifindex
deny 105,107
default
permit
以上兩項定義中的105及107就是vlan11及vlan21的介面號碼,請依您router的實際狀況修改。
修改kh-masks.cfg
請依您內部網段實際的分配方式,重新給予正確的netmask定義;要特別注意,愈特殊或網段愈小者,優先定義。
修改ip_domain_flow.csv
依本檔範例,您可利用excel將您管轄連線單位的基本資料逐一輸入,做成對照表,以方便系統查詢。