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 es un protocolo de red desarrollado por Cisco Systems
para  recolectar información sobre tráfico IP.

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

*****************************************************************************
Manos a la Obra!

Lo primero que vamos a necesitar es un servidor (colector) que reciba los paquetes NetFlow enviados 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)

*****************************************************************************
Instalación del colector “NetFlow” en Linux

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
/etc/init.d/pmacctd stop

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_filter: true
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!!!!

*****************************************************************************
Activación de la sonda “NetFlow” en RouterOS

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 dst-address=172.16.21.2 port=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

*****************************************************************************
Instalación de PNRG

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

 

*****************************************************************************

Instalación y configuración de Apache

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/pnrg

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

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…!! 

pnrg

  1. carlos rivero01-03-16

    muy buen tuto, lástima que no me ha funcionado, he seguido todo al pie de la letra y lo he revisado,

    pero no logro ver las gráficas en el navegador

    • NetPro01-03-16

      Gracias por tu comentario, Carlos.
      puedes ser mas especifico?
      fijate si con pmacct estan llegando los flows,
      ¿o sera que no te funcionan los cgi de rrd?

  2. fernando gaviria01-13-16

    Hola buenas tarde;

    Segui paso a paso la guia y no logre los informes.

    utilizo debian 7 no logre recogier la informacion por favor ayudame. es decir los neflow

    anticipo agradecimientos

    • NetPro01-15-16

      has chequeado esto ?

      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

  3. andres trejo01-13-16

    Hola me pueden ayudar con la configuracion, mira que segui tambien todos los pasos y no genero los reportes.

    Gracias.

    • NetPro01-15-16

      has chequeado esto ?

      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

  4. Oscar Caceres02-26-16

    He seguido los pasos al pie, pero no funsiona, el comando
    pmacct -s -p /tmp/pmacct_out.pipe, no arroja nada, es como si no resiviese nada, pero con un analizador de trafico puedo ver que hay comunicasion entre el router y el debian. Alguna comentario que ayude?

    • NetPro03-28-16

      Oscar, revisa si con TCPDUMP si estas recibiendo los flows en LINUX y chequea la configuracion de /etc/pmacct/nfacctd.conf
      y si el proceso nfacctd se encuentra activo.

      saludos!

  5. Carlos Romero03-31-16

    Puede ser interesante que echéis un ojo a esta presentación de Lorenzo Busatti en el último MUM (Mikrotik User Meeting).

    Hay soluciones muy interesantes para monitorizar redes con Mikrotik:

    http://mum.mikrotik.com/presentations/EU16/presentation_3049_1456752471.pdf

    • NetPro03-31-16

      Gracias Carlos,

      En la presentación señalan.
      Sin embargo mi artículo (y presentacion en la MUM de argentina 2016), presenté
      una pequeña aplicacion llamada pnrg, la cual nunca habia visto desarrollada
      con Mikrotik.

      Y es muy practica xq permite muy rapidamente monitorear todo
      el trafico in/out de toda la red.

      En cambio en la presentacion que me señalaste, más bien se busca
      ver el trafico general, por lo que ví, son aplicaciones muy
      grandes , algunas costosas, y no veo que haya una que permita
      muy rapidamente ver el trafico in/out de cada cliente de la red.

      Por ejemplo, señalan la aplicacion Polygraph, cuyo costo
      es de 672 dolares anuales.

      Esa es justamente la finalidad de mi presentación, cuyo
      objetivo es bastante distinto.


      Accede a nuestra Fan Page en Facebook “http://www.facebook.com/NetProAr“.

      • Carlos Romero03-31-16

        Sí, por supuesto! Está claro que su solución para identificar el tráfico de IPs individuales es óptima y además muy barata 🙂

        Solo pretendía mostrar otras posibilidades, ya que muchas empresas requieren una monitorización más completa (e.g., clasificación por aplicaciones, ataques,…). Cierto es que no son gratuitas, pero si el precio es el que comenta me parece totalmente asumible, incluso barato, si con ello obtenemos una solución completa de fácil instalación, sin necesidad de configuración y instalación de paquetes ni similares.

        A algunos, incluso con sus detalladas y claras expliaciones, estas cosas nos cuestan mucho y por eso valoramos la simplicidad y usabilidad en los productos.

        Saludos y gracias por su útil información.

  6. Guillermo Rivas04-20-16

    Me parece una excelente propuesta te felicito, la voy a implementar y te cuento como me va, en lo personal prefiero estas soluciones donde hay que investigar un poquito mas y tener la oportunidad de aportar con mejoras en lugar de ir y pagar para solamente poner next como lo hacen los mediocres #Carlos Romero….

  7. victor04-28-16

    En primer Lugar, agradecer el aporte, si consigo hacerlo funcionar sera una herramienta muy util

    Mi problema es que no consigo generar las graficas en html.

    Puedo acceder a la web y veo el meno de color negro en la parte izquierda pero no aparecen las diferentes subnets.

    He comprobado con los comandos que le recomendastes a otros usuarios y todos muestran los resultados esperados, recibo las tablas con las ips y el trafico, asi que el colector funciona bien. Creo que el problema viene por el cron que genera las graficas. He probado a lanzarlo a mano via ssh y se que trabaja, pero aun asi no consigo ver nada en la web.

    He probado con diferentes navegadores y he vaciado la cache.

    Cualquier comentario será de ayuda.

    Un saludo

    • NetPro08-01-16

      Al clickear en “autoDiscovery”, no te aparecen las direcciones?

  8. victor04-29-16

    Actualizo:

    En caso de usar debian 8 en la ruta de apache hay que añadir html, de forma que quedaria:

    /var/www/html/pnrg/

    Cada vez que useis esa ruta en algun comando

    Con ese cambio me funciona perfectamente.

    Gran post.

    Un saludo

    • NetPro08-01-16

      exacto.

    • Salinas09-30-16

      Me podrias ayudar exactamente con que es agregar la ruta a apache

      • NetPro10-05-16

        Lo que quise decir con eso, es que, por defecto en la mayoria de las distribuciones LINUX la ruta por defecto
        de Apache, o mejor dicho el DocumentRoot, es el directorio que apache busca por defecto cuando un usuario
        abre el puerto 80.

        Es decir cuando alquien coloca en su navegador http://x.y.z.t donde x.y.z.t. es la IP del servidor linux
        que corre Apache, el navegador en realidad busca abrir el puerto 80 el cual es atendido por dicho
        apache server.

        Entonces Apache, en el caso de tener la configuracion por defecto, busca un archvo index.html o index.php,
        en un directorio llamado DocumentRoot.

        En la mayoria de las distribuciones linux, DOcumentRoot es /var/www/
        pero a partir de la version 8 de debian, DocumentRoot es /var/www/html

        por lo tanto, para abrir http://x.y.z.t/pnrg en el tutorial hay que hacer
        el paso de la creacion del enlace simbolico, con el comando “ln”, de la siguiente manera

        Si documentRoot esta en /var/www
        ln -s /usr/local/pnrg/spool /var/www/pnrg

        pero si DocumentRoot esta en /var/www/html entonces:
        ln -s /usr/local/pnrg/spool /var/www/html/pnrg

  9. oscar05-12-16

    Compa benas tardes logre instalar todo a la perfección pero no veo graficos, sale la lista de ip y cuando señalas una muestra es el html de esa Ip no general el grafico.

    • NetPro08-01-16

      verifica si tienes correctamente configurado Apache.

  10. Martin07-23-16

    Que requisitos debe tener una pc para instalar esto? Ya se que se puede instalar en cualquiera, pero por ejemplo para procesar un tráfico de 500mbps, lo hace con cualquier pc o se necesita algo especial?

  11. javier chan07-31-16

    que tal realice todo y logro comunicación entre el debian y mikrotik, tengo apache instalado y corriendo un servidor web local, mediante la cual envio mensajes a mis clientes. lo que no he podido realizar es la forma en la que muestra las graficas

    el siguiente codigo no se donde pegarlo dentro de mi archivo de configuracion. tengo que crear otro virtual host o que es lo que debo de hacer. ?? agradeceria respuesta

    • NetPro08-01-16

      hola Javier,

      tu dices…”el siguiente codigo no se….”
      cual seria dicho codigo?

      • javier chan08-10-16

        AddHandler cgi-script .cgi .pl

        Options Indexes ExecCGI
        AllowOverride None
        Order allow,deny
        Allow from all

  12. Martin08-31-16

    hola. hice todos los pasos, tuve que hacer algunas modificaciones para adaptarlo a debian 8. funciona todo. mi consulta es respecto a los graficos. me muestran informacion erronea…cambien en el mikrotik la version de TrafficFlow por la 5 y creo que ahora los valores son correctos. Por que se puede estar dando esto? por que no puedo usar la version 9?

    • NetPro09-13-16

      Buena informacion Martin, la vamos a probar. Saludos.

  13. Paul08-31-16

    Al descargar el prtg lo descomprimo pero no hay nada en spool/ ya que luego creo un enlace simbólico a /var/www/html/prtg y bueno efectivamente no levanta, cuando reviso dentro de /usr/local/prtg/spool/ hay un sin fin de carpetas infinitas /spool/spool/spool/…..
    Help!

  14. nahuelito10-07-16

    estimado, tengo un problema que no se resolver.
    Segui los pasos y no logro que me funcione bien.
    instale el apache2, el prng y el pmacct.
    Si bien en el netstat no veo la coneccion como vos explicas, si me entra y sale la info como revisando con
    pmacct -s -p /tmp/pmacct_in.pipe
    pmacct -s -p /tmp/pmacct_out.pipe
    osea me genera las tablas y los archivos.
    Pero al cargar la pagina, y hago el autodiscovey me tira las ip en el frame izquierdo y al clikear en el fram derecho me aparece un tecto tipo codigo html, creo que no me estarian caminando los cgi, y no tengo demasiada idea como resolverlo.
    Agradecere tu ayuda
    Nahuel

    • NetPro11-12-16

      exacto, fijate si el apache tiene activado los cgi en la parte de “add handler”

  15. hernan fernandez10-24-16

    Hola muchas gracias por tan valiosa informacion, en mi caso no me a funcionado cuando le doy el comando pmacct -s -p /tmp/pmacct_in.pipe
    el resultado es el siguiente:

    DST_IP PACKETS BYTES

    For a total of: 0 entries

    tarte de hacer un telnet al puerto 5055 y no logre conectar, al parecer no esta activo el servicio aunque si lo levanto y me dice que esta OK

    Si me pueden dar alguna idea se lo agradezco

    Saludos..

    • NetPro11-12-16

      FIjate si efectivamente tu Router OS está enviando los paquetes flow al COlector.

  16. Alex11-13-16

    Buen dia.
    Como puedo hacer para monitorear varias redes. Lo que pasa es que dispongo de varios RB con IP publica, en diferentes ciudades con diferentes proveedores de internet. Las reviso mediante VPN. No se me ocurre como monitorear dichas redes.Puesto que son diferentes proveedores. Alguna idea??

    Saludos desde Ecuador.

  17. Juan Carlos11-30-16

    Muchas gracias por el manual, esta bien detallado, ahora luego de haber seguido los pasos y las correcciones en debian 8, tengo un detalle, al ingresar a cualquier ip en la parte derecha carga la pagina en codigo hmtl, al parecer faltaria activar los cgi en el apache, pero no tengo idea de como hacerlo, por favor si pudiera ayudarme en este punto, gracias.

    • NetPro11-30-16

      Hemos actualizado el articulo para la version 8 de Debian. Fijate en la parte de CGI del articulo , esta explicado.

      • Juan Carlos12-01-16

        Estimado ya hice las correcciones para debian 8 pero no encuentro el archivo del apache para editar el cgi y ver si esta activo, intente ingresa a /etc/apache2/apache2.conf pero no ubico ninguna linea con cgi o con add handler, talvez es otro archivo que se deba editar o me falta cargar algún modulo adicional, espero pueda ayudarme, gracias.

      • Juan Carlos12-01-16

        Estimado tambien te confirmo que se edito todas las rutas agregando /html/ y el archivo /etc/apache2/sites-enabled/000-default.conf pero el problema persiste.

  18. Juan Carlos12-01-16

    Estimado te comento que ejecute el comando a2enmod cgi luego se activo el CGI y ya puedo cargar correctamente las graficas, sin embargo tengo una consulta, procedí a editar el archivo /etc/pmacct/hosts.def con nuevos rangos de ip, pero estos cambios no se reflejan cuando ingreso via web a server y le doy click a AutoDiscovery me sigue saliendo a lista anterior, ya reinicie los demonios y el servidor pero la lista no se actualiza, espero puedas apoyarme en este punto

  19. Nico12-21-16

    Excelente!! los felicito esta muy buena la herramienta al principio no me mostraba la graficas como si el navegador no soportara los cgi le coloque este comanto y funciono perfecto

    sudo a2enmod cgi
    service apache2 restart

    Saludos desde Cararas Venezuela

  20. Saul07-11-17

    Hola,

    Hice toda la configuracion del debian y no tuve problemas. El unico problema que tuve fue al activar el Flow en el Router Mikrotik el cual me arroja el siguiente mensaje “failure: cache too big to fit in memory”
    Mi router es un mikrotik 2011Uias con firmware 3.14
    Gracias y super bien explicado todo!

    Saludos

    • NetPro07-11-17

      claro, prueba bajarle los valores en la seccion ip flow de mikrotik o bien prueba con un router mas grande.
      suerte!!

Dejar un Mensaje