Mostrando entradas con la etiqueta netflow. Mostrar todas las entradas
Mostrando entradas con la etiqueta netflow. Mostrar todas las entradas

Netflow, controlando el tráfico de red (V)

Llegados a este punto ya tenemos todos los dispositivos de red preparados para enviar (y enviando) datos a nuestro servidor central. Concretamente tenemos un swtich enterasys y un router cisco enviando datos. Nuestra IP local es la 192.168.0.35 y el puerto de escucha, según lo configurado en los equipos remotos tendrá que ser el 9995 UDP. Si ahora probamos a poner a la escucha un tcpdump en nuestro colector, veremos como están a llegar muchos datos a dicho puerto, aunque ninguno de éstos se está recolectando todavía. Al ser datos UDP directamente si no se leen, se pierden sin que pase nada.
shell> tcpdump -i eth0 port 9995
19:38:36.565951 IP 10.0.0.5.9995 > colector.9995: UDP, length 1404
19:38:36.565964 IP 10.0.0.5.9995 > colector.9995: UDP, length  224
19:38:36.678899 IP 10.0.0.5.9995 > colector.9995: UDP, length 1404
19:38:36.947127 IP 10.0.0.5.9995 > colector.9995: UDP, length 1404
19:38:37.080699 IP 10.0.0.5.9995 > colector.9995: UDP, length 1404
19:38:37.152456 IP 10.0.0.5.9995 > colector.9995: UDP, length 1404
Puesto que todos estos datos nos servirán para sacar estadísticas de utilización de la red y saber a qué IP's y puertos se accede más, qué IP's consumen más tráfico, qué página es la más visitada, etc. tiene sentido que nos interesa guardarlos. Para poder encontramos en GNU/Linux el paquete nfdump, que no sirve para otra cosa que recoger y procesar los datos netflow. El paquete nfdump incluye internamente una seria de programas que facilitan el uso y manejo de los datos. En este caso vamos a ver el comando nfcapd, que sirve justamente para el primero de los pasos que hay que dar, ¡colectar los datos!
nfcapd es un daemon de captura de datos netflow. Entre otras de las muchas opciones que tiene (man nfcapd), permite indicarle el puerto de escucha, la versión de los datos netflow que recoger, establecer el nombre del equipo recolector, etc. La principal ventaja que presenta es que permite ejecutarse como daemon del sistema e ir almacenando todos los datos que le llegar al puerto de escucha (por defecto 9995).
Un primer ejemplo de uso,
shell> nfcapd -z -D -T all -l /srv/cap -I cisco -S 2 -P /srv/nfcapd.pid
donde las opciones empleadas fueron,
  • -z
    Comprime los datos almacenados para que ocupen menos. Una buena idea ;-)
  • -D
    Queda en modo daemon.
  • -T all
    Habilita todos los posibles extensiones para los modos de netflow (v5/v7 y v9).
  • -l /srv/cap
    Carpeta sobre la que se almacenarán los datos netflow.
  • -I cisco
    Establece el nombre de los datos guardados a cisco.
    Si los datos que se reciben en este puerto son del equipo cisco, está bien guardarlos así, puesto que quedarán con dicho nombre y luego se podrán lanzar búsquedas.
  • -S 2
    Establece el nivel de árbol de directorios a "%Y/%m/%d/%H, year/month/day/hour".
  • -P /srv/nfcapd.pid
    Crea un PID para el dameon.
Al ejecutar este comando, se abre el puerto 9995 (puerto por defecto) en UDP.
shell> netstat -punta
Active Internet connections (servers and established)
Proto  Recv-Q  Send-Q  Local Address  Foreign Address  State   PID/Program
tcp         0      0   0.0.0.0:22           0.0.0.0:*  LISTEN  1850/sshd
udp         0      0   0.0.0.0:9995         0.0.0.0:*          32192/nfcapd
Los datos almacenados tendrán con este comando una estructura similar a la que se muestra ahora,
shell> ls -R /var/spool/nfcapd
/var/spool/nfcapd:
2012  nfcapd.current nfcapd.pid

/var/spool/nfcapd/2012:
02  03  04

/var/spool/nfcapd/2012/02:
27  28  29

/var/spool/nfcapd/2012/02/27:
09  10  11  12  13  14  15  16  17  18  19  20  21  22  23

/var/spool/nfcapd/2012/02/27/09:
nfcapd.201202270940  nfcapd.201202270945
nfcapd.201202270950  nfcapd.201202270955

/var/spool/nfcapd/2012/02/27/10:
nfcapd.201202271000  nfcapd.201202271010
nfcapd.201202271020  nfcapd.201202271030
nfcapd.201202271040  nfcapd.201202271050
nfcapd.201202271005  nfcapd.201202271015
nfcapd.201202271025  nfcapd.201202271035
nfcapd.201202271045  nfcapd.201202271055

/var/spool/nfcapd/2012/02/27/11:
...
.....
Como se puede observar, los datos almacenados rotan cada 5 minutos de fichero (lo que hace más simple la consulta al ser ficheros más pequeños) y se crean en forma de árbol, un año, debajo de éste los meses y más abajo los días y las horas y sobre cada uno de éstos, cuelga a su vez los ficheros de dicha hora. Para que todo funcione correctamente y los datos almacenados tengan sentido, es muy importante que tanto los equipos emisores como el colector tengan la hora sincronizada.
En caso de que tengamos varios equipos emisores de datos, como puede ser un cisco y un enterasys, podemos ejecutar dos instancias de nfcapd para recolectar los datos, en puertos diferentes para tener un tratamiento especial para cada uno de ellos. Por ejemplo,
shell> nfcapd -z -w -D -T all -p 9995 \
     -l /srv/cisco -I cisco -S 1 \
     -P /var/run/nfcapd.cisco.pid
shell> nfcapd -z -w -D -T all -p 9994\
     -l /srv/enterasys -I enterasys -S 1 \
     -P /var/run/nfcapd.enterasys.pid
Quedando como se observa a la escucha en dos puertos UDP diferentes.
shell> netstat -punta
Active Internet connections (servers and established)
Proto  Recv-Q  Send-Q  Local Address  Foreign Address  State   PID/Program
tcp         0      0   0.0.0.0:22           0.0.0.0:*  LISTEN  1850/sshd
udp         0      0   0.0.0.0:9994         0.0.0.0:*          32192/nfcapd
udp         0      0   0.0.0.0:9995         0.0.0.0:*          32194/nfcapd
Ahora con todos los datos almacenados, sólo queda obtener la información y las estadísticas que los equipos están enviando.


Temas:
Leer más

Netflow, controlando el tráfico de red (IV)


Siguiendo un poco con el tema de obtener datos de desde un router cisco, del que explicamos en el post anterior cómo realizar la configuración, podemos habar también de las diferentes formas que tiene estos router's de agregación de los datos.


Tipos de agregación:
cisco(config)> ip flow-aggregation cache ?
  as                       AS aggregation
  as-tos                   AS-TOS aggregation
  bgp-nexthop-tos          BGP nexthop TOS aggregation
  destination-prefix       Destination Prefix aggregation
  destination-prefix-tos   Destination Prefix TOS aggregation
  prefix                   Prefix aggregation
  prefix-port              Prefix-port aggregation
  prefix-tos               Prefix-TOS aggregation
  protocol-port            Protocol and port aggregation
  protocol-port-tos        Protocol, port and TOS aggregation
  source-prefix            Source Prefix aggregation
  source-prefix-tos        Source Prefix TOS aggregation
Por lo tanto, para hacer uso de las mismas, únicamente hay que indicar qué tipo de agregación se desea, activarla y los datos se enviarán de dicha forma con el tiempo marcado.
Un ejemplo de agregación simple, sería,
cisco(config)> ip flow-aggregation cache as
cisco(config-flow-cache)> cache entries 2046
cisco(config-flow-cache)> cache timeout inactive 200
cisco(config-flow-cache)> cache timeout active 45
cisco(config-flow-cache)> export destination 192.168.0.35 9995
cisco(config-flow-cache)> enabled

En otro ejemplo, tenemos la agregación en función del protocolo que se esté empleando en los paquetes de red. Los datos de netflow así serán enviados cada 45 segundos al servidor agrupados por el protocolo de red.
cisco(config)> ip flow-aggregation cache protocol-port
cisco(config-flow-cache)> cache entries 2046
cisco(config-flow-cache)> cache timeout inactive 200
cisco(config-flow-cache)> cache timeout active 45
cisco(config-flow-cache)> export destination 192.168.0.35 9995
cisco(config-flow-cache)> enabled
En el próximo post sobre netflow ya tocará ver cómo montar bajo GNU/Linux un pequeño servicio que recoja los datos generados por los equipos para poder posteriormente procesarlos y obtener estadísticas de red de interés.

Temas:
Leer más

Netflow, controlando el tráfico de red (III)

En este nuevo post, vamos a ver cómo realizar lo mismo que en el anterior, pero esta vez con un router cisco, que nos permitirá muchas más opciones y métodos para el tratamiento de datos netflow.
Como siempre... nos conectamos al equipo en cuestión por la conexión que esté habilitada, recomendable ssh, y entramos en modo configuración.
Realizamos los siguientes pasos:
  1. Zona horaria
    Para manejar los datos de netflow, el router debe estar en hora para así tener unos datos fiables. Para conseguirlo, en este caso aprovecharemos las facilidades de NTP.
    cisco> configure terminal
    Enter configuration commands, one per line. End with CNTL/Z.
    cisco(config)> ntp update-calendar
    cisco(config)> set ntp client enable
    cisco(config)> ntp server 10.10.100.1
    
  2. Hora del sistema
    Ahora comprobamos que la hora del sistema es válida, para ello,
    cisco> show ntp status
    cisco> show clock
    
  3. Configurar netflow
    Entramos nuevamente en modo configuración del router y observamos los parámetros que tiene para el tipo "ip flow-?". Todos estos parámetros nos permiten realizar una configuración muy óptima y ajustada de netflow y de cómo queremos que trabaje.
    cisco> config
    Configuring from terminal, memory, or network [terminal]? 
    Enter configuration commands, one per line.  End with CNTL/Z.
    cisco(config)> ip flow-?
    flow-aggregation  flow-cache        flow-capture
    flow-export       flow-top-talkers  flow-egress
    
     Configuramos por lo tanto el router para que exporte vía UDP todos los paquetes a nuestro servidor cliente netflow, que se encargará de recolectarlos para posteriormente poder procesarlos. Para ello,
    cisco(config)> ip flow-export destination 192.168.1.35 9995 udp
    cisco(config)> ip flow-export version 9
    cisco(config)> ip flow-cache entries 65536
    
  4. Comprobar configuración
    cisco> show ip cache flow
    cisco> show ip flow export
    
     Y del lado del cliente, observamos que sí hay tráfico UDP en el puerto indicado.
    shell> tcpdump -i eth0 port 9995
    19:38:36.565951 IP 10.0.0.5.9995 > colector.9995: UDP, length 1404
    19:38:36.565964 IP 10.0.0.5.9995 > colector.9995: UDP, length 224
    19:38:36.678899 IP 10.0.0.5.9995 > colector.9995: UDP, length 1404
    19:38:36.947127 IP 10.0.0.5.9995 > colector.9995: UDP, length 1404
    19:38:37.080699 IP 10.0.0.5.9995 > colector.9995: UDP, length 1404
    19:38:37.152456 IP 10.0.0.5.9995 > colector.9995: UDP, length 1404
    


Temas:
Leer más

NetFlow, controlando el tráfico de red (II)

En este post vamos a ver cómo podemos configurar un swtich enterasys para que nos envíe a un colector de este tipo de datos, la información que recaba del tráfico de red. Para que esto funcione en el equipo destino tiene que haber algún tipo de software, que veremos más adelante, que sea capaz de comprender y capturar dicha información. También debe de existir comunicación entre el switch en cuestión y el equipo destino.
En nuestro caso, el equipo a configurar es un Matrix N7. Para ellos, nos conectamos como usuario administrador y realizamos los siguientes pasos:
  • Zona horaria
    Es importante que el equipo esté dentro de una zona horaria reconocida y en la misma que el recolector, para evitar que haya desfases horarios.
    Matrix(su)-> set timezone Madrid +1
    Matrix(su)-> show timezone
    Admin Config timezone: 'Madrid', ...
    Oper  Config timezone: 'Madrid', ...
    
  • Hora del sistema
    La hora del switch debe ser la correcta, para que así los eventos tengan sentido y se puedan asociar hechos a fechas concretas.
    Matrix(su)-> set time 02/21/2012 18:54:41
    Matrix(su)-> show time
    TUE FEB 21 18:54:41 2012
    
  • Configurar netflow
    Matrix(su)-> set netflow ?
     cache              Enable collection for a NetFlow cache
     export-destination Sets the destination address of NetFlow collector
     export-interval    Set the active flow timer value
     export-version     Set data export version
     port               Enable NetFlow collection on a port
     template           Set the V9 template values
    
    Matrix(su)-> set netflow cache enable
    Matrix(su)-> set netflow export-destination 192.168.0.35 9995
    Matrix(su)-> set netflow export-interval 5
    Matrix(su)-> set netflow export-version 9
    Matrix(su)-> set netflow port ge.2.1-6 enable
    
    
  • Comprobar configuración
    Matrix(su)-> show netflow config 
    
    Cache Status:                 enabled
    Destination IP:          192.168.0.35
    Destination UDP Port:            9995
    Export Version:                     9
    Export Interval:              5 (min)
    Number of Entries:             458751
    Inactive Timer:              40 (sec)
    Template Refresh-rate:   20 (packets)
    Template Timeout:            30 (min)
    
    Enabled Ports:
    -----------------
    ge.2.1-6
    
    Disabled Ports:
    -----------------
    lag.0.1-48
    ge.1.1-24
    ge.2.7-54
    
    Matrix(su)-> show netflow statistics
    
    Export Statistics:
    ------------------------------------
    Network Packets Sampled:    62386087
    Exported Packets:             303904
    Exported Records:            8686581
    Export Packets Failed:             0
    Export Records Dropped:        61779
    
  • Comprobar funcionamiento en destino
    shell> tcpdump -i eth0 port 9995
    19:38:36.565951 IP 10.0.0.1.9995 > colector.9995: UDP, length 1404
    19:38:36.565964 IP 10.0.0.1.9995 > colector.9995: UDP, length 224
    19:38:36.678899 IP 10.0.0.1.9995 > colector.9995: UDP, length 1404
    19:38:36.947127 IP 10.0.0.1.9995 > colector.9995: UDP, length 1404
    19:38:37.080699 IP 10.0.0.1.9995 > colector.9995: UDP, length 1404
    19:38:37.152456 IP 10.0.0.1.9995 > colector.9995: UDP, length 1404
    


Temas:
Leer más

Netflow, controlando el tráfico de red (I)

NetFlow es un protocolo de red, escrito por Cisco y que sirve para recabar información sobre el tráfico IP que pasa por un equipo. Actualmente este protocolo es un estándar en prácticamente todos los router's modernos y gracias a ellos, podemos controlar el tráfico de cada IP que pasa por él. De la misma forma que Cisco desarrolló su estándar y el resto de fabricantes lo adaptaron a sus dispositivos, en GNU/Linux existe también una implementación de dicho protocolo, tanto para recolección y procesado de los datos, como para captura de los mismos.


NetFlow actualmente está en la versión 9, aunque la más extendida todavía sigue siendo la versión 5 del mismo, que entre otra información, nos ofrece:
  • Interfaz de entrada/salida del tráfico
  • Timestamps del flujo, con tiempos de comiendo y finalización
  • Número de paquetes y bytes del flujo
  • Toda la información de cabecera de capa 3 (IP origen, IP destino, puertos, protocolo, tipo de servicio, etc.)
  • Flags TCP (en caso de comunicación TCP)
  • Información de rutas (en capa 3)
Una vez introducido el concepto de NetFlow y visto así por encima para qué sirve, en próximos post's veremos cómo poder obtener dicha información de los equipos, bien sean router's, bien sean firewall's linux y cómo almacenarla para posteriormente procesarla.


Temas:
Leer más

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios