mrtg + iptables

mrtg-iptables

Cómo saber a que hora se consumió ancho de banda de un servidor? , bueno les traigo algo que después de leer mucho implemente, espero que les agrade, les debo la liga de donde saque esto pero es que ciertamente la saque de muchos lados. empecemos con una introducción de mrtg.

mrtg es un servicio de gráficas de consumo de ancho de banda, este servicio tiene la capacidad de graficar cualquier cosa siempre y cuando le mandemos a través de su archivo de configuración 4 parámetros.

no me preocupare mucho de como instalar los servicios ya que este manual es mas bien de la configuración así que ya saben pueden hacer:

rpm -Uvh mrtg-x.x.rpm apt-get install mrtg
emerge mrtg

ahora bien como le pasamos a mrtg los parámetros que necesita pues eso es fácil usaremos algunas reglas de iptables las cuales tienen la función de contar el trafico que pasa a través del servidor desde cierta IP, en mi caso lo instale en un servidor que maneja el proxy asi se cuanto ancho de banda consume un usuario tendiendo su IP.

ok lo primero es crear las dos cadenas de iptables que van a contener el ancho de banda de ip especificada:

/sbin/iptables -N in_ip
/sbin/iptables -N out_ip

claro como adivinaron en lugar de ip pueden poner algo que identifique a la ip ya que como es logico si queremos monitorear muchas ips cada una debe tener sus propias cadenas.

ya con las cadenas que identifican cada ip ahora si creamos las reglas iptables para obtener los números que necesitamos.

/sbin/iptables -A INPUT -s 192.168.0.2 -j in_ip
/sbin/iptables -A OUTPUT -d 192.168.0.2 -j out_ip

como veran en el ejemplo le estamos diciendo a iptables que todo el trafico que viene desde la ip 192.168.0.2 lo debe de mandar a la cadena que creamos en el paso anterior in_ip, y lo mismo para todo lo que va para la misma ip lo mandaremos a la cadena out_ip

listo ya tenemos la primera parte de nuestro monitor mrtg ahora debemos crear el script que nos genere los números que necesitamos.

#!/bin/bash
statname=”192.168.0.2″
uptime=`uptime | awk ‘{print $3}’`” dias, “`uptime | awk ‘{print $5}’`” horas”
statin=`/sbin/iptables -L -v -x | grep in_ip | grep anywhere|awk ‘{print $2}’`
statout=`/sbin/iptables -L -v -x | grep out_ip | grep anywhere | awk ‘{print $2}’`echo $statin
echo $statout
echo $uptime
echo $statname

Con este script lo que hacemos es lo siguiente.

asignamos a la variable statname un nombre para que lo ponga como titulo de nuestro grafico mrtg.

con uptime y awk podemos saber cuantos días lleva arriba nuestro servidor esto es un dato ambiguo ya que nos dice cuanto tiempo el servidor lleva encendido y no cuanto tiempo lleva el cliente conectado, si alguien tiene una mejor idea para este dato haganmelo saber.

las dos siguiente lineas son las buenas con iptables -L -v -x y unos pases con grep y otros con awk podemos obtener los numero tan codiciados, los invito a que a que corran el comando antes de ponerlo en el script para ver que funciona.

# iptables -L -v -x | grep in_ip | grep anywhere | awk ‘{print $2}’

por ultimo imprimimos los cuatro variables con echo. supongamos que nuestro script se llama “/var/obtener_ip”

listo ya tenemos la segunda parte ahora bien necesitamos crear el archivo de configuracion de mrtg, lo habitual es que lo guardemos en /etc/mrtg/mrtg.cfg aunque no es obligatorio lo podemos guardar donde queramos. El archivo serial algo asi como esto:

WorkDir: /var/www/mrtg
Language: spanish
WriteExpires: Yes
Options[_]: growright

Targt[obtener_ip]: `/var/obtener_ip`
MaxBytes1[obtener_ip]: 1024
MaxBytes2[obtener_ip]: 1024
Title[obtener_ip]: Analisis del trafico total en 192.168.0.2
YLegend[obtener_ip]: Trafico
PageTop[obtener_ip]: un nombre

listo las primera cuatro lineas son:
workdir: es donde vamos a gaurdar las graficas
langauje: sobra esxplicar podemos usar spanish
y las otras dos son permisos de mrtg ahora si sigue llamar nuestro script y porner los parametros necesarios con:
target: la ruta de nuestro ip
maxbytes1: numero maximo, yo uso 1024 mi enlace es de un mega
maxbytes2: mismo caso que el anterior
title: pues el titulo de la grafica
ylegend: una leyenda para el eje y
pagetop: a quien le pertenece la grafica

uff ya casi esta listo ahora solo falta hacer que se ejecute cada 5 minutos para que grafique el resultado y veamos como se mueve nuestra gráfica cada 5 minutos, esto lo hacemos con un cron con una linea como esta

0-55/5 * * * * root if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg >> /var/log/mrtg/mrtg.log 2>&1; fi

listo terminamos, espero que les guste esta pequeña practica

somera was were


Deja un comentario