Instalacion de MRTG (monitoreo) Debian
Vamos a poner a funcionar en GNU/Linux Debian la utilidad MRTG. MRTG sirve, entre otras muchas cosas, para hacer gráficas de las estadísticas de tráfico de red que soporta un servidor de Internet. Es decir, que nos servirá para ver qué niveles de tráfico soporta el servidor, tanto el cómputo general de ancho de banda (de subida y de bajada) como el desglose en los diferentes servicios (http, smtp, nntp, etc…).
Necesitaremos instalar los paquetes: mrtg, mrtg-contrib y mrtgutils. Para ello utilizaremos el sistema de instalación de paquetes que traiga nuestra distribución de GNU/Linux.
Como usuario root haremos:
Una vez descargado e instalado podemos listar en Debian los paquetes:
ii mrtg 2.9.17-4 Multi Router Traffic Grapher
ii mrtg-contrib 2.9.17-4 Multi Router Traffic Grapher (contributed fi
ii mrtgutils 0.4 Utilities to generate statistics for mrtg
Primero de todo editaremos el fichero de configuración de MRTG situado en /etc/mrtg.cfg. Hemos de dejar tan solo las líneas siguientes (algunas tendremos que escribirlas enteras):
Language: spanish
WriteExpires: Yes
Options[_]: growright
Analicemos un poco mejor estas 4 líneas para adecuarlas a nuestras necesidades.
WorkDir
Aquí colocaremos el directorio dónde queremos que se generen los documentos web e imágenes con las estadísticas de tráfico. Por tanto se suele poner /var/www/mrtg, pero podremos poner la ubicación que queramos (recordando este hecho en las referencias sucesivas de este documento).
Language
Evidentemente esto es el idioma de nuestra elección. Tenemos la lista de idiomas en: man mrtg-reference.
WriteExpires
Si ponemos Yes, haremos que mrtg cree un documento con extensión .meta para cada archivo que genere. Allí se indica al servidor web (en mi caso Apache) la fecha de expiración de cada documento (o página web). Es decir, mrtg suele marcar los archivos de las estadísticas con un .meta para que expiren al tiempo que hayamos fijado y el cliente tenga que actualizar automáticamente la web. Así cada 5 minutos, por ejemplo, se actualizan las páginas de mrtg que estamos viendo en el navegador web.
Options[_]: growright
Ponemos la opción growright para que los gráficos aparezcan por la derecha y se vayan corriendo hacia la izquierda. Si no ponemos este comando lo hará justo al revés. Aquí ya entran los gustos de cada uno, yo prefiero tenerlo así 🙂
El siguiente paso es generar estadísticas del tráfico total que pasa por alguna de nuestras interfaces de red (repetiremos este proceso para todas las que tengamos o queramos poner). Por ejemplo, yo tengo conectada eth1 a Internet, de modo que será la que monitorice. Para ello pondré al final del fichero /etc/mrtg.cfg lo siguiente:
MaxBytes1[eth1]: 32000
MaxBytes2[eth1]: 16000
Title[eth1]: Análisis del tráfico total en eth1
YLegend[eth1]: Tráfico
PageTop[eth1]:
Análisis del tráfico total de Internet<\H1>
Esto nos generará en el sitio dónde le hayamos indicado en el punto anterior una página web con estas estadísticas de nombre base: eth1.html (es decir, lo que hayamos puesto entre los corchetes).
Resultan evidentes los campos que estamos indicando, pero comentémoslos un poco (más detalles en las páginas del manual):
Target
Aquí ponemos el path a un ejecutable o script que saca las estadísticas que queremos acumular. En este caso se trata de un programa que viene con la instalación que hemos hecho de mrtg. Si ejecutáramos este programa nos saldrían datos del tráfico por la interface que le indiquemos.
MaxBytes
Aquí le indicaremos el número máximo de bytes que puede recoger como válido. Ahora estamos monitorizando una interface de red de 10Mbps, de modo que lo deberíamos limitar a 1250000, sin embargo como (en mi caso) está conectada a un Router ADSL 256/128 pues lo pondré limitado a 32000. Pero como vamos a monitorizar dos variables, tráfico de entrada y tráfico de salida pues hemos de indicarle los correspondientes límites en cada caso con las variables MaxBytes1 y MaxBytes2. Al ser un ADSL 256/128 pues el tráfico de salida lo limitaré a 16000.
NOTA: Suele ser habitual poner el mismo límite para ambos en una sola orden: “MaxBytes[loquesea]: 12345”
Title
Evidentemente aquí irá el título de la página web que estamos generando.
YLegend
Esto es lo que queremos que aparezca en la leyenda vertical de los datos. Aquí estamos monitorizando en la vertical el volumen de tráfico, por eso ponemos lo que ponemos.
PageTop
Aquí podemos introducir algo de código HTML para la cabecera de la página. En este ejemplo hemos puesto un título en una cabecera
A continuación tendremos que ejecutar mrtg para iniciarlo. Como root haremos:
La primera vez que hagamos esto es posible que salgan algunos Warnings. NO hay que preocuparse. Volveremos entonces a ejecutar el mismo comando hasta que ya no salga ningún Warning
Ahora ya podemos comprobar que se nos ha generado la página web en el sitio que indicamos. Como hemos puesto de nombre eth1 pues el documento principal será eth1.html.
A partir de ahora el mrtg se ejecutará cada 5 minutos. Podemos comprobar que se ha metido en el cron mirando en /etc/cron.d e incluso modificar el tiempo de ejecución:
-rw-r–r– 1 root root 137 feb 10 2002 mrtg
mimaquina:~# cat /etc/cron.d/mrtg
0-55/5 * * * * root if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg.cfg ];
then /usr/bin/mrtg /etc/mrtg.cfg >> /var/log/mrtg/mrtg.log 2>&1; fi
Y hasta aquí tenemos una gráfica con el tráfico saliente y entrante que recibe nuestro servidor conectado a Internet. Si tenemos más interfaces de red que controlar haremos lo mismo para cada una de ellas.
Tráfico HTTP o web.
Supongamos que tenemos un servidor web y queremos saber el ancho de banda que está consumiendo a lo largo de los días.
Bien, tendremos que hacer algo muy parecido al caso anterior, pero ahora necesitaremos un nuevo script o programa que nos muestre las estadísticas de tráfico por el puerto 80, que es el de http o web. Aquí entra el firewall de Linux, IPtables.
En mi caso empleo el script para IPtables monmotha. Este script o firewall es muy sencillo de utilizar y configurar. Hemos de modificarlo para colocar nuestra configuración, permitir el tráfico en los puertos que nos interesen, etc… Por tanto voy a colocar mis reglas de contabilidad de IPTables directamente en este script.
Comencemos. Lo primero es editar el script monmotha e ir a la sección dónde pone:
# Output to /dev/null in case they don’t exist from a previous invocation
echo -n “Creating chains: “
for chain in ${FILTER_CHAINS} ; do
${IPTABLES} -t filter -F ${chain} > /dev/null 2>&1
${IPTABLES} -t filter -X ${chain} > /dev/null 2>&1
${IPTABLES} -t filter -N ${chain}
echo -n “${chain} “
done
echo
Y justo debajo de este último echo pondremos las siguientes líneas de contabilidad referentes al tráfico por el puerto 80 o HTTP:
${IPTABLES} -N WebOut
${IPTABLES} -A WebIn -j INETIN
${IPTABLES} -A WebOut -j INETOUT
${IPTABLES} -A INPUT -p tcp –dport 80 -j WebIn
${IPTABLES} -A OUTPUT -p tcp –sport 80 -j WebOut
Ahora es el momento de volver a “lanzar” el firewall (o sea, ejecutar el script monmotha).
Si no tenemos monmotha podemos insertar a mano las reglas en IPtables. La idea consiste en que hemos de crear primero un par de cadenas de contabilidad, una para el tráfico http entrante y otra para el saliente. Por ejemplo:
mimaquina:~# /sbin/iptables -N WebOut
Ahora tendremos que enviarla a las cadenas de tráfico de entrada y tráfico de salida. En el caso del firewall monmotha se llaman INETIN y INETOUT, pero pueden tener el nombre que le hayamos designado nosotros. De modo que añadiremos las reglas:
mimaquina:~# /sbin/iptables -A WebOut -j INETOUT
El último paso para las reglas de contabilidad de IPtables de modo manual (sin monmotha) sería unir el tráfico permitido (cadenas INPUT y OUTPUT en el caso del script monmotha) por el puerto que corresponda (80 en este caso) a las cadenas de contabilidad que hemos creado (WebIN y WebOut). Por tanto sería cosa de, sustituyendo los nombres de cadenas que correspondan, hacer:
mimaquina:~# /sbin/iptables -A OUTPUT -p tcp –sport 80 -j WebOut
El siguiente paso para monitorizar el tráfico HTTP es hacernos un script que pregunte a IPtables por las estadísticas de tráfico por el puerto 80 (gracias a las reglas que acabamos de poner). Además este script deberá producir una salida “al gusto” de mrtg. Lo colocaremos dónde queramos, habitualmente se coloca dentro del directorio /root/bin o bien en /usr/local/bin, como prefiramos.
Llamaremos a este script portstat.web y tendrá el siguiente contenido:
statname=”Servidor Web”
uptime=`uptime | awk ‘{print $3}’`” dias, “`uptime | awk ‘{print $5}’`” horas”
statin=`/sbin/iptables -L -n -x -v | /bin/grep -A 12 INPUT | /bin/grep WebIn | /usr/bin/awk ‘{print $2}’`
statout=`/sbin/iptables -L -n -x -v | /bin/grep -A 12 OUTPUT | /bin/grep WebOut | /usr/bin/awk ‘{print $2}’`
echo $statin
echo $statout
echo $uptime
echo $statname
Una vez creado este fichero le daremos permisos de ejecución mediante el comando “chmod 744 portstat.web”.
Por último editaremos el fichero /etc/mrtg.cfg para que se generen las estadísticas de tráfico web. Allí tendremos que poner, al final de todo, lo siguiente:
Title[web]: Tráfico Web
PageTop[web]:
Tráfico Web
MaxBytes[web]: 30720
YLegend[web]: Bytes/s
ShortLegend[web]: B/s
Dónde las opciones que hemos puesto ya las describimos antes o se encuentran detalladas en “man mrtg-reference”.
Ahora se nos habrá creado automáticamente toda la serie de documentos HTML con las estadísticas de tráfico por el puerto HTTP u 80. Además se habrán colocado en el directorio dónde indicamos que se colocasen las estadísticas, en nuestro caso en /var/www/mrtg. El documento principal con las estadísticas de tráfico HTTP se llamará web.html (así lo hemos indicado en el /etc/mrtg.cfg.
Tráfico SMTP o de correo.
Ahora repetiremos el proceso anterior para monitorizar el tráfico SMTP o de correo electrónico. En este caso el puerto implicado es el 25.
Primero colocamos las reglas de contabilidad descritas en el apartado anterior. Recordemos que hemos de colocarlas inmediatamente debajo de las que colocamos para el caso HTTP de antes, en el script de firewall Monmotha.
${IPTABLES} -N SmtpOut
${IPTABLES} -A SmtpIn -j INETIN
${IPTABLES} -A SmtpOut -j INETOUT
${IPTABLES} -A INPUT -p tcp –dport 25 -j SmtpIn
${IPTABLES} -A OUTPUT -p tcp –sport 25 -j SmtpOut
Si no tuviésemos monmotha procederíamos del modo descrito en el caso de Tráfico HTTP, dónde se explica cómo introducir manualmente las reglas IPtables.
Relanzamos el firewall y, a continuación, creamos el script que leerá los datos de tráfico por el puerto 25. Su nombre es portstat.smtp y contiene lo siguiente:
statname=”Servidor Smtp”
uptime=`uptime | awk ‘{print $3}’`” dias, “`uptime | awk ‘{print $5}’`” horas”
statin=`/sbin/iptables -L -n -x -v | /bin/grep -A 12 INPUT | /bin/grep SmtpIn | /usr/bin/awk ‘{print $2}’`
statout=`/sbin/iptables -L -n -x -v | /bin/grep -A 12 OUTPUT | /bin/grep SmtpOut | /usr/bin/awk ‘{print $2}’`
echo $statin
echo $statout
echo $uptime
echo $statname
Y ya sólo queda modificar el /etc/mrtg.cfg poniendo lo siguiente al final de todo:
Title[smtp]: Tráfico SMTP
PageTop[smtp]:
Tráfico SMTP
MaxBytes[smtp]: 30720
YLegend[smtp]: Bytes/s
ShortLegend[smtp]: B/s
De nuevo, tras todo esto, tendremos estadísticas de tráfico SMTP en el sitio que le indicamos, centradas en el archivo HTML: smtp.html.
Uniendo las gráficas de todos los tráficos.
Hasta ahora hemos ido generando en nuestro directorio web (en este manual lo hemos colocado en /var/www/mrtg/) una serie de páginas web con estadísticas de tráfico total, tráfico web, smtp, etc…
El siguiente paso natural es generar un index.html que enlace a todas estas estadísticas.
Lo que hemos de hacer es situarnos en el directorio correspondiente, /var/www/mrtg/, dónde están todas las gráficas y ejecutar lo siguiente:
Si miramos con nuestro navegador esta página index.html que se ha generado veremos el conjunto de nuestras estadísticas con enlace al detalle de cada una de ellas.
Puede ser que no nos guste cómo ha quedado el index.html, en este caso podemos simplemente editar este fichero y dejarlo a nuestro gusto. Para eso se requieren algunos conocimientos de lenguaje HTML.
Salu2!