Close

No eres miembro aún? Regístrate ahora.

lock and key

Ingresar en su cuenta.

Account Login

Olvidó su contraseña?

MONITOREO de TRAFICO con MIKROTIK Y NETFLOW

Una pregunta recurrente que me suelen hacer es la siguiente…

¿…cómo monitorear el total de tráfico (subida y bajada), de nuestra red de clientes / hosts, de manera tal que podamos visualizar el tráfico  IP por IP de manera individual…?

Algunos administradores directamente crean “queues simples” en el routeador Mikrotik , y luego, la herramienta graph (del menú
tools“), crea automagicamente las gráficas dentro del propio Mikrotik.

Sin embargo, no siempre es efectiva esa herramienta, ya sea porque puede ser que no utilicemos queues simples, … o porque no queremos sobrecargar el router (ya que los gráficos son creados, actualizados, procesados y almacenados en el mismo), … o porque a veces sucede que el router pierde éstos gráficos, por diversos motivos.

Bien, desde mi punto de vista la mejor manera que yo he encontrado al día de hoy de hacerlo es mediante la utilización del protocolo NetFlow


Netflow se ha convertido en un estándar de la industria de monitoreo de tráfico de red,
y actualmente está soportado para varias plataformas (además de Cisco)

Dado a que Mikrotik dispone de NetFlow, al activar el mismo lo que sucede
es que el Router comienza a enviar pequeños trozos de información
a un servidor (también llamado “colector”) Netflow , que es quien recibe
información del router (o sonda o “exporter“), la almacena y procesa.

Luego con esta información es posible elaborar gráficos del tráfico.


Más información sobre NetFlow http://es.wikipedia.org/wiki/Netflow


Lo primero que vamos a necesitar es un servidor (colector) que reciba los paquetes NetFlowenviados por el router (sonda).
Para el desarrollo del presente ejemplo, optamos por un servidor Linux Debian.

No es el propósito de éste artículo indicar como se monta un Linux Debian. Quienes necesiten informacion al respecto recomiendo el sitio web HowToForge
https://www.howtoforge.com/

Una vez que tengamos en marcha nuestro equipo con Linux Debian, con los siguientes paquetes adicionales podremos montar nuestro colector “NetFlow

  • apache2 (para poder desplegar el gráfico por web)
  • pmacct (paquete de linux que contiene el colector netflow)
  • pnrg (pequeña aplicación que realiza gráficos a partir de los informes generados por pmacct)


Como señalamos, el paquete que contiene el colector NetFlow en Linux es PMACCT, el cual instalaremos así:

aptitude install pmacct

Dicho paquete pmacct incluye ademas:

  • pmacctd: convierte al Linux en una sonda (o “exporter”), de cada paquete que lo atraviesa.
    No lo vamos a utilizar dado a que en éste escenario el servidor Linux no actúa como sonda, sino en realidad lo vamos a configurar como “colector”
  • nfacctd: es la aplicación que vamos a utilizar y es la que realmente ”colecta” paquetes NetFlow proveniente de la “sonda” o “exporter”
  • pmacct: (no confundir con pmacctd) es la aplicacion que lee los paquetes netFlow colectados por “nfacctd” y permite mostrar estadísticas y hacerlos humanamente
    leibles.

Existen otras aplicaciones incluidas en el paquete como sfacctd y uacctd que son similares pero
trabajan sobre variaciones del protocolo NetFlow.

Rápidamente diremos que sfacctd es el colector del protocolo sFlow (http://www.sflow.org)
y uacctd es el colector basado en “Linux Netlink ULOG” (http://rlworkman.net/howtos/ulogd.html)

Lo siguiente que vamos a hacer es quitar del proceso de booteo el pmacctd ya que el paquete lo
activa automáticamente cada vez que arranca la maquina Linux. Para ello

update-rc.d -f sfacctd remove
update-rc.d -f uacctd remove
update-rc.d -f pmacct remove

Con ésto, sólo quedará activo el servicio “nfacctd“, es decir el colector NetFlow, el cual
es el que nos interesa ya que recibirá del router Mikrotik (“sonda“) los paquetes NetFlow

Ahora configuramos nfacctd:

Podemos renombrar el archivo original para no perderlo:

mv /etc/pmacct/nfacctd.conf /etc/pmacct/nfacctd.conf.dist

Y ahora creamos un archivo nuevo de configuración:

vim /etc/pmacct/nfacctd.conf
!
! NFACCTD CONFIGURATION, ACEPTAR TRAFICO DESDE MIKROTIK 
! TRAFFIC FLOW.
!
debug: false
daemonize: true
!
plugin_buffer_size: 80524
plugin_pipe_size: 18052324
!
networks_file: /etc/pmacct/hosts.def
!
! IMPORTANTE DEFINIR EL PUERTO QUE ESCUCHARA EL COLECTOR
! LUEGO EN EL MIKROTIK DEBEMOS INDICAR ESTE NUMERO DE PUERTO
!
nfacctd_port: 5055
!
!
! NOS INTERESA EL TRAFICO IN/OUT
!
plugins: memory[in], memory[out]
!
aggregate[in]: dst_host
aggregate[out]: src_host
!
! LA INFORMACION DE LOS FLOWS RECIBIDOS SE ALMACENARA 
! EN LA MEMORIA, PARA LUEGO SER PROCESADA Y GRAFICADA
!
imt_path[in]: /tmp/pmacct_in.pipe
imt_path[out]: /tmp/pmacct_out.pipe

En éste archivo de configuración hacemos referencia al archivo hosts.def, en el cual debemos
indicar las subredes que nos interesan monitorear (en éste caso, las subredes de nuestros clientes)

172.16.0.0/16
10.0.0.0/8
192.168.0.0/16
Rangos de Ips publicas, etc...

Reiniciamos el servicio para que tome los cambios

/etc/init.d/nfacctd stop
/etc/init.d/nfacctd start

Chequeamos que realmente se encuentre funcionando el colector, mediante el comando netstat.

Debería arrojarnos un resultado así:

COLECTOR-SERVER:/etc/pmacct# netstat -punlt|grep 5055
udp6 0 0 :::5055 :::* 4503/nfacctd: Core

Y con esto, finalmente hemos terminado de configurar el colector!!!!


Debemos activar la sonda (Routeador MIKROTIK) para que envie los flujos NetFlow al colector,
es decir el Linux.

Esto es mucho más sencillo de hacer

/ip traffic-flow  set active-flow-timeout=30m cache-entries=1M enabled=yes inactive-flow-timeout=15s \
 interfaces=all
/ip traffic-flow target add address=172.16.21.2:5055 disabled=no v9-template-refresh=20 v9-template-timeout=30m \
 version=9

Con esto, le estamos diciendo al Mikrotik que active el envio de paquetes
NetFlow a 172.16.21.2 (en este ejemplo, la IP de nuestro servidor “colector” Linux) , puerto 5055, usando la version 9 de NetFlow.

Podemos ver la evolución de envío de paquetes NetFlow en IP->TrafficFlow->Status

También podemos chequear la recepcion de paquetes NetFlow en el debian mediante el comando pmacct (no confundir con pmacctd)

pmacct -s -p /tmp/pmacct_in.pipe

o para ver el trafico OUT:

pmacct -s -p /tmp/pmacct_out.pipe

Se tiene que desplegar una tabla así como la siguiente:

COLECTOR-SERVER:/etc/pmacct# pmacct -s -p /tmp/pmacct_out.pipe 
 SRC_IP PACKETS BYTES
 11.0.1.234 2 238
 11.0.3.168 2 238
 11.0.0.42 2 238
 11.1.2.196 2609 181636
 11.1.4.130 208 34155
 11.1.3.163 26 1664
 11.1.1.229 53 5886
 11.0.0.226 2 238
 11.1.0.221 2978 1209665
 11.1.3.122 732 138421
 11.0.2.119 2 238
 11.0.1.152 2 238


PNRG como indicamos arriba es la aplicación que toma los datos almacenados
en el colector, leyéndolos con el comando pmaccct, y con esta información
genera los gráficos buscados.

Para que todo funcione más fácilmente y no tengamos que modificar
la configuración por defecto, lo ideal es instalarlo en /usr/local/pntg

mkdir /usr/local/pnrg
cd /usr/local/pnrg

Lo descargamos:

wget http://www.pmacct.net/pnrg/pnrg-0.1.tar.gz

Descomprimimos:

tar zxvf pnrg-0.1.tar.gz
mv pnrg-0.1/* .

De este modo en /usr/local/pnrg nos quedará instalada la aplicación.

Ahora instalamos algunos paquetes necesarios para el funcionamiento
de Pnrg

apt-get install rrdtool

Ahora debemos indicarle a PNRG que actualice los gráficos cada 5 minutos

echo "*/5 * * * * root ( cd /usr/local/pnrg/; ./pnrg-wrapper.sh )" > /etc/cron.d/pnrg

Y creamos algunos Symbolic Links para que no tengamos que modificar los scripts de Pnrg

ln -s /usr/bin/pmacct /usr/local/bin/pmacct
mkdir -p /usr/local/rrdtool/bin/
ln -s /usr/bin/rrdtool /usr/local/rrdtool/bin/rrdtool
ln -s /usr/bin/rrdcgi /usr/local/rrdtool/bin/rrdcgi

Para que PNRG pueda desplegar los graficos debemos instalar y configurar
el servidor web apache

La instalación es sumamente sencilla:

apt-get install apache2

Vamos a configurarlo de tal modo que podamos acceder a las gráficas
desde http://IP.SERVIDOR/pnrg

Entonces creamos el siguiente enlace simbolico.

ln -s /usr/local/pnrg/spool /var/www/html/pnrg

Y habilitamos la ejecución de los archivos.cgi en /var/www/html/pnrg

Editamos /etc/apache2/sites-enabled/000-default

y agregamos lo siguiente

AddHandler cgi-script .cgi .pl
<Directory /var/www/html/pnrg/>
  Options Indexes ExecCGI
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

Por último, reiniciamos apache para que tome los cambios

/etc/init.d/apache2 restart

Si todo ha salido bien, podemos acceder a las gráficas desde http://IP.SERVIDOR/pnrg

En el menú de la izquierda deberán aparecernos todas las direcciones IPs de  los hosts pertenecientes
a nuestra red declarada en /etc/pmacct/hosts.def
El listado de direcciones IP y sus gráficos aparecen automáticamente…!! 

En noviembre de 2015, en la MUM realizada en Buenos Aires, Argentina, realizamos una breve charla sobre el tema, con cerca de 400 asistentes, agradecemos mucho a la gente de Mikrotik por habernos permitido brindar esta breve introducción.

  1. Fernando02-15-17

    Hola. He seguido su manual, sin embargo el servidor apache me devuelve el código html de los archivos cgi en lugar de las gráficas.Me puede decir que he hecho mal?

  2. Francisco Hernandez Pon03-20-17

    FIjese que estamso interessado en adquirir una plataforma de monitoreo para unos routers MiKroTik series RB951 , por favor avisme si me pueden ayudar

  3. juan02-11-20

    hola fernando yo seguí esta guía y quedo: https://www.server-world.info/en/note?os=Debian_9&p=httpd&f=2

    • Emiliano07-24-20

      Hola Juan! podras darme una mano??
      tengo todo ok, recibiendo datos en el coelctor, pero no me trea ninguna pagina con las graficas el servidor

      Not Found
      The requested URL was not found on this server.

      Apache/2.4.25 (Debian) Server at 192.168.40.245 Port 80

  4. Ygal Rafael Mizrachi08-24-20

    Sigo con un error 404 alguna idea

    • fg09-19-20

      >Sigo con un error 404 alguna idea

      la guia es para apache web root en /var/www
      y las ultimas distros apuntan a
      /var/www/html

    • Emiliano Zabala10-05-20

      pudiste lograrlo?

  5. Andres11-07-20

    buenas seguí todos los pasos y me arroja mismo error:

    Not Found
    The requested URL was not found on this server.

    Apache/2.4.18 (Ubuntu) Server at 10.242.218.174 Port 80

    Slds

Dejar un Mensaje a Emiliano