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:


3 comentarios :

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios