close

抓出誰在惡搞網路 用Netflow流量分析工具監控IP異常活動

2011/11/10
丁光立
轉載http://www.netadmin.com.tw/article_content.aspx?sn=1111030003
除了購買昂貴的設備軟體來分析網路流量來源,網管人員還可以運用免費的開放原始碼工具Netflow,找出可能影響公司網路正常運作的內部IP亂源。Netflow是一個分析引擎,只要讀取其他設備或程式送出格式支援的資料,便可提供用以分析的IP流量資料。本文介紹Netflow的安裝、設定及教學,並且針對其網頁介面NfSen及其模組PortTracker的安裝、設定與部署提供簡單的教學及說明。
身為網管人員總會經常發現自家的網路被惡搞。除了不定時偵測Server、設備的駭客外,更讓網管人頭痛的莫過於總是有著千奇百怪的理由而去點那些一看就知道有問題的惡意連結,或者執行看起來就有問題的郵件附檔而致使自己電腦被開後門或感染病毒、蠕蟲而把公司網路搞得一團糟的內部同仁。

要找到這些吹皺一池春水的公司同仁是迫切而且必要的。聰明的網管人必須懂得使用便利的工具來減輕自己的負擔,並且能快速而準確地找到亂源。

比較簡單但陽春的作法是,利用Cisco Router的IP Accounting功能用人眼進行觀察(假設是VPN內部連線或者Cisco Router是對外連線的設備)。

一般而言,企業對外的Internet出口通常是使用防火牆和IDS/IPS來過濾進出的封包,這一類的設備通常都有分析網路流量來源的功能。中小企業大多因預算考量而採用UTM設備,部分UTM設備也有提供陽春的報表或圖表功能。

除了這些昂貴的設備外,還是有一些不花錢的方法。在實務上,針對流量的部分,比較入門的就是MRTG(Multi Router Traffic Grapher),簡單輸入一下,就可以畫出淺顯易懂的圖表,其圖形輸出如圖1所示。MRTG已經發展了很久,相當地成熟,網路上參考資料繁多,在此不再贅述。

如果MRTG不能符合自身的需求,而希望能產生更多變化的話,則可使用RRDtool。它不受限於兩個輸入,熟練的話可以做出更多的效果,並且能夠產出豐富而多變的圖表。RRDtool的輸出如圖2所示。
 
▲圖1 MRTG的圖形輸出。
 
▲圖2 RRDtool的圖形輸出。


MRTG和RRDtool主要是用來做流量的觀測,雖然RRDtool也可以針對個別IP的活動進行繪圖,但是在操作時較為困難。

在圖1與圖2中刻意不使用流量圖作範例,目的是要告訴讀者,它們不僅僅只能用來繪製流量圖,更可以提供不同的輸出變化。

針對個別IP活動的偵測,比較知名而適宜的套件是ntop及本文的主角Netflow。從筆者的使用心得來看,ntop比較容易入門,也較不需要參考資料。Netflow入門的門檻較高,相對ntop而言,其參考資料也較少。因此本文選定Netflow作為介紹的對象。

使用套件說明

在本文中,會介紹Netflow的安裝、設定及教學,並且針對其網頁介面NfSen及其模組PortTracker的安裝、設定與部署做簡單的教學及說明。

在開始之前,必須先介紹一下相關的概念。Netflow充其量只是一個分析引擎,它需要由其他設備(程式)用Netflow認識的資料格式,提供用以分析的IP流量資料。

有幾個方法可以提供IP流量給Netflow程式,一是使用設備,例如Cisco路由器或防火牆,二為使用程式,例如安裝在FreeBSD或Linux上的套件。本文將使用pfSense作為提供分析資料的來源,它的原理是使用FreeBSD上的套件,將流量加以處理後,再以Netflow的格式輸出。

pfSense是一個開放原始碼(Open Source)的防火牆軟體,它可以輕鬆地安裝在個人電腦上,依筆者的經驗,P4等級的機器就可以妥善運作。安裝的部分也很簡單,把ISO檔燒錄成光碟之後,再用此光碟開機,它就會引導使用者進行安裝及相關的設定。

在安裝完成後,就可以在毋須花大錢添購高級設備的前提下,以最少的人力及物力來完成監控IP活動的目的,pfSense架設的位置如圖3防火牆所在的位置。

接著討論網路架構的部分,本文所使用的架構如圖3所示。不管是用戶連至Internet的流量,或是Internet連入用戶端的流量,都會經過pfSense,而pfSense會將流經它的流量,使用pfflowd套件將這些流量加以剖析,並將之轉換為Netflow可以接受的格式,再傳送給Netflow Server進行處理。接著說明Netflow的設定與安裝。
 
▲圖3 Netflow網路架構圖。
使用Netflow

在此選用的Linux發行版本是這幾年相當受歡迎的Ubuntu,使用版本是10.04 Server版。所安裝的套件及安裝方法如下(若是新安裝的機器,記得先執行「apt-get update」指令):
 


安裝librrd-dev時需時較久,請耐心等候。最後所安裝的nfdump就是Netflow的套件。

Netflow的安裝到此就完成了,接著驗證一下Server是否有收到pfSense送過來的資料。必須先到pfSense的管理介面(筆者使用的版本是1.2.1)安裝相關的套件,才能將收到的資料以Netflow的格式輸出。安裝畫面如圖4所示,先點選System選單中的「Packages」。
 
▲圖4 安裝Netflow的套件。


點選後、往下尋找可以找到如圖5的頁面,在pfflowd的項次,點選〔+〕號進行安裝。
 
▲圖5 安裝pfflowd。


安裝完成後,在Services的最下面一行可以看到「pfflowd」,點選它以進行相關的設定。選單所在位置如圖6所示。
 
▲圖6 啟動pfflowd。


圖7是相關資訊的輸入頁面,填入所需的資料。「Host」欄位是用來輸入要接收Netflow的主機,也就是剛剛安裝nfdump的主機。「Port」部分使用預設的「9995」即可。

而「Source Hostname/IP」欄位要輸入的是pfSense主機的IP。「pf rule direction restriction」毋須做特別指定,「Netflow version」使用預設的「5」即可。
 
▲圖7 pfflowd相關設定。


接著驗證Netflow主機是否有收到pfSense送過來的資訊。執行指令「tcpdump udp port 9995」以便確認UDP的Port 9995是否有收到封包,輸出如圖8所示。
 
▲圖8 檢查Netflow是否有收到資料。


確認有收到封包後啟動nfcapd,這是Netflow用來收集封包的程式。執行指令「mkdir -p /var/log/nfdump」,先建立一個目錄來收這些檔案,之後使用「nfcapd -w -D -l /var/log/nfdump」這個命令來啟動nfdump。在該命令中,-w是指輸出成檔案,-D代表以daemon的方式執行,而-l則是指定要儲存的目錄。

接著檢查一下「/var/log/nfdump」目錄裡面是不是已經有檔案。以筆者為例,此時在「/var/log/nfdump」目錄內,已經產生了一個名為「nfcapd.201109221600」的檔案(檔名會依當時的時間而定)。

不過,由於nfcapd產出的是二進位檔,裡面的內容無法直接看懂,必須依靠其他工具的協助,因此在本文中會介紹GUI介面NfSen,屆時就能一窺其中的內容。

在此要特別注意的是,在執行NfSen時,它會自動去呼叫nfcapd,不需要手動執行nfcapd。因此要把剛剛執行的nfcapd從行程池中刪除,使用指令為「kill -9 'ps ax | grep nfcapd | awk '{print $1}"」。測試時建立的目錄「/var/log/nfdump」記得一併刪除。

安裝NfSen

NfSen的全名是Netflow Sensor,它是一個Web介面的Netflow前端程式。可以用圖像化的方式讓管理者輕鬆地查看目前網路的狀態,接下來介紹其安裝及設定方式。

NfSen的安裝及設定流程是,先下載NfSen,將其解壓縮,之後再把預設的設定檔複製成安裝時的設定檔,並編輯其內容,相關指令如下:
 



接著,開始編輯nfsen.conf。首先要編輯的是$BASEDIR,端賴管理者將它安裝在何處,本例安裝至「/usr/local/nfsen」。$WWWUSER及$WWWGROUP部分請參照個人使用的Linux發行版本來調整。以Ubuntu而言,須改為「www-data」。

此外,$HTMLDIR部分必須指定為個人置放網頁的目錄(請自行安裝apache2和php5),在此設定為 「/var/www/nfsen」。$PREFIX部分,筆者設定為 「/usr/bin」,請依nfdump此執行檔所在的目錄進行設定。

而%sources,則將peer1和peer2那兩行刪除。至於upstream1該行最後面的逗號也要拿掉。(upsteam1可以自行更換成自行定義的名稱)。

接下來新增一個使用者netflow,將用來執行該程式,請使用如下的指令格式:
 


然後就可以開始安裝nfsen,指令如下:
 


在安裝過程中,會提示是否要將peer1和peer2的相關資訊刪除,回答「Y」將其刪除。在完成安裝後,可以登入「http://yourhost/nfsen/nfse.php」查看(yourhost請自行代換為自己使用的IP或Domain Name)。

此時會有錯誤訊息,這是因為nfsen還沒有啟動的關係。然後,使用指令「/usr/local/nfsen/bin/nfsen start」啟動nfsen。

倘若之前沒有特別指定profile-data所在目錄,那麼在「/usr/local/nfsen/profiles-data/live/upstream1」目錄中,就會自動產生檔案,檔名為「nfcapd.current」。

在五分鐘之後,就可以看到2011的目錄自動產生。在預設的狀況下,nfsen會自動依年、月、日來儲存,並分類nfcapd所儲存的檔案。

此時可以驗證一下成果,先切換到profiles-data所在的目錄,例如「/usr/local/nfsen/profiles-data/live/upstream1/2011/09/24」,接著執行命令「nfdump -r nfcapd.201109241035」(檔案的副檔名請依實際狀況進行更改)。理論上,應該可以看到許多資料,實際情形類似圖9所示:
 
▲圖9 nfdump的輸出。


NfSen的安裝到此已完成,讀者可以自行操作一下NfSen的介面,它並不難入門。

不過,在略為操作之後,讀者可能會覺得奇怪,NfSen似乎沒有提供更詳細資料的查詢,它只有提供Flows、Packets、Traffic的統計資訊,無法讓管理者去查詢IP、port的使用及連線情形。

要讓NfSen查詢相關的資料,必須自己下filter,它的語法有點類似tcpdump,讀者可以參考網頁「http://nfsen.sourceforge.net/#mozTocId652064」,官網有詳細的說明,並不會太難以理解,不過缺點就是只能用文字的方式呈現,如果想要用圖型化的方式來查看,就需要配合其他的工具。

使用PortTracker

NfSen提供非常豐富的外掛程式(Plugins),如果想要針對IP、Port的使用及連線情形查看的話,需要安裝PortTracker這個套件。接著就來示範怎麼安裝及設定PortTracker。

這裡必須事先說明的是,透過apt-get安裝的nfdump無法提供安裝PortTracker時所需的程式,因此必須手動下載nfdump,並將之編譯,但無須安裝。

STEP 1 首先下載nfdump。
 

(全部為同一行)

STEP 2 將之解壓縮,並切換至解壓縮後的目錄。
 


STEP 3 把編譯過程式需要使用的套件也安裝進來。
 


STEP 4 開始編譯,指定安裝在「/usr/local/nfdump」目錄,並且啟用nftrack模組。再把剛剛產出的nftrack複製到「/usr/bin」目錄內。
 


STEP 5 再來安裝PortTracker,切換至PortTracker所在的目錄。
 


STEP 6 把檔案複製至nfsen的相關目錄。
 


STEP 7 建立目錄來存放PortTracker的資料,並且設定所屬的使用者為www-data。
 


STEP 8 之後編輯「/usr/local/nfsen/plugins/PortTracker.pm」檔,把$PORTSDBDIR的「/data/ports-db」改為「/var/log/netflow/porttracker」(剛剛建立的目錄)。

STEP 9 接著編輯「/usr/local/nfsen/etc/nfsen.conf」,找到@plugins,修改內容如下:
 


STEP 10 以www-data身分執行nftrack以建立rrd檔,此步驟需時較久。
 


STEP 11 隨後,設定此目錄所屬的使用者、群組和權限。
 


STEP 12 執行指令「/usr/local/nfsen/bin/nfsen reload」重新啟動NfSen。稍待片刻,再點選「http://yourhost/nfsen/nfsen.php」裡面的「Plugins」,就可以看到PortTracker的輸出結果。
 
▲圖10 PortTracker的輸出結果。


找出占用大量Session的IP

接下來示範如何查看占用大量session的IP。首先,點選TCP Packets,然後將Display改為12 Hours,將Y-axis改為Log(Y軸取Log,在查看時會比較明顯),最後把Type改為Stacked以方便查看。這個時候可以看出Port 25565(紅色)占了大多數的TCP Packets,如圖10所示。

再來回到NfSen的主選單,找出是哪一個IP正在使用這個Port。點選上面選單的Details,再點選TCP,Display同樣點選12 Hours,旁邊的時間軸,點選最右邊的〔>|〕(Goto last slot),如圖11所示。
 
▲圖11 NfSen的輸出。


最後,在Filter裡執行指令「proto tcp and port 25565」,並按下〔process〕,就可以看到Filter之後的輸出,可以看出210.68.X.Y(IP我遮蔽了)占了最大的流量。

隨後就可以到防火牆或是前述的pfSense做攔阻或監控的動作,相關操作如圖12所示。
 
▲圖12 使用Filter查出占大流量的IP。


結語

此次示範了如何在不增加公司的支出下,使用自由軟體來架設功能強大的Netflow,以找出可能影響公司正常網路運作的IP。

事實上,使用價格昂貴的設備和軟體可以更輕易地解決這些問題,但並不是每一間公司都願意做這樣的投資,如何在兼顧公司成本及管理效率下,對公司網路做適宜的管控,才是真正考驗網管人能力之處。希望每位網管人都能善用這些自由軟體資源,減輕自己和公司的負擔。
arrow
arrow
    創作者介紹
    創作者 Johnson峰 的頭像
    Johnson峰

    Johnson峰的部落格

    Johnson峰 發表在 痞客邦 留言(0) 人氣()