cisco netflow + netflow dump for linux

29 de julio de 2008

El Netflow es un protocolo propietario de Cisco para recoger información sobre el tráfico que atraviesa una interfaz red y posteriormente analizarlo para saber por ejemplo quien esta tirando de la red, hacia donde van los paquetes web, quien se conecta por ftp, etc.

Para que todo esto funcione necesitamos varias cosas. Primero tenemos que configurar nuestro router Cisco para que la interfaz envíe los registros de estadísticas a un colector de Netflow. Estos paquetes de estadísticas son paquetes UDP. Luego tenemos que configurar el recolector de Netflow y por ultimo tenemos que utilizar un analizador de Netflow (que puede estar en el mismo recolector) para sacar las estadísticas.

Cisco proporciona el protocolo de Netflow en sus routers Cisco, pero no proporciona ningún software para recolectar y analizar estas estadísticas.
Aquí tenéis una lista de analizadores de Netflow. Para hacer este post utilizaremos el nfdump para Linux. Se trata de un analizador libre de Sourceforge. El software de nfdump tiene dos utilidades básicas. Una es nfcapd que es el recolector de paquetes Netflow el cual esta constantemente escuchando en un puerto la llegada de paquetes UDP. Luego tenemos nfdump que analiza los paquetes que han ido recopilando el daemon de nfcapd.

Empezamos pues. Lo primero que haremos es configurar la interfaz de red del router de la cual quiero analizar los paquetes:

# conf term
(config)# interface ethernet 0
(config-if)# ip route-cache flow
Para detener el Netflow basta con denegar el comando con "no ip route-cache flow".

Ahora le tenemos que decir al router dónde tiene que enviar los paquetes del Netflow:
(config)# ip flow-export version 5 origin-as
(config)# ip flow-export destination 192.168.1.101 4444
En 192.168.1.101 está nuestro servidor de Linux donde instalaremos el recolector y el analizador. El 4444 es el puerto UDP donde escucharemos paquetes de Netflow. Tenemos que tener en cuenta que si hay un firewall entre nuestro router y nuestro recolector tendremos que abrir el puerto UDP 4444 para dejar pasar este tráfico.
Para asegurarnos que el router está bien configurado podemos utilizar los comandos "show ip flow export" para ver la configuración actual del Netflow o "show ip cache flow" para ver los paquetes que el Netflow tiene para enviar al recolector.

El siguiente paso es instalar el recolector en nuestra maquina Linux. Bajaremos nfdump-snapshot-20070808.tar.gz y lo instalaremos.
# tar -xzvf nfdump-snapshot-20070808.tar.gz
# cd nfdump-snapshot-20070808
# ./configure
# make
# make install
Una vez compilado he instalado, lanzamos el recolector en modo debug escuchando en el puerto 4444 (lo normal sería lanzar este comando en background):
# nfcapd -w -p 4444 -E
El parámetro -w le dice que cada cinco minutos rote los archivos de log que se encuentran en /var/tmp y que seran necesarios para el analizador. El parámetro -E indica al recolector que funcione en modo debug. Antes de lanzar el analizador tenemos que dejar el daemon del nfcapd funcionando un rato para que vaya recopilando información. Una vez tengamos unos cuantos archivos de log en /var/tmp ya podemos lanzar el analizador con el comando nfdump.

El analizador tiene muchas opciones (nfdump --help) pero la llamada básica es la siguiente:
# nfdump -R /var/tmp -o extended -s srcip -s ip/flows -s dstport/pps/packets/bytes -s record/bytes
Con el parámetro -R le decimos donde se encuentra los archivos de log que está recopilando el recolector de Netflow. Con el parámetro -o le decimos que muestre los listados con la mayor información posible. Con el parámetro -s le indicamos el tipo de listados estadísticos que queremos. Por ejemplo si lanzamos el analizador de esta forma:
# nfdump -R /var/tmp -o extended -s dstport/packets/bytes
Lo que obtenemos es un top 10 de las puertos de destino (dstport) con más tráfico ordenados por paquetes (packets) y bytes.

Otro parámetro interesante es el -t, el cual nos permite analizar todos los archivos de log pero en una franja de tiempo concreta.
Por ejemplo si queremos ver el trafico a partir de las 19:30 haremos:
# nfdump -R /var/tmp -o extended -s srcip -s ip/flows -s dstport/pps/packets/bytes -s record/bytes -t 2008/07/29.19:30:00
También es interesante el uso de filtros. Para especificar filtros dentro de nfdump utilizamos las comillas dobles. Podemos utitilizar filtros para delimitar las estadísticas a unas IPs en concreto, a un puerto o a una duración de una conexión.
Veamos unos ejemplos de filtros.
# nfdump -R /var/tmp -o extended -s srcip -s ip/flows -s dstport/pps/packets/bytes -s record/bytes "tcp and (dst ip 80.80.80.80)"
Este filtro lo que hace es mostrar solo las estadísticas para las conexiones TCP donde la IP de destino sea 80.80.80.80.
# nfdump -R /var/tmp -o extended -s dstip/bytes "dst port 25"
Este filtro lo que hace es mostrar solo las estadísticas para las conexiones a servidores de correo (puerto 25).
# nfdump -R /var/tmp -o extended -s dstip/bytes "duration > 3000"
Este filtro lo que hace es mostrar solo las estadísticas para las conexiones salientes que han durado más de 3000 milisegundos.

Aquí teneis una post interesante de como detectar actividades "anormales" con netflow:

Detecting Worms and Abnormal Activities with NetFlow, Part 1
Detecting Worms and Abnormal Activities with NetFlow, Part 2


Más información:
+ http://nfdump.sourceforge.net/
+ http://manageengine.adventnet.com/products/netflow/help/cisco-netflow/cisco-ios-netflow.html
+ http://en.wikipedia.org/wiki/Netflow
+ http://www.cisco.com/en/US/products/ps6601/products_ios_protocol_group_home.html