En este artículo voy a compartir
mi estrategia en general y un script en particular para enviar por correo a los
usuarios de un servidor proxy SQUID sus trazas de navegación a través de la
herramienta SARG.
Como siempre hago, no voy a
dedicar la entrada a mostrar una guía de instalación de SARG ya que en la red
hay en abundancia; siempre prefiero publicar y compartir concretamente las soluciones
que he encontrado a los problemas que se me presentan en el día a día en la administración
de una red que cuenta con servidores Linux y Windows.
SARG es una aplicación web que permite generar
reportes periódicos del log de SQUID, la misma está disponible en los
repositorios de DEBIAN y UBUNTU.apt-get install sarg
Su archivo de configuración se crea en /etc/sarg/sarg.conf
Como comente más arriba para instalar la aplicación me guie fundamentalmente por el siguiente tutorial
http://gutl.jovenclub.cu/wiki/doku.php?id=/tutoriales/sarg
Esta muy buena aplicación también
tiene comandos de consola para generar reportes concretos para un periodo y/o
para un usuario en particular.
Estrategia General
Mi escenario es el siguiente,
tengo un proxy squid corriendo sobre Debian 6.0, los usuarios y contraseña del
proxy están almacenados localmente en un archivo de texto generado por la
herramienta htpasswd. Se desea que todos
los lunes se envié un correo a cada usuario con su traza de navegación de la
semana anterior.
Adicionalmente
se ha configurado el log de squid para que rote mensualmente 13 veces, o sea
que conserve las trazas durante un año de modo que cada fichero de log comprimido contendrá las
trazas de un mes. A continuación mi archivo /etc/logrotate.d/squid
/var/log/squid/access.log {
compress
dateext
rotate 13
missingok
postrotate
test ! -e /var/run/squid.pid ||
/usr/sbin/squid -k rotate
endscript
monthly
olddir /var/log_squid
sharedscripts}
sharedscripts}
Como
se puede apreciar los log rotados se almacenaran en la carpeta /var/log_squid
que previamente debe ser creada.
Envío de las trazas de navegación a los usuarios
A pesar de que SARG tiene la
posibilidad de enviar correo electrónico a través de la interface mail o mailx preferí
implementar mi propia solución utilizando los paquetes ssmtp y mpack. A grandes
rasgos y quizás no este empleando el lenguaje correcto en el mundo Linux (naci
en Windows) ssmtp es un paquete que
va instalar una interface mail o mailx en Linux y mpack permite enviar correos con adjuntos desde la línea de
comandos.
Debo aclarar que el comando sarg va a generar un reporte de utilización
del proxy para un usuario dado, para un intervalo de fecha dado; esto genera
una estructura de carpetas con varios archivos html, en mi caso solo me
intereso el archivo topsites.html que contiene todos los sitios visitados para
el rango de fecha dada.
El
script que veremos más adelante en esencia hará lo siguiente:
- Leer cada usuario de un archivo de texto que contiene la dirección de correo del usuario en cuyo caso el id (parte delante del @) coincide con el id de usuario del proxy.
-
Generar el reporte para cada usuario.
-
Enviar por correo al usuario el archivo topsites.html correspondiente
Viendo esto vamos a la esencia.
- Instalamos
ssmtp y mpack
apt-get install ssmtp mpack
Aclarar
que ssmtp eliminara postfix o sendmail si estuvieran instalados en el server.
- Configuramos
ssmtp
nano /ect/ssmtp/ssmtp.conf
# Usuario a instancia de quien se enviaran los
correos.
root=admin@midominio.cu
# Servidor SMTP de la red
mailhub=192.168.14.3:25
# The
full hostname
hostname=
midominio.cu
FromLineOverride=YES
#AuthUser=
#AuthPass=
Si
tenemos configurada la autentificacion SMTP en el server mail entonces
configuramos convenientemente los 2 ultimos parametros del ssmtp.conf
-
Creamos en la carpeta de squid el fichero que contendrá
las direcciones de correos de los usuarios, recordar que los id coinciden con
los id de usuarios de squid
nano /etc/squid/usuarios-proxy-mail.txt
Contendra algo asi
Como se podrá apreciar más adelante en
el script usamos el @ convenientemente como separador de campos; delante de la
primera @ está el id de usuario squid y luego con esta y el segundo campo quedaría
formada la dirección de correos, el tercer campo es el nombre descriptivo del
usuario.
El
script
- Creamos
un archivo de texto /etc/squid/send_email_nav.sh en la carpeta de squid con el
siguiente contenido; recordar que debemos darle derechos de ejecución con la
orden:
chmod +x /etc/squid/send_email_nav.sh
#!/bin/sh
# Variable directorio padre
dir_padre=/home/rpt-usr-sarg/
# Variables del intervalo de fechas
week=$(date --date "7 days ago" +%d/%m/%Y)
hoy=$(date --date "1 days ago" +%d/%m/%Y)
# Borrar directorios y subdirectorios con datos del
anterior reporte
rm -rf $dir_padre
# Crear directorio padre
mkdir $dir_padre
# Tomar usuarios del fichero
users=$(cat
/etc/squid/usuarios-proxy-mail.txt)
for u
in $users
do
# Tomando usuarios y correos del fichero
id=`echo $u|cut -d@ -f1`
mail=`echo
$u|cut -d@ -f2`
nombre=`echo $u|cut -d@ -f3`
# Creando directorios de usuarios
echo "Creando directorio /home/$id ->
usuario=$id mail=$id@$mail"
mkdir $dir_padre$id
# Generando reportes
sarg -u $id -o $dir_padre$id -d $week-$hoy
#Moverse a la carpeta del usuaro
cd $dir_padre$id
# Buscar el fichero topsites.html desde la carpeta
del usuario
find
-type f -name "topsites.html" -exec cp {} $dir_padre$id \;
# Enviar el correo
mpack -s "$nombre le enviamos su traza de
navegación del $week-$hoy" $dir_padre$id/topsites.html $id@$mail
# Moverse a la carpeta padre
cd ..
done
# fin del script
-
Finalmente programamos la ejecución del script
para todos los lunes a las 7:30 AM (el script contendra las trazas de lunes a domingo de la semana anterior)
Ejecutamos crontab –e
Y escribimos
el siguiente contenido
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
30 7 * * 1 /etc/squid/send_email_nav.sh