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:
mimaquina:~# apt-get install mrtg mrtg-contrib mrtgutils
Una vez descargado e instalado podemos listar en Debian los paquetes:
mimaquina:~# dpkg -l | grep mrtg
  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):
WorkDir: /var/www/mrtg
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:
Target[eth1]: `/usr/bin/mrtg-ip-acct eth1`
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:
mimaquina:~# mrtg /etc/mrtg.cfg
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:
mimaquina:~# ls /etc/cron.d/mrtg
  -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:
# Create new chains
# 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 WebIn
${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 WebIn
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 WebIn -j INETIN
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 INPUT -p tcp --dport 80 -j WebIn
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:
#!/bin/sh
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:
Target[web]: `/root/bin/portstat.web`
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 SmtpIn
${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:
#!/bin/sh
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:
Target[smtp]: `/root/bin/portstat.web`
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:
mimaquina:~/var/www/mrtg# indexmaker /etc/mrtg.cfg > index.html
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!