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: