본문 바로가기
  • AI (Artificial Intelligence)
Security/Monitoring

[Monitoring] NetFlow 데이터 분석 관련 프로그램 설치 및 활용

by 로샤스 2014. 11. 28.

1.      NetFlow 데이터란?

 

Source IP destination IP사이에 발생하는 일련의 패킷들을 NetFlow라고 정의할 수 있는데, 여기에는 NetFlow버전에 따라 다양한 정보를 포함하고 있다. 기본적으로 source IP, destination IP, application port 번호, IP Protocol Type, Service Type, AS번호 등이다. 이런 정보를 이용해 현재 발생하고 있는 이벤트에 대한 추적이 가능하다.

 

참조: http://www.cisco.com/warp/public/cc/pd/iosw/ioft/neflct/tech/napps_wp.htm

 

기존의 MRTG가 실제 트래픽 사용률에 대한 정보를 보여 주었다면, NetFlow 데이터는 위에서 언급한 정보들을 가지고 있으므로 과다한 트래픽을 발생시키는 IP, 바이러스에 감염된 PC, 그리고 현재 우리 네트웍에서 어떤 유형의 트래픽이 많은 지를 분석할 수 있다.

 

따라서 MRTG FlowScan을 병행하면 굳이 고가의 NMS 프로그램을 구입하지 않더라도 수준급의 보안 시스템을 구축했다고 볼 수 있지 않을까?

 

* 실제예 : 바이러스에 감염된 전용선 가입자의 MRTG 그래프 및 FlowScan 검색

MRTG그래프

이 그래프는 어떤 전용회선 가입자의 트래픽 사용현황을 보여주는 것으로써 input값이 일정하고 또 새벽에도 input값이 일정하게 있는 것으로 보아 바이러스에 감염됐음을 짐작할 수 있다. 하지만 어떤 IP인지는 이 그래픽만으로는 알 수 없다. 이때 FlowScan을 이용하면 된다.

 

FlowScan

2003/11/27 04:08:22 211.238.196.17 -> 211.238.205.100 ICMP_ECHO 1 92

2003/11/27 04:08:22 211.238.196.17 -> 211.238.205.101 ICMP_ECHO 1 92

2003/11/27 04:08:22 211.238.196.17 -> 211.238.205.102 ICMP_ECHO 1 92

2003/11/27 04:08:22 211.238.196.17 -> 211.238.205.103 ICMP_ECHO 1 92

2003/11/27 04:08:22 211.238.196.17 -> 211.238.205.104 ICMP_ECHO 1 92

2003/11/27 04:08:22 211.238.196.17 -> 211.238.205.105 ICMP_ECHO 1 92

2003/11/27 04:08:22 211.238.196.17 -> 211.238.205.106 ICMP_ECHO 1 92

2003/11/27 04:08:22 211.238.196.17 -> 211.238.205.107 ICMP_ECHO 1 92

2003/11/27 04:08:22 211.238.196.17 -> 211.238.205.108 ICMP_ECHO 1 92

2003/11/27 04:08:22 211.238.196.17 -> 211.238.205.109 ICMP_ECHO 1 92

FlowScan으로 위 가입자의 IP주소(211.238.196.17)를 검색해보니 특정 IP주소(211.238.205.X번대) 92Byte의 일정한 크기로 스캔하는 웜(Welchia)에 감염되었음을 알 수 있다.

 

☞ 이제부터 NetFlow 데이터를 분석하는 프로그램들을 설치해보자.

 

2.      프로그램 설치

1)      내가 설치한 시스템 사양

[H/W]

모델명 : 인텔 ISP2150 (인텔 조립서버라고 많이 부름)

CPU : PIII 800MHz *2 (듀얼CPU)

Memory : 1024Gbytes

DISK : 9Gbytes*1, 72Gbytes*1 (모두 SCSI방식, 72G NetFlow데이터 쌓임)

[S/W]

OS : Redhat Linux 7.2

설치패키지 : Linux설치 시 대부분의 패키지 설치(게임 관련 패키지 제외)

 

2)      프로그램 설치순서 및 역할

Apache

웹서버

Perl5

Perl로 작성된 프로그램 인터프리터

RRDTool

분석된 Flow데이터를 저장하는 DB파일

Flow-tools

flow 데이터를 수집하는 collector

Perl Modules

Perl 추가 모듈

Korn Shell

CUFlow 프로그램에서 사용

FlowScan

수집된 flow데이터를 분석하여 보고서 작성

CUFlow

보고서 종류 중 하나. 다른 종류로써 CampusIO SubNetIO가 있고 서로 혼용해서 사용가능

 

 

3)      설치

      Apache Linux 설치 시 패키지로 설치하거나 최신버전을 다운받아 설치하면 된다.

      Perl5역시 Apache와 동일한 방법으로 설치하면 된다.

RRDTool

다운받기

www.rrdtool.org 에서 stable버전인’rrdtool.tar.gz’ 받음

설치

tar –zxvf rrdtool.tar.gz ('rrdtool-1.0.43’ 디렉토리 생성, 버전에 따라 다름)

cd rrdtool-1.0.43

./configure –enable-shared –prefix=/usr/local/rrdtool

make install site-perl-install

 

Flow-tools

다운받기

http://www.splintered.net/sw/flow-tools/

설치

tar –zxvf flow-tools-0.66.tar.gz

cd flow-tools-0.66

./configure; make; make install

* 관련 파일들이 ‘/usr/local/netflow’ 디렉토리에 설치된다.

 

Perl Modules

CPAN Shell 방식으로 설치할 수도 있고, 관련 Module을 다운받아서 설치 할 수도 있다. 여기서는 관련 Module들을 다운받아 설치한다. , ConfigReader는 다른방식으로 설치한다.

다운받기

http://search.cpan.org/search?dist=Boulder

http://search.cpan.org/search?dist=ConfigReader

http://search.cpan.org/search?dist=HTML-Table

http://net.doit.wisc.edu/~plonka/Net-Patricia/

http://net.doit.wisc.edu/~plonka/Cflow/

설치

(Cflow)

tar –zxvf Cflow-1.051.tar.gz

cd Cflow-1.051

perl Makefile.PL

make; make test; make install

* 다른 Module들도 같은 방식으로 설치

설치

(ConfigReader)

ConfigReader Makefile.PL 파일이 없으므로, REAME 파일 참조해서

- You'll find documentation in ConfigReader.pod, as well as in the source files. The *.pm files should be installed in a "ConfigReader" subdirectory on your Perl include path. -

 

/usr/lib/perl5/5.8.0/ConfigReader 디렉토리를 만들어서 *.pm 복사하고,

/usr/lib/perl5/site_perl/5.8.0/ConfigReader 디렉토리도 만들어서 *.pm 복사하면 된다.

 

tar -zxvf ConfigReader-0.5.tar.gz

cd ConfigReader-0.5

cd /usr/lib/perl5/5.8.0

mkdir ConfigReader

cd ConfigReader

cp /home/src/ConfigReader-0.5/* .

 

Korn Shell

다운받기

Linux설치 CD#2 RPM디렉토리나 http://www.kornshell.com

설치

rpm –Uvh pdksh-5.2.14-16.i386.rpm

 

FlowScan

다운받기

http://net.doit.wisc.edu/~plonka/FlowScan/

설치

(‘root’계정이 아닌 일반 계정으로 설치할 것을 권고)

tar -zxvf FlowScan-1.006.tar.gz

cd FlowScan-1.006

./configure --prefix=/var/netflow

make

make -n install

make install

cd cf

cp flowscan.cf /var/netflow/bin

 

CUFlow (일반계정으로 설치 계속)

다운받기

http://www.columbia.edu/acis/networks/advanced/CUFlow/

설치

tar –zxvf CUFlow-1.4.tgz

cd CUFlow-1.4

cp CUFlow.* /var/netflow/bin/

 

☞ 자, 이제 NetFlow데이터를 수집하고 가공하기 위해 필요한 프로그램 설치는 끝났다. 그럼 실제 라우터나 스위치에서 NetFlow 데이터를 FlowScan서버로 보내는 방법과 이를 서버에서 처리하기 위한 사전 환경설정에 대해서 알아보자.

 

3.      NetFlow 데이터 보내기

1)      시스코 라우터 설정 (여기서는 시스코7513 라우터에서 설정)

 

#Global-mode

ip flow-export version 5 peer-as

ip flow-export destination x.x.x.x y (x.x.x.x –collector’s ip주소 / y -port번호, 보통 FlowScan프로그램은 2055/UDP를 사용한다.)

#Interface-mode

ip route-cache flow

 

2)      확인 (아래 flows 개수가 증가하는 지 확인)

7513#sh ip flow export

Flow export is enabled

  Exporting flows to x.x.x.x (y)

  Exporting using source IP address x.x.x.x

  Version 5 flow records, peer-as

  439795660 flows exported in 16392366 udp datagrams

  0 flows failed due to lack of export packet

 

4.      FlowScan서버 환경구성

 

1)      flow-tools

flow파일 및 RRD파일이 저장될 디렉토리 생성

#mkdir –p /var/netflow/

#mkdir –p /var/netflow/ft

#mkdir –p /var/netflow/rrds

#mkdir –p /var/netflow/scoreboard

/usr/local/netflow/bin 밑에 export라는 파일을 만들고 소유권한을 ‘chmod a+x export’로 준다.

#cd /usr/local/netflow/bin

#touch export

#chmod a+w export

 

export 파일을 아래와 같이 편집한다.

#!/usr/bin/perl

$file = $ARGV[0];

if ( $file =~ /.*ft-v05\.(\d\d\d\d)-(\d\d)-(\d\d)\.(\d\d)(\d\d)(\d\d)/ ){
$cflowfile = "flows.".$1.$2.$3."_".$4.":".$5.":".$6;
$command = "/usr/local/netflow/bin/flow-export -f0 < $file > /var/netflow/$cflowfile";
print "$command\n";
system($command);
}else{print "File $file didn't match\n";}

 

tcpdump flow 데이터가 들어오는지 확인

#tcpdump –n udp port 2055

ð       라우터로부터 NetFlow데이터를 정상적으로 받는지 확인. 만일 스크롤되는 데이터가 없다면 라우터의 NetFlow 설정부터 확인

 

NetFlow 캡쳐하기

#/usr/local/netflow/bin/flow-capture -w /var/netflow/ft 0/0/2055 -S5 -V5 -E1G -n 287 -N 0 -R /usr/local/netflow/bin/export

 

* flow-capture프로그램 옵션 설명

·         -w /var/netflow/ft : flow-capture가 캡쳐한 flow 파일이 저장되는 장소

·        0/0/2055 : local IP/remote IP/port번호, 0 any IP를 의미, 0은 모든 IP 의미

 

2)      flowscan

/var/netflow/bin/flowscan.cf 파일 수정

#ReportClasses 부분  -> 어떤 보고서 형식을 사용할 지

ReportClasses CUFlow

#FlowFileGlob 부분  -> 가공된 NetFlow파일 형식을 지정하는 부분. 예로들면, ‘flows.20031214_17:50:00’과 같은 형식

FlowFileGlob flows.*:*[0-9]

CampusIO.cf와 같은 나머지 FlowScan 파일은 수정할 필요없음.

 

3)      CUFlow

/var/netflow/bin/CUFlow.cf 파일 수정

# Subnet 부분 : 내부에서 사용하는 IP블록, CIDR형식. 여러 줄 가능

Subnet 210.100.64.0/19

Subnet 211.12.160.0/20

 

# Network 부분 : 네트웍 그룹으로써 이 그룹에 대한 트래픽을 모니터링하고 싶은 경우. “Network x.x.x.x/y lable” 형식

Network 210.100.66.0/24,211.12.162.0/24 data_center

 

# OutputDir 부분 : RRD 파일이 저장되는 장소

OutputDir /var/netflow/rrds

 

# Scoreboard/AggregateScore 부분 : 트래픽을 많이 발생시키는 순위에 대한 html파일이 저장되는 부분.

Apache에서 이 파일을 링크하도록 구성하면 웹에서 확인 가능

Scoreboard  25  /var/netflow/scoreboard  /var/netflow/scoreboard/toptalkers.html

AggregateScore  25  /var/netflow/rrds/agg.dat  /var/netflow/scoreboard/overall.html

 

# Router 부분 : flow를 발생시키는 라우터 리스트

Router 210.100.64.1 GSR

Router 211.12.160.1 7513

 

☞ 이제 모든 준비가 끝났으므로 FlowScan을 실행시켜 NetFlow데이터가 제대로 쌓이는 지 확인해 보자.

 

5.      FlowScan 실행

 

1)      스크립트 작성

#touch /var/netflow/bin/fs.sh;

#chmod 755 /var/netflow/bin/fs.sh

#vi /var/netflow/bin/fs.sh

#!/bin/sh
# description: Start FlowScan

case "$1" in
'start')
cd /var/netflow/ ; bin/flowscan >>/var/log/flowscan 2>&1 </dev/null & >/dev/null
touch /var/lock/subsys/flowscan.1
;;
'stop')
rm -f /var/lock/subsys/flowscan.1
;;
*)
echo "Usage: $0 { start | stop }"
;;
esac
exit 0

2)      flowscan 실행하기

#/var/netflow/bin/fs.sh start

#tail f /var/log/flowscan (아래와 같이 보이면 성공)

sleep 30...
2002/06/24 03:05:09 working on file flows.20020624_03:00:00...
2002/06/24 03:05:53 FlowScan-1.020 CUFlow: Cflow::find took 44 wallclock secs (43.57 usr + 0.11 sys = 43.68 CPU) for 8729930 flow file bytes, flow hit ratio: 156224/158726
2002/06/24 03:05:56 FlowScan-1.020 CUFlow: report took 3 wallclock secs ( 0.00 usr 0.03 sys + 1.47 cusr 1.30 csys = 2.80 CPU)
sleep 30...
 

3)      flowdumper
   
용도 : FlowScan에 의해 가공된 파일은 RRD형식이므로 cat같은 명령으로는 읽을 수 없다. Flowdumper RRD파일을 텍스트로 변형시켜 보여줌으로 grep과 같은 명령어와 혼합하면 원하는 데이터를 얻을 수 있다.
    사용예  #flowdumper s flows.20031214_20:45:00 | grep 211.238.196.17

 

4)      CUGrapher.pl
      용도 : RRD파일을 가공해서 그래프로 보여주는 perl프로그램
      CUFlow-1.4 디렉토리에서 아파치의 cgi-bin디렉토리로 복사
      http://yourserver/cgi-bin/CUGrapher.pl 로 접속
      참고사이트
o        http://wwwstats.net.wisc.edu
 o      
http://flows.ikano.com

6.      기타 관련 사이트
      http://www.cisco.com/go/fn - This is the Cisco Feature Navigator 
      http://httpd.apache.org/ - This is the home page for Apache. This is the web server that I recommend.
      http://www.rrdtool.org/ - This is the RRDTool home page.
      http://www.splintered.net/sw/flow-tools/ - This is the flow-tools home page.
      http://net.doit.wisc.edu/~plonka/FlowScan/ - This is the FlowScan home page.
      http://www.columbia.edu/acis/networks/advanced/CUFlow/ - This is the CUFlow home page.
      http://net.doit.wisc.edu/~plonka/list/flowscan/ - This is the FlowScan mailing list home page.
      http://wwwstats.net.wisc.edu - Examples of FlowScan and CUFlow.
      http://flows.ikano.com - Another example web site.
      https://www1.columbia.edu/sec/bboard/mj/cuflow-users/ - CUFlow mailing list archive. The mailing list is cuflow-users@columbia.edu.











출처 : http://www.cisco.com/warp/public/cc/pd/iosw/ioft/neflct/tech/napps_wp.htm 

          http://blog.pages.kr/198











댓글