29 Diciembre 2005

Siempre me pareció interesante saber cuanto tráfico generas, concretamente saber cuanta cantidad de información recogen de tu máquina.

Para eso en antaño tenía unos scripts que se ejecutaban cada 5 minutos y volcaban la información a la aplicación MRTG, la cual genera unas gráficas muy chulas. MRTG es una especie de base de datos cíclica, recoge la información cada 5 minutos y te genera 4 gráficas:
Una diaria con un muestreo cada 5 minutos
Otra semanal con un muestreo cada 30 minutos
Otra mensual con un muestreo cada dos horas
Otra anual con un muestreo cada día.

A medida que los datos no sirven para pintar las gráficas MRTG los borra así que no nos vale para tener un histórico de lo que ha ido pasando simplemente guarda lo que se muestra en los gráficos. El gran problema que tenía con esta solución eran los scripts, los que yo usaba eran muy pesados y consumían muchos recursos, mi pobre procesador no podía con ellos y además yo no necesito tener una información tan detallada de lo que pasa por mi red.

Luego opte por Bandwidthd , este programa lo vi en blyx.com. Es un programa escrito en C que analiza el tráfico que pasa por la tarjeta de red para los protocolos HTTP, VPN, P2P, TCP y UDP y dibuja un gráfico basándose en estos datos. Diferencia el tráfico saliente y entrante y como punto fuerte tiene la facilidad de configuración y en mi caso el punto débil es que consume muchos recursos de los que no ando muy sobrado.

Así que como última opción he optado por usar el propio iptables para que me indique el uso del ancho de banda, aprovechando que todo el tráfico pasa por él, no es necesario ningún recurso extra para conocer lo mínimo de tráfico de red.

Creamos las reglas que nos interesan en iptables
iptables �??N HTTP
iptables �??N SMTP

Mandamos el tráfico entrante asociado al puerto 80 a la regla creada
iptables -A INPUT -d 172.26.0.4 -p tcp –dport 80 -j HTTP
iptables -A INPUT -d 172.26.0.4 -p tcp –dport 25 -j SMTP

Creamos un script (ej: trafico.sh) para que se ejecute cada cierto tiempo

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DIA=`date +’%u’`
FECHA=`date +’%Y%m%d’`
FICHERO=/root/administracion/trafico.log

echo
echo “FECHA: “$FECHA
iptables -L -v -n | grep ” HTTP||SMTP ”

# Para poner a cero los contadores
iptables �??Z

Y actualizamos el cron para que nos ejecute el script cuando queramos

# Tráfico de red HTTP y SMTP
40 4 * * * /root/administracion/trafico.sh >> /var/log/trafico.log

Si luego queremos tener la información de forma gráfica tendríamos que modificar lo que guardamos en el fichero para que el programa que vaya a interpretar los datos lo entienda.
En mi caso optaré lo más seguro que opte o por MRTG, que ya lo he usado antes o por gnuplot que aunque no es un programa pensado para este tipo de cosas, la gran potencia y flexibilidad que tiene permite adaptarlo a una situación de este tipo.

Anuncios