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.
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?
Es posible que falte la configuracion de apache «ExecCGI»
FIjese que estamso interessado en adquirir una plataforma de monitoreo para unos routers MiKroTik series RB951 , por favor avisme si me pueden ayudar
hola fernando yo seguí esta guía y quedo: https://www.server-world.info/en/note?os=Debian_9&p=httpd&f=2
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
Sigo con un error 404 alguna idea
>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
asi es, gracias por el dato.
pudiste lograrlo?
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
Hola! excelente aporte!
logre instalar todo y comenzar a colectar datos de mi red. lo que no puedo hacer todavia es visualizar los datos en la web.
al ingresar en http://IP_SERVER_COLLECTOR/pnrg me aparece como si fuera una carpeta web y no un html en si.
En que le estoy errando?
Me autorespondo. el movimiento de archivos no se realizó correctamente al momento de ejecutar
cuando ejecute el pnrg-wrapper.sh me di cuenta por los errores.
Ahora anda, pero tengo el problema del otro user, no aparecen las graficas, solo el codigo html en cda item.
para los que no vean las graficas, deben habilitar el mod cgi en apache2. se hace con:
sudo -i
# a2enmod cgi
luego restart el service
# /etc/init.d/apache2 restart
probado en Debian10
Por si erraron el archivo de configuración de Apache como yo, es:
/etc/apache2/sites-enabled/000-default.conf
(conf al final)
y en ubuntu 20.04 no ejecutó los CGI hasta que agregue un +ExecCGI (con el +)
Gracias por la guía!
A mi me funciono todo pero no muestra datos en las graficas, salen vacias como si no recibiera datos, sin embago enel comando si se visualizan en modo texto. alguine sabe como solucionarlo?
Hola, funciona perfecto, pero en la lista de ips, a mostrar, me muestra cualquiera, cuando en el archivo network list tengo solo la sub red 172.16.12.0/24
no logro hacer que me muestre solo las ips de mi subred.
saludos
Tienes que agregar
networks_file_filter: true
en el directorio /etc/pmacct/nfacctd.conf
gracias por tu aporte!
Buenas, una consulta cuando trato de ejecutar pmacct -s -p /tmp/pmacct_in.pipe me sale un cartel de que no existe el archivo .pipe
Por otro lado cuando ejecuto el /etc/pmacct# netstat -punlt|grep 5055 para probar si el colector esta escuchando los comandos son inexistentes
Uso Ubunto server 20
Gracias por la ayuda!
Buenos días estimados, me pasó lo mismo que no aparecían los gráficos, lo que tuve que hacer para solucionarlo en mi case fue #a2enconf cgi-enabled