squid

Publicado: abril 5, 2013 en Uncategorized

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] 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] 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] 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] 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] Nota
El formato de la fecha para un rango es: DD/MM/YYYYDD/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] 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>&nbsp;
        <font>Squid Analysis Report Generator</font>
      </th>
    </tr>
    <tr>
      <th>&nbsp
    </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

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s