¿Sabemos qué tráfico circula por nuestra red? Al hilo de los distintos posts (Analizando nuestra red, Analizando nuestra red II) de análisis de red que se han ido publicando en este blog hoy vamos a continuar en este tema centrándonos en el análisis del tráfico desde un punto de vista de rendimiento y clasificación del mismo.
Cuando monitorizamos una red, nos solemos centrar en dos puntos, la cantidad de tráfico que atraviesa la red, habitualmente mediante la activación del servicio SNMP y la consulta mediante polling del tráfico de las interfaces de red, mediante alguna herramienta que gráficamente muestre los resultados, como puede ser mrtg o Cacti, y la tipología de dicho tráfico.
Para poder monitorizar que tipo de tráfico circula por nuestra red existen distintas soluciones, aunque nos centraremos en el uso del protocolo netflow; A grandes rasgos, netflow es un protocolo de red desarrollado por Cisco para la monitorización y análisis de tráfico de red, el cual está presente en distintos fabricantes de dispositivos en la actualidad.
La arquitectura netflow esta constituida por tres elementos:
- Netflow Exporter: el dispositivo de red, habitualmente un router o un switch de gama alta (hay que confirmar previamente que el servicio netflow está soportado), que captura los flujos de datos que circulan por él, enviando información sobre direcciones IP, puertos o protocolos usados.
- Netflow collector: el elemento que recoge la información enviada por el dispositivo de red y la almacena.
- Consola de análisis: el sistema a través del cual el gestor de red analiza la información almacenada por el colector.
Para este post hemos usado un Router Cisco 1800 como Netflow Exporter y un sistema GNU/Linux para la implementación del Netflow collector y la consola de análisis.
Una vez tenemos los equipos configurados a nivel de red y por lo tanto, existe conectividad entre ellos, configuramos el colector; para ello, instalamos las herramientas flow-tools en nuestro sistema y configuramos el servicio indicando en el fichero de configuración /etc/flow-tools/flow-capture.conf la información del dispositivo de red que nos enviará la información; por cada dispositivo añadiremos al fichero de configuración una entrada como la siguiente:
-w /var/netflow/flows/completed/router 0/172.18.0.200/9995 -S1
Indicando el directorio donde almacenaremos la información enviada ordenada por fecha (/var/netflow/flows/completed/router), los datos de red del dispositivo de la forma Dirección Local/Dirección Remota/Puerto, por lo que con el parámetro 0/172.18.0.200/9995, indicamos que recibimos información del dispositivo con dirección IP 172.18.0.200 a través del puerto 9995 de cualquiera de las direcciones IP del servidor y en intervalos de un minuto. Una vez arrancado el servicio, ya podemos recibir la información de dispositivo de red.
A continuación procedemos a configurar el servicio Netflow en el router (algunos de éstos comandos son opcionales):
# Indicamos el tiempo durante el cual flujo activo antes de expirar de la caché Router(config)#ip flow-cache timeout active 1 # Indicamos el número de entradas en la caché Router(config)#ip flow-cache entries 20 # Interfaz que usaremos para conectar con el colector Router(config)#ip flow-export source FastEthernet0/0 # Versión del protocolo Router(config)#ip flow-export version 5 # Dirección IP y puerto de colector Router(config)#ip flow-export destination 172.17.2.23 9995 # Captura de flujos del aplicaciones más usadas Router(config)#ip flow-top-talkers # Maximo número de aplicaciones Router(config-flow-top-talkers)# top 20 # Criterio de ordenación Router(config-flow-top-talkers)# sort-by bytes # Filtro de flujos Router(config-flow-top-talkers)# match destination port min 0 max 65535 # Interfaz que captura flujos Router(config)#interface FastEthernet0/0 # Activamos netflow para el tráfico inbound Router(config-if)# ip flow ingress # Activamos netflow para el tráfico outbound Router(config-if)# ip flow egress # Activamos la cache netflow para el enrutamiento Router(config-if)# ip route-cache flow
Llegados a este punto, el dispositivo está en disposición de capturar los flujos de tráfico:
Router#show ip flow export Flow export v5 is enabled for main cache Exporting flows to 172.17.2.23 (9995) Exporting using source interface FastEthernet0/0 Version 5 flow records 168 flows exported in 74 udp datagrams 0 flows failed due to lack of export packet 0 export packets were sent up to process level 0 export packets were dropped due to no fib 0 export packets were dropped due to adjacency issues 0 export packets were dropped due to fragmentation failures 0 export packets were dropped due to encapsulation fixup failures Router#show ip flow top-talkers SrcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Bytes Fa0/0 172.17.2.23 Local 172.18.0.200 06 0016 A4B2 60K Fa0/0 172.17.2.23 Local 172.18.0.200 06 A332 0017 2567 2 of 20 top talkers shown. 2 of 2 flows matched. Router#show ip cache flow IP packet size distribution (19470 total packets): 1-32 64 96 128 160 192 224 256 288 320 352 384 416 448 480 .000 .056 .606 .007 .005 .005 .004 .004 .004 .004 .298 .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, 278544 bytes 2 active, 4094 inactive, 170 added 4303 ager polls, 0 flow alloc failures Active flows timeout in 1 minutes Inactive flows timeout in 15 seconds IP Sub Flow Cache, 21640 bytes 2 active, 1022 inactive, 170 added, 170 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 TCP-Telnet 7 0.0 99 41 0.2 29.0 6.0 TCP-other 44 0.0 155 314 2.0 40.5 5.9 UDP-other 76 0.0 154 74 3.4 0.5 15.5 ICMP 41 0.0 1 139 0.0 0.7 15.4 Total: 168 0.0 114 158 5.6 12.2 12.6 SrcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Pkts Fa0/0 172.17.2.23 Local 172.18.0.200 06 0016 A4B2 172 Fa0/0 172.17.2.23 Local 172.18.0.200 06 A332 0017 35
A continuación, como gestores de red y a través de la consola de análisis que proporciona flow-tools, ya somos capaces de mostrar la información enviada de una fecha concreta y almacenada en el colector.
Linux:/# flow-cat /var/netflow/flows/completed/test/2013/2013-05/2013-05-15/* | flow-print srcIP dstIP prot srcPort dstPort octets packets 172.18.0.150 172.18.0.200 1 0 0 518880 360 172.17.0.87 172.18.0.200 6 22 15042 83196 282 172.18.0.150 172.18.0.200 6 55215 23 9560 239 172.17.2.23 172.18.0.200 17 44186 161 71 1 172.17.2.23 172.18.0.200 17 50078 161 71 1 172.17.2.23 172.18.0.200 17 40590 161 73 1 172.17.2.23 172.18.0.200 17 44599 161 73 1 172.17.2.23 172.18.0.200 17 59577 161 73 1
Lógicamente, con estos datos almacenados, es posible configurar una interfaz gráfica, como por ejemplo el plugin Flowview de Cacti, para recoger esta información almacenada y presentarla de forma más amigable para el gestor, pudiendo filtrar los flujos recibidos y crear gráficas por puertos o direcciones IP (pinchar en la imagen para ampliarla).
Para acabar, flow-tools nos permite crear filtros de captura para analizar los flujos recibidos en base a patrones. Si por ejemplo queremos obtener los flujos de tráfico SSH, podríamos crear en un fichero (/tmp/filter) un filtro como el siguiente:
filter-primitive SSH type ip-port permit 22 filter-definition FlujoSSH match ip-destination-port SSH
Y aplicar el filtro a la información almacenada un día concreto:
Linux:/# flow-cat /var/netflow/flows/completed/test/2013/2013-05/2013-05-15/* | flow-nfilter -F FlujoSSH -f /tmp/filter | flow-print srcIP dstIP prot srcPort dstPort octets packets 172.18.0.150 172.18.0.200 6 34498 22 44 1 172.18.0.150 172.18.0.200 6 33169 22 44 1 172.18.0.150 172.18.0.200 6 63712 22 44 1 172.18.0.150 172.18.0.200 6 61025 22 44 1 172.18.0.150 172.18.0.200 6 43271 22 44 1 172.18.0.150 172.18.0.200 6 44450 22 44 1 172.18.0.150 172.18.0.200 6 33121 22 44 1 172.18.0.150 172.18.0.200 6 63119 22 44 1 172.18.0.150 172.18.0.200 6 37077 22 44 1 172.18.0.150 172.18.0.200 6 35145 22 44 1 172.18.0.150 172.18.0.200 6 59776 22 44 1 172.18.0.150 172.18.0.200 6 52694 22 44 1 172.18.0.150 172.18.0.200 6 44754 22 44 1
Con ésta funcionalidad y aunque hay aplicaciones dedicadas a ello, no sería complejo crear un agente que analizara periódicamente los flujos recibidos por el colector en busca de patrones sospechosos o cambios en el uso de la red, como por ejemplo un aumento del uso del protocolo telnet en la red con respecto a información anterior, generando una alerta en nuestro sistema de monitorización.
Muy interesante tu artículo. Hace tiempo escribí en mi blog cómo hacer un uso completo de netflow. Desde cómo configurar un router a montar un servidor que almacene los datos, y lógicamente extraer información útil.
Por si a alguien le puede ser de interés:
http://puppetlinux.blogspot.com.es/search/label/netflow
Muchas gracias por la información, Javier.
Muy buen artículo manuel.
Gracias por el aporte javier, buena explicación.