본문 바로가기
network/network-basic

Cisco Netflow(IOS) 설정과 flow-capture 를 이용한 분석

Cisco Netflow

- cisco 가 개발한 네트워크 프로토콜로 전통적인  snmp방식의 모니터링이 아닌 네트워크 상황분석을 위해 좀더 자세한 정보를
수집 분석 할 수 있도록 개발 되었다.
netflow를 통해 누가 트래픽을 시작해서 어느 목적지로 보냈는지, 또한 아래와 같이 패킷 샘플링 했을 때의 결과와 비슷한 정보를 
수집 할 수 있다.



netflow 구성요소 

1) 센서 (sensor) – 네트워크를 청취하고 트래픽 데이터를 캡처, 흐름 내보내기(flow export) 기능이 통합되어 있는 스위치, 라우터, 방화벽이 센서의 역할을 할 수 있음.
2) 콜렉터 – 센서 레코드를 수신해서 레코드를 디스크에 쓰는 소프트웨어.
3) 리포팅 시스템 – 콜렉터 파일을 읽어서 사람이 볼 수 있는 보고서를 만듦.


neflow 테스트
# 아래와같이 gns3 환경에서 테스트가 가능하다.
# IOS BOOTLDR: 7200 Software (C7200-JK9S-M), Version 12.4(13b), RELEASE SOFTWARE (fc3)
# host: cent os 6.6 64bit


#라우터에서 버전과 export 할 주소를  설정 한다.
R1(config)#ip flow-export version 5
R1(config)#ip flow-export destination 10.10.12.100 2055

# 수집할 인터페이스에 flow설정을 진행 한다.
R1(config)#inte fastEthernet 0/0
R1(config-if)# ip route-cache flow


# 설정이 되었다면 수집된 자료를 라우터 장비에서 간단하게 확인 할 수 있다.
R1#show ip cache flow
IP packet size distribution (40103 total packets):
   1-32   64   96  128  160  192  224  256  288  320  352  384  416  448  480
   .000 .000 .000 .999 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000

    512  544  576 1024 1536 2048 2560 3072 3584 4096 4608
   .000 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000

IP Flow Switching Cache, 4456704 bytes
  0 active, 65536 inactive, 114 added
  2464 ager polls, 0 flow alloc failures
  Active flows timeout in 30 minutes
  Inactive flows timeout in 15 seconds
IP Sub Flow Cache, 336520 bytes
  0 active, 16384 inactive, 114 added, 114 added to flow
  0 alloc failures, 0 force free
  1 chunk, 1 chunk added
  last clearing of statistics never
Protocol         Total    Flows   Packets Bytes  Packets Active(Sec) Idle(Sec)
--------         Flows     /Sec     /Flow  /Pkt     /Sec     /Flow     /Flow
UDP-other            5      0.0         1   228      0.0       0.2      15.3
ICMP               109      0.0       367   100      9.3       5.8      15.9
Total:             114      0.0       351   100      9.3       5.5      15.9

SrcIf         SrcIPaddress    DstIf         DstIPaddress    Pr SrcP DstP  Pkts

## 해당 구간에 패킷을 확인 하면 UDP 프로토콜을 통해서 호스트로 해당 정보를 보내는 것을 확인 할 수 있따.
## 이때 버전과 카운트 시간 정보를 포함하며, PDU를 추가 하여 flow에 대한 정보를 추가 해주는 구조로 되어 있다.


## 또한 수신한 장비는 해당 flow데이터를 받은후 icmp type3,code 3으로 응답 하는 구조로 되어 있다.(traceroute 와 비슷한듯.)



## 이제 네트워크 장비에서 준비는 다 되었으며 호스트에서 설정을 해준다.softflowd,
Flow-tools을 설치 설정하여 서버에서 CLI환경으로 확인 할 수 있도록 한다.


softflowd

[root@localhost src]#   tar xvxf softflowd-0.9.9.tar.gz
[root@localhost softflowd-0.9.9]#  cd softflowd-0.9.9
[root@localhost softflowd-0.9.9]#  ./configure
[root@localhost softflowd-0.9.9]#   make

### 만약 아래와 같은 에러 발생시 libpacap설치
configure: error: No BPF header found
 yum install libpcap*

## make install설치 진행 
[root@localhost softflowd-0.9.9]#   make install

## netflow 데이터를 eth0 인터페이스로 버전 5로  timeout 60 초로 지정 해서 데몬을 활성화 한다.
## softflowd --help 로 더 자세한 옵션을 확인 가능 하다.
[root@localhost ~]# softflowd -i eth0 -v 5 -t maxlife=60 -n 10.10.12.100:2055       

## 정상적으로 올라왔는지 확인 한다.
[root@localhost ~]# ps aux | grep softflowd
nobody    35333  0.0  0.1  10572  2808 ?        Ss   19:45   0:00 softflowd -i eth0 -v 5 -t maxlife=60 -n 10.10.12.100:2055

Flow-tools

• Collection of programs to post process Cisco NetFlow compatible flows.
• Written in C, designed to be fast (scales to large installations).
• Includes library (ftlib) for custom applications.

[root@localhost ~]# yum install flow-tools


# 만약 epel repo 가 없을 경우 yum install epel-release 설치후 진행 

[root@localhost ~]# yum repolist           
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.kaist.ac.kr
 * epel: mirrors.hustunique.com
 * extras: ftp.kaist.ac.kr
 * updates: ftp.kaist.ac.kr
repo id                          repo name                                                               status
base                             CentOS-6 - Base                                                          6,575
*epel                            Extra Packages for Enterprise Linux 6 - x86_64                          12,059
extras                           CentOS-6 - Extras                                                           50
updates                          CentOS-6 - Updates                                                       1,231
repolist: 19,915


## 캡쳐된 데이터가 저장된 디렉토리를 생성한다.
[root@localhost flow-tools]# mkdir /tmp/flow

## flow-capture 데몬을 시작한다.
[root@localhost tmp]# /etc/init.d/flow-capture start
Starting flow-capture:                                     [  OK  ]

## 아래와 같이 경로를 지정하여 캡쳐를 시작한다.
-p: PID process ID 파일의 저장 위치를 지정
-n: 5분마다 로그 파일을 만듦. (24시간을 5분단위로 나눈 값)
-w: 쓰기 디렉토리 지정
-S: 2분마다 syslog에 기록.
- 0/0/2055: 청취하는 로컬 장비의 IP/데이터 전송을 허가 받은 센서의 IP/포트
 첫 번째 주소란에 0을 두면, 콜렉터는 모든 IP 주소의 트래픽을 수락
 두 번째 주소란에 0을 두면, 모든 주소의 흐름 데이터를 수락
 Flow-capture가 청취하는 UDP 포트
콜렉터의 설정이 끝났다 할지라도 센서가 데이터를 보내기 전까진 아무것도 기록하지 않는다. (주의: 경로 생성을 미리 해놔야 함. )

[root@localhost tmp]#flow-capture -w /tmp/flow 0/0/2055

## 데몬을 확인 한다.
[root@localhost 2016-02-26]# ps aux |  grep flow-cap
root       1462  0.0  0.0  20316  1748 ?        Ss   20:14   0:00 flow-capture -w /tmp/flow 0/0/2055 


## 정상적으로 캡쳐 될경우 아래와 같이 날짜별로 자동 저장 되는 것을 확인 할 수 있다.
## 만약 해당 디렉토리가 생성 되지 않는다면 /var/log/message 에 로그를 확인 할 수 있다.
[root@localhost tmp ]# ls -al /tmp/flow/
total 12
drwxrwxrwx  3 root root 4096 Feb 26 20:14 .
drwxrwxrwt. 4 root root 4096 Feb 26 20:11 ..
drwxr-xr-x  3 root root 4096 Feb 26 20:14 2016

[root@localhost tmp ]#  cd  /tmp/flow/2016/2016-02/2016-02-26


[root@localhost 2016-02-26]# ls -al
total 16
drwxr-xr-x 2 root root 4096 Feb 26 20:15 .
drwxr-xr-x 3 root root 4096 Feb 26 20:14 ..
-rw-r--r-- 1 root root  149 Feb 26 20:15 ft-v05.2016-02-26.201454+0900
-rw-r--r-- 1 root root   96 Feb 26 20:15 tmp-v05.2016-02-26.201501+0900

##첫 번째 행인 srcIP는 흐름의 출발지 IP 주소, 두 번째 행인 dstIP는 흐름의 목적지 IP주소,
##세 번째 행의 prot은 흐름의 프로토콜 번호
## (콜렉터 서버의 /etc/protocols 파일에 가면 거의 모든 프로토콜 번호 목록을 볼 수 있음.)
## SrcPort 행은 출발지 포트, dstPort는 목적지 포트, octets행은 흐름의 바이트,
## packets행은 흐름의 패킷 수.

[root@localhost 2016-02-26]# flow-cat ft-v05.2016-02-26.201454+0900  |flow-print
srcIP            dstIP            prot  srcPort  dstPort  octets      packets
10.10.12.100     10.10.12.1       1     0        771      128         1         


## -n 옵션으로 프로토콜을 명을 직접 확인 할 수 있다,
[root@localhost 2016-02-26]# flow-cat ft-v05.2016-02-26.201454+0900  |flow-print  -n
srcIP            dstIP            prot  srcPort  dstPort  octets      packets
10.10.12.100     10.10.12.1       icmp  spr-itu  rtip     128         1         

## -f 옵션은 데이터의 포맷을 직접 설정해서 좀더 자세한 정보를 확인 할 수 있다.

       -f format
                  0 1 line, interfaces, hex ports
                  1 2 line (includes timing and flags)
                  2 2 line candidate TCP syn attack flows
                  3 1 line, no interfaces, decimal ports
                  4 1 line with AS number
                  5 1 line, 132 column
                  6 show ip accounting emulation
                  7 1 line, 132 column +router_id
                  8 1 line, 132 column +encapsulation
                  9 1 line with tag values
                 10 AS aggregation
                  9 1 line with tag values
                 10 AS aggregation
                 11 Protocol Port aggregation
                 12 Source Prefix aggregation
                 13 Destination Prefix aggregation
                 14 Prefix aggregation
                 15 Destination aggregation (Catalyst)
                 16 Source Destination aggregation (Catalyst)
                 17 Full Flow (Catalyst)
                 18 ToS AS Aggregation
                 19 ToS Proto Port aggregation
                 20 ToS Source Prefix aggregation
                 21 ToS Destination Prefix aggregation
                 22 ToS Prefix Aggregation
                 23 ToS Prefix Port aggregation
                 24 Full (Catalyst)


## 아래와 같이 변경 가능 
[root@localhost 2016-02-26]# flow-cat ft-v05.2016-02-26.201454+0900  |flow-print  -n -f 5
Start             End               Sif   SrcIPaddress    SrcP  DIf   DstIPaddress    DstP    P Fl Pkts       Octets

0227.21:42:05.003 0227.21:42:05.003 1     10.10.12.100    0     0     10.10.12.1      771   1   0  1          128 


반응형