星期四, 2月 22, 2007

如何建置NetFlow Server


1.安裝OS、規劃HD

請參考交大Netflow文件來選擇所需的硬體,流量大的單位所需的硬碟會比較大,最好規劃用raid卡或soft raid來做,讓/netflow這個partition大一點,免得日後硬碟空間不足。因為台南市網的流量並不是太大,所以規劃/netflow1放原始資料,/netflow2放統計後的網頁資料,各18GB。

OS是FreeBSD或Linux應該都可以,台南市網用的是FreeBSD-4.3Release

2.安裝zlib

請:http://www.gzip.org/zlib/
抓回最新版的zlib-1.1.4 [註]zlib-1.1.3以前的版本有安全問題,務必要更新
放在/usr/local/src
tar zxvf zlib-1.1.4.tar.gz
cd zlib-1.1.4
./configure
make
make install


3.安裝flow

交大Netflow文件的flow.tgz在不同版本的gcc編譯時可能會出問題,楊子翔先生修改Makefile,改包成flow-nctu.tgz,才能順利編譯。

抓回flow-nctu.tgz
放在/usr/local/src
tar zxvf flow-nctu.tgz
cd flow
make clean
make i386-bsdi
./flow-capture -z 6 -n 143 -e 1500 -p 9991 -w /netflow1 &

[參數說明] -z 壓縮比例 -n 每日留存幾份 -e 總共留存幾份在硬碟 -p PORT 為何 -w 存在哪裡

壓縮率 6 就差不多了,設定更高的參數不見得可以多壓多少,一天留 144 份,也就是每十分鐘 rotate 一次 log file,方便我們做細部的統計,一共留存 1500 份,也就是十天左右,最後就是所有的 log file 都放在 /netflow1

重新開機時要自動啟動flow-capture,在/etc/rc.local加
/usr/local/src/flow/flow-capture -z 6 -n 143 -e 1500 -p 9991 -w /netflow1 &

接下來telnet到路由器(cisco7513),進config去啟動flow-export:
(config)#ip cef distributed 啟動Cisco Express Forwarding
(config)#interface ATM5/0/0 設定要Enable fast-switching cache for outgoing packets的介面
(config-if)#ip route-cache flow
(config-if)#interface FastEthernet0/0/0
(config-if)#ip route-cache flow
(config-if)#exit
(config)#ip flow-export destination your_netflow_server_IP 9991 指定接收flow主機IP
[註]預設送出的flow資訊是version 1;執行#sh ip cache flow可以查看NetFlow switching statistics
順利的話,這時就可以看到/netflow1有rawflow.月-日-年.xxx之類的檔案

用flow-print將該檔案轉成文字檔test來看,例如:
/usr/local/src/flow/flow-print < /netflow1/rawflow.06-04-101.51 > /netflow2/test

會發現第一個欄位(source int)和第三個欄位(destination int)都只有二位數,造成136=13,138也=13之類的錯誤。

縣市網的下游連線單位很多,interface number應該會超過100以上才對,因此必須去修改flow-print,讓sif和dif這兩個欄位為四位數

修改/usr/local/src/flow/flow-print.c中flow_print0段,將
printf("%-2.2s %-15.15s %-2.2s %-15.15s %-2.2s %-6.6s %-6.6s %-10lu %-10lu\n"
改為
printf("%-4.4s %-15.15s %-4.4s %-15.15s %-2.2s %-6.6s %-6.6s %-10lu %-10lu\n"

改好之後,重新編譯一次
make clean
make i386-bsdi

再執行
/usr/local/src/flow/flow-print < /netflow1/rawflow.06-04-101.51 > /netflow2/test2
就可以看到sif dif都是四位數了

4.查interface number

設定router的snmp community
預設的community是public,建議修改,並加上存取限制,只允許區域網路存取
TN_7513(config)#access-list 1 permit 163.26.1.0 0.0.0.255
TN_7513(config)#access-list 1 deny any
TN_7513(config)#no snmp-server community public RO
TN_7513(config)#snmp-server community your_community ro 1

安裝ucd-snmp
pkg_add ucd-snmp-4.1.2.tgz
/usr/local/bin/snmpwalk router_IP router_community interfaces.ifTable.ifEntry.ifDescr
就可以看到interface number值

其實在windows下用getif程式來取得router的interface number非常方便,建議使用getif來取得您所需要的資料。

以台南市網為例:
接成大區網的sub interface(atm5/0/0.99),其interface number是136
市網中心的區域網路(FastEthernet0/0/0),其interface number是1

5.修改統計分析程式

縣市網的網路環境比較單純,大部份都只有一個往區網的出口,因此可以拿交大分享的isp.tgz來修改即可。以下以台南市網各連線單位進出成大區網為例,修改重點是:

(1)"IN"代表從TANet流入各單位;"OUT"代表各單位流出到TANet。
(2)台南市網各單位使用news的量並不大,因此將news的統計改為統計proxy。
(3)為了避免瀏覽器無法直接將.gz檔展開,html檔都不執行壓縮,是否會造成硬碟空間不足,尚待觀察。

tar zxvf isp.tgz
tar開之後,netflow目錄內的程式就是所需的分析程式
cp netflow/* /home/analyzer
cd /home/analyzer
cp netflow.pl tanet-netflow.pl
cp isp-daily.pl tanet-daily.pl

修改tanet-netflow.pl
sub chkInOutNetwork {
if ( $sif == 136 && $dif != 136 ) {
&update_rec("TANet", "IN");
}
elsif ( $sif != 136 && $dif == 136 ) {
&update_rec("TANet", "OUT");
}
else {
}
}


修改tanet-daily.pl

#!/usr/bin/perl

$dir = "/home/analyzer";
$rawdir = "/netflow1";
$flowprint = "/usr/local/src/flow/flow-print";
$outputdir = "/netflow2/TANet";
$htmldir = sprintf ("%s/html/%02d%02d%02d", $outputdir, $year, $mon, $mday);
$textdir = sprintf ("%s/text", $outputdir);
$rawoutput = sprintf ("%s/raw", $outputdir);
$TopN = 100;

require "$dir/tanet-netflow.pl";

$file = sprintf ("rawflow.%02d-%02d-%02d", $mon, $mday, $year);

$sif = substr($_, 0, index($_, ' ', 0));
$src = substr($_, 6, index($_, ' ', 6) - 6);
$dif = substr($_, 23, index($_, ' ', 23) - 23);
$dst = substr($_, 29, index($_, ' ', 29) - 29);
$proto = substr($_, 45, index($_, ' ', 45) - 45);
$sp = substr($_, 48, index($_, ' ', 48) - 48);
$dp = substr($_, 55, index($_, ' ', 55) - 55);
$pkts = substr($_, 62, index($_, ' ', 62) - 62);
$size = substr($_, 73, index($_, ' ', 73) - 73);

# system("/usr/bin/gzip $htmldir/summary.html");

# system("/usr/bin/gzip $htmldir/$html");

# system("/usr/bin/gzip $file");

# system("/usr/bin/gzip $file");

並把所有的ISP改為TANet,所有Internet改為School,
news改為proxy,119改為3128


建目錄
mkdir /netflow2/TANet
mkdir /netflow2/TANet/html
mkdir /netflow2/TANet/raw
mkdir /netflow2/TANet/text

然後定時執行統計程式(crontab -e)加上
10 0 * * * /home/analyzer/tanet-daily.pl

就能產生所要的各個統計結果的html檔案。

6.安裝apache web server

cd /usr/local/src
tar zxvf apache_1.3.28.tar.gz
cd apache_1.3.28
./configure
make
make install
這時就會將apache裝在/usr/local/apache,接著修改/usr/local/apache/conf/httpd.conf,
將首頁的目錄改到/netflow2
DocumentRoot "/netflow2"


DirectoryIndex index.html


開機時自動啟動apache
修改/etc/rc.local加上
/usr/local/apache/bin/apachectl start

7.建立單日統計查詢網頁

統計分析桯式跑完之後,得到的結果是一堆html檔案,為了方便查詢,台南市網參考交大的Netflow統計頁,修改成台南市網的NetFlow首頁,請稍加修改以符合貴單位的需求。

沒有留言: