Usando SARG para generar reportes de acceso al proxy Squid
En esta sección veremos como usar la herramienta SARG (Squid Analisis Report Generator) para la generación de reportes para el análisis de los accesos al proxy Squids, con sarg vamos a poder generar reportes sobre demanda y también generar reportes automáticos por día, semana y mes.
Introducción a SARG
SARG es una herramienta de analisis de logs de Squid, tiene soporte para generar reportes en diferentes idiomas, mediante los reportes de uso web usted podra obtener la siguiente información:
- Top Ten de sitios más visitados
- Reportes diarios, semanales y mensuales
- Gráficas semanales y mensuales del consumo por usuario/host
- Detalles de todos los sitios a los que entro un usuario/host
- Descargas
Sarg será configurado para generar reportes web de los accesos a Internet de forma periodica, además de poder ejecutarlo manualmente para generar reportes de fechas, usuarios o dominios en especifico.
- Reporte Manual
Estos reportes son aquellos creados por el administrador del sistema y ejecutados manualmente, pueden ser personalizados en base a diferentes criterios, son almacenados en el directorio
/var/www/squid-reports/Manual
, cada reporte bajo su propio directorio. - Reporte Diario
Estos reportes son generados automáticamente por un trabajo de CRON diario a las 6:25 am y genera un reporte del día anterior, son almacenados en el directorio
/var/www/squid-reports/Diario
, cada reporte bajo su propio directorio. - Reporte Semanal
Estos reportes son generados automáticamente por un trabajo de CRON cada semana a las 6:47 am y genera un reporte del día anterior, son almacenados en el directorio
/var/www/squid-reports/Semanal
, cada reporte bajo su propio directorio. - Reporte Mensual
Estos reportes son generados automáticamente por un trabajo de CRON cada mes a las 6:52 am y genera un reporte del día anterior. Estos reportes son almacenados en el directorio
/var/www/squid-reports/Mensual
, cada reporte bajo su propio directorio.
Siga en la siguiente sección para instalar sarg.
Instalación y configuración básica de SARG
El paquete sarg no viene incluido en todas las distribuciones, en Debian/Ubuntu el paquete esta incluido, si su distribución no incluye el paquete sarg siempre puede compilarlo desde las fuentes.
En Debian/Ubuntu instale el paquete sarg vía apt:
# apt-get install sarg
Sarg lee los parametros de configuración desde el archivo /etc/sarg/sarg.conf
, antes de realizar cambios al archivo de configuración se recomienda que haga una copia de respaldo:
# cp /etc/squid/sarg.conf{,.orig}
Editamos el archivo principal de configuración de sarg para definir los parametros generales:
# vim /etc/squid/sarg.conf
Lo primero que debemos cambiar es la directiva language
, la cual define el lenguaje en el Cambiamos el idioma de los reportes a Español:
language Spanish
Defina la ruta predeterminada del archivo de logs de accesos de squid usando la directiva access_log
, por ejemplo:
access_log /var/log/squid3/access.log
Se recomienda que cambie el titulo de los reportes usando la directiva title
, por ejemplo:
title "Reportes de Acceso Web por Usuarios"
Defina la ruta predeterminada para almacenar los reportes HTML usando la directiva output_dir
, por ejemplo:
output_dir /var/www/squid-reports/Manual
Nota | |
---|---|
Esta ruta solo será usada por los reportes que se generen manualmente, los reportes automáticos usarán rutas diferentes. |
Opcionalmente puede agregar la información del generador de reportes sarg usando la directiva show_sarg_info
.
show_sarg_info yes
También puede incluir el logo de sarg usando la directiva show_sarg_logo
.
show_sarg_logo yes
Cree el directorio para almacenar reportes HTML de sarg:
# mkdir /var/www/squid-reports/Manual
Si desea personalizar más la configuración predeterminada de sarg, se recomienda que lea los comentarios del archivo sarg.conf(5). En la siguiente sección veremos como generar reportes manualmente.
Creación manual de reportes con SARG
En esta sección veremos algunos ejemplos para generar reportes con sarg manualmente, estos reportes pueden ser generados en cualquier momento ya que son bajo demanda, incluso puede usar algún archivo de log anterior para generar un reporte del pasado.
Para generar un reporte de todas las entradas en el archivo /var/log/squid3/access.log
, ejecute:
# sarg
Nota | |
---|---|
Recuerde que el archivo /var/log/squid3/access.log se rota cada semana. |
Los reportes que son generados manualmente desde la línea de comandos son almacenados en el directorio /var/www/squid-reports/Manual, para acceder vía web vaya al URL: http://proxy.example.com/squid-reports/Manual/.
Importante | |
---|---|
El acceso a estos reportes no esta protegido, siga leyendo las siguientes secciones para ver como asegurar el acceso a los reportes. |
Para generar un reporte de una fecha especifica, o rango de fechas en especifico use el parametro -d
, por ejemplo:
# sarg -d 14/04/2010
Nota | |
---|---|
El formato de la fecha es DD/MM/YYYY. |
Si desea generar un reporte usando un rango de fechas, use:
# sarg -d 14/04/2010-15/04/2010
Nota | |
---|---|
El formato de la fecha para un rango es: DD/MM/YYYY–DD/MM/YYYY. |
Si desea generar un reporte para una hora en especifico use la opción -t
para indicar la hora, por ejemplo:
# sarg -d 14/04/2010 -t 12
Nota | |
---|---|
Los formatos de hora soportados son: HH, HH:MM ó HH:MM:SS. |
Para generar un reporte de un usuario en especifico use:
# sarg -d 14/04/2010 -u jperez
Para generar un reporte de un dominio destino en especifico use:
# sarg -d 14/04/2010 -s tuxjm.net
Si desea obtener más información al generar el reporte se recomienda que use la opción -x la cual ejecuta sarg en modo debug, por ejemplo:
# sarg -x -d 14/04/2010 -s tuxjm.net SARG: Init SARG: Loading configuration from: /etc/squid/sarg.conf SARG: Cargando archivo de exclusiones desde: /etc/squid/sarg.hosts SARG: Cargando archivo de exclusiones desde: /etc/squid/sarg.users SARG: Parametros: SARG: SARG: Nombre de host o direccion IP (-a) = SARG: Log del agente de usuario (-b) = SARG: Archivo de exclusiones (-c) = /etc/squid/sarg.hosts SARG: Fecha desde-hasta (-d) = 14/04/2010-14/04/2010 SARG: Direccion e-mail a donde enviar reportes (-e) = SARG: Archivo de configuracion (-f) = /etc/squid/sarg.conf SARG: Formato de fecha (-g) = USA (mm/dd/yyyy) SARG: Reporte IP (-i) = No SARG: Log de entrada (-l) = /var/log/squid3/access.log SARG: Resolviendo direccion IP (-n) = No SARG: Directorio de salida (-o) = /var/www/squid-reports/Manual/ SARG: Usa direccion IP en vez de userid (-p) = No SARG: Sitio accedido (-s) = tuxjm.net SARG: Hora (-t) = SARG: Usuario (-u) = SARG: Directorio temporal (-w) = /tmp SARG: Mensajes de depuración (-x) = Si SARG: Mensajes de procesos (-z) = No SARG: SARG: sarg version: 2.2.5 Mar-03-2008 SARG: Maximum file descriptor: cur=1024 max=1024, changed to cur=20000 max=20000 SARG: Cargando tabla de usuarios: /etc/squid/sarg.usertab SARG: Leyendo archivo de log de accesos: /var/log/squid3/access.log SARG: Registros leidos: 836912, escritos: 65, excluido: 5 SARG: Formato Squid log SARG: Periodo: 2010Apr14-2010Apr14 SARG: pre-sorting files SARG: Creando archivo de periodo SARG: Creando archivo: /tmp/sarg/192.168.92.97 SARG: Ordenando archivo: /tmp/sarg/192.168.92.97 SARG: Creando reporte: 192.168.92.97 SARG: Creando index.html SARG: Fin
Note que nos imprime las opciones que usará para generar el reporte. En la siguiente sección veremos como configurar cron para automatizar la generación de los reportes diarios, semanales y mensales de sarg.
Generación automática de reportes periodicos con SARG
Cree el script para ejecutar los reportes diarios:
# vim /etc/cron.daily/sarg
Con el siguiente contenido:
# Eliminar reportes diarios con mas de 10 dias de antiguedad echo "Rotacion diaria del dia `date +%d-%m-%Y`" >> /var/log/squid3/sarg-rotate.log find /var/www/squid-reports/Diario -type d -mtime +10 -exec rm -rf {} \; >> /var/log/squid3/sarg-rotate.log 2>&1 rm -rf /var/www/squid-reports/Diario/index.html # Ejeuctar sarg #!/bin/bash exec /usr/bin/sarg \ -o /var/www/squid-reports/Diario \ -d "$(date --date "1 day ago" +%d/%m/%Y)" > /dev/null 2>&1 exit 0
Le damos permisos de ejecución al script
# chmod +x /etc/cron.daily/sarg
Cree el script para ejecutar los reportes semanales:
# vim /etc/cron.weekly/sarg
Con el siguiente contenido:
#!/bin/bash LOG_FILES= if [[ -s /var/log/squid3/access.log.1.gz ]]; then LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log.1.gz" fi if [[ -s /var/log/squid3/access.log ]]; then LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log" fi # Get yesterday's date YESTERDAY=$(date --date "1 days ago" +%d/%m/%Y) # Get one week ago date WEEKAGO=$(date --date "7 days ago" +%d/%m/%Y) # Eliminar reportes diarios con mas de 5 semanas (40 dias) de antiguedad echo "Rotacion Semanal del dia `date +%d-%m-%Y`" >> /var/log/squid3/sarg-rotate.log find /var/www/squid-reports/Semanal -type d -mtime +40 -exec rm -rf {} \; >> /var/log/squid3/sarg-rotate.log 2>&1 rm -rf /var/www/squid-reports/Semanal/index.html # Ejecutar sarg exec /usr/bin/sarg \ $LOG_FILES \ -o /var/www/squid-reports/Semanal \ -d $WEEKAGO-$YESTERDAY > /dev/null 2>&1 exit 0
Le damos permisos de ejecución al script
# chmod +x /etc/cron.weekly/sarg
Configurando cron para reportes Mensual:
# vim /etc/cron.monthly/sarg
Con el siguiente contenido:
#!/bin/bash LOG_FILES= if [[ -s /var/log/squid3/access.log.4.gz ]]; then LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log.4.gz" fi if [[ -s /var/log/squid3/access.log.3.gz ]]; then LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log.3.gz" fi if [[ -s /var/log/squid3/access.log.2.gz ]]; then LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log.2.gz" fi if [[ -s /var/log/squid3/access.log.1.gz ]]; then LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log.1.gz" fi if [[ -s /var/log/squid3/access.log ]]; then LOG_FILES="$LOG_FILES -l /var/log/squid3/access.log" fi # Get yesterday's date YESTERDAY=$(date --date "1 day ago" +%d/%m/%Y) # Get 1 month ago date MONTHAGO=$(date --date "1 month ago" +%d/%m/%Y) # Eliminar reportes diarios con mas de 6 meses (180 dias) de antiguedad echo "Rotacion mensual del dia `date +%d-%m-%Y`" >> /var/log/squid3/sarg-rotate.log find /var/www/squid-reports/Mensual -type d -mtime +180 -exec rm -rf {} \; >> /var/log/squid3/sarg-rotate.log 2>&1 rm -rf /var/www/squid-reports/Mensual/index.html # Ejecutar sarg exec /usr/bin/sarg \ $LOG_FILES \ -o /var/www/squid-reports/Mensual \ -d $MONTHAGO-$YESTERDAY > /dev/null 2>&1 exit 0
Le damos permisos de ejecución al script
# chmod +x /etc/cron.monthly/sarg
Cree un archivo index.html en la raíz del directorio de reportes de sarg:
Ahora cree un archivo index.html para mostrar las ligas a los reportes diarios, semanales y mensuales así como los generados manualmente.
# vim /var/www/squid-reports/index.html
Con el siguiente contenido:
<html> <head> <title>Reportes de Acceso Web en proxy.example.com</title> </head> <body> <style> .logo {font-family:Verdana,Tahoma,Arial;font-size:11px;color:#006699;} .title {font-family:Tahoma,Verdana,Arial;font-size:11px;color:green;background-color:white;} </style> <div align=center> <table cellpadding=0 cellspacing=0> <tr> <th> <a href="http://proxy.example.com"> <img src="./images/sarg.png" border="0" align="absmiddle" title="SARG"></a> <font>Squid Analysis Report Generator</font> </th> </tr> <tr> <th>  </th></tr> <table> <table border=0 cellspacing=6 cellpadding=7> <tr> <th align=center nowrap><b><font face=Arial size=4 color=green>Reportes de Acceso Web en proxy.example.com</font></b></th> </tr> <tr> <td align=center bgcolor=beige><font face=Arial size=3><a href=Diario>Diario</a></font></td> </tr> <tr> <td align=center bgcolor=beige><font face=Arial size=3><a href=Semanal>Semanal</a></font></td> </tr> <tr> <td align=center bgcolor=beige><font face=Arial size=3><a href=Mensual>Mensual</a></font></td> </tr> <tr> <td align=center bgcolor=beige><font face=Arial size=3><a href=Manual>Manual</a></font></td> </tr> </table> </div> </body> </html>
Si lo desea puede cambiar el titulo del index:
Cambié la línea:
<title>Reportes de Acceso Web en proxy.example.com</title>
También cambié el URL de los reportes:
<a href="http://proxy.example.com">
También cambilelo en:
<th align=center nowrap><b><font face=Arial size=4 color=green>Reportes de Acceso Web en proxy.example.com</font></b></th>
O use sed:
# sed -i s/proxy.example.com/fwproxy.midominio.com/g /var/www/squid-reports/index.html
Copiamos directorio de imagenes para incluir el logo de sarg en el archivo index:
# cp -r /var/www/squid-reports/Manual/images /var/www/squid-reports/
Para acceder a los reportes web apunte su navegador al URL: http://proxy.example.com/, verá una liga al directorio de cada uno de los reportes arriba mencionados. Si desea proteger el acceso a los reportes se recomienda seguir con la siguiente sección para configurar apache para conexiones SSL y protegido por contraseña.
Protegiendo los reportes de sarg con SSL y contraseña
Crear archivo de configuración para VHOST:
# vim /etc/apache2/sites-available/sarg.conf
/
# Configuracion VHOST para acceder de forma segura # y autenticada por LDAP a los reportes de squid NameVirtualHost *:443 <VirtualHost *:443> ServerAdmin proxy@example.com ServerName proxy.example.com DocumentRoot /var/www/squid-reports # Parametros para configuraciones SSL y certificados SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile /etc/ssl/certs/proxy.example.com.crt SSLCertificateKeyFile /etc/ssl/private/proxy.example.com.key #SSLCACertificateFile /etc/ssl/certs/cacert.pem <Directory /var/www/squid-reports/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all # Permitir solo autenticacion a usuarios autorizados AuthType Basic AuthName "Solo Usurios Autorizados" AuthUserFile /etc/apache2/.sarg-passwd require valid-user # Permitir solo autenticacion a usuarios miembros del grupo LDAP "Domain Admins" #AuthType Basic #AuthBasicProvider ldap #AuthName "Solo Usurios Autorizados" #AuthLDAPUrl ldap://ldap.example.com:389/ou=Users,dc=example,dc=com?uid?sub #AuthzLDAPAuthoritative On #AuthLDAPGroupAttribute memberUid #AuthLDAPGroupAttributeIsDN off #Require ldap-group cn=Domain Admins,ou=Groups,dc=example,dc=com </Directory> </VirtualHost>
Activando modulo SSL en Apache2:
# a2enmod ssl
Crear certificados SSL
# openssl genrsa -out /etc/ssl/private/proxy.example.com.key 1024
Generamos el CSR (Certificate Signing Request):
# openssl req -new -key /etc/ssl/private/proxy.example.com.key -out /etc/ssl/certs/proxy.example.com.csr
Generamos el Certificado usando la llave privada y el CSR:
# openssl x509 -req -days 365 \ -in /etc/ssl/certs/proxy.example.com.csr \ -signkey /etc/ssl/private/proxy.example.com.key \ -out /etc/ssl/certs/proxy.example.com.crt
Creamos archivo de usuarios y contraseñas para sitio web:
# htpasswd -c /etc/apache2/.sarg-passwd proxyadmin New password: Re-type new password: Adding password for user proxyadmin
Activando el VHOST:
# a2ensite sarg.conf
Desactivar el acceso a los reportes por HTTP plano:
# vim /etc/apache2/sites-available/default
/
... ... <Directory /var/www/squid-reports/> Options None AllowOverride None Order deny,allow deny from all </Directory>
Revisando configuración de apache:
# apache2ctl -t
/
# apache2ctl -t -D DUMP_VHOSTS
Reiniciar el servidor apache
# /etc/init.d/apache2 restart
Probar Sitio Seguro:
# aptitude install elinks
/
# elinks https://proxy.example.com