Usando SARG para generar reportes de acceso al proxy Squid Capítulo 7. Monitorización de peticiones y generación de reportes de acceso 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ácas semanales y mensuales del consumo por usuario/host Detalles de todos los sitios a los que entro un usuario/host Descargas Sarg será congurado 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 especico. 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 conguració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 1/8
Sarg lee los parametros de conguración desde el archivo /etc/sarg/sarg.conf, antes de realizar cambios al archivo de conguración se recomienda que haga una copia de respaldo: # cp /etc/squid/sarg.conf{,.orig} Editamos el archivo principal de conguración de sarg para denir los parametros generales: # vim /etc/squid/sarg.conf Lo primero que debemos cambiar es la directiva language, la cual dene el lenguaje en el Cambiamos el idioma de los reportes a Español: language Spanish Dena 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" Dena la ruta predeterminada para almacenar los reportes HTML usando la directiva output_dir, por ejemplo: output_dir /var/www/squid reports/manual 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 conguració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 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/squidreports/manual, para acceder vía web vaya al URL: http://proxy.example.com/squid reports/manual/. 2/8
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 especica, o rango de fechas en especico use el parametro d, por ejemplo: # sarg d 14/04/2010 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 El formato de la fecha para un rango es: DD/MM/YYYY DD/MM/YYYY. Si desea generar un reporte para una hora en especico use la opción tpara indicar la hora, por ejemplo: # sarg d 14/04/2010 t 12 Los formatos de hora soportados son: HH, HH:MM ó HH:MM:SS. Para generar un reporte de un usuario en especico use: # sarg d 14/04/2010 u jperez Para generar un reporte de un dominio destino en especico 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 Init Loading conguration from: /etc/squid/sarg.conf Cargando archivo de exclusiones desde: /etc/squid/sarg.hosts Cargando archivo de exclusiones desde: /etc/squid/sarg.users Parametros: Nombre de host o direccion IP ( a) = Log del agente de usuario ( b) = Archivo de exclusiones ( c) = /etc/squid/sarg.hosts Fecha desde hasta ( d) = 14/04/2010 14/04/2010 Direccion e mail a donde enviar reportes ( e) = Archivo de conguracion ( f) = /etc/squid/sarg.conf Formato de fecha ( g) = USA (mm/dd/yyyy) Reporte IP ( i) = No Log de entrada ( l) = /var/log/squid3/access.log Resolviendo direccion IP ( n) = No Directorio de salida ( o) = /var/www/squid reports/manual/ Usa direccion IP en vez de userid ( p) = No Sitio accedido ( s) = tuxjm.net Hora ( t) = Usuario ( u) = Directorio temporal ( w) = /tmp Mensajes de depuración ( x) = Si 3/8
Mensajes de procesos ( z) = No sarg version: 2.2.5 Mar 03 2008 Maximum le descriptor: cur=1024 max=1024, changed to cur=20000 max=20000 Cargando tabla de usuarios: /etc/squid/sarg.usertab Leyendo archivo de log de accesos: /var/log/squid3/access.log Registros leidos: 836912, escritos: 65, excluido: 5 Formato Squid log Periodo: 2010Apr14 2010Apr14 pre sorting les Creando archivo de periodo Creando archivo: /tmp/sarg/192.168.92.97 Ordenando archivo: /tmp/sarg/192.168.92.97 Creando reporte: 192.168.92.97 Creando index.html Fin Note que nos imprime las opciones que usará para generar el reporte. En la siguiente sección veremos como congurar 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 nd /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" if [[ s /var/log/squid3/access.log ]]; then LOG_FILES="$LOG_FILES l /var/log/squid3/access.log" # 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 nd /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 4/8
# 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 Congurando 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" if [[ s /var/log/squid3/access.log.3.gz ]]; then LOG_FILES="$LOG_FILES l /var/log/squid3/access.log.3.gz" if [[ s /var/log/squid3/access.log.2.gz ]]; then LOG_FILES="$LOG_FILES l /var/log/squid3/access.log.2.gz" if [[ s /var/log/squid3/access.log.1.gz ]]; then LOG_FILES="$LOG_FILES l /var/log/squid3/access.log.1.gz" if [[ s /var/log/squid3/access.log ]]; then LOG_FILES="$LOG_FILES l /var/log/squid3/access.log" # 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 nd /var/www/squid reports/mensual type d mtime +180 exec rm rf {} \; >> /var/log/squid3/sarg rotate.log 2>& 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> 5/8
</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> <th class="logo"> <a href="http://proxy.example.com"> <img src="./images/sarg.png" border="0" align="absmiddle" title="sarg"></a> <font class="logo">squid Analysis Report Generator</font> </th> <th class="title">  </th> <table> <table border=0 cellspacing=6 cellpadding=7> <th align=center nowrap><b><font face=arial size=4 color=green>reportes de Acceso Web en proxy.example.com< <td align=center bgcolor=beige><font face=arial size=3><a href=diario>diario</a></font></td> <td align=center bgcolor=beige><font face=arial size=3><a href=semanal>semanal</a></font></td> <td align=center bgcolor=beige><font face=arial size=3><a href=mensual>mensual</a></font></td> <td align=center bgcolor=beige><font face=arial size=3><a href=manual>manual</a></font></td> </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> 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 congurar apache para conexiones SSL y protegido por contraseña. 6/8
Protegiendo los reportes de sarg con SSL y contraseña Crear archivo de conguración para VHOST: / # vim /etc/apache2/sites available/sarg.conf # Conguracion 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 conguraciones SSL y certicados SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCerticateFile /etc/ssl/certs/proxy.example.com.crt SSLCerticateKeyFile /etc/ssl/private/proxy.example.com.key #SSLCACerticateFile /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 certicados SSL # openssl genrsa out /etc/ssl/private/proxy.example.com.key 1024 Generamos el CSR (Certicate Signing Request): # openssl req new key /etc/ssl/private/proxy.example.com.key out /etc/ssl/certs/proxy.example.com.csr Generamos el Certicado 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 7/8
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 conguració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 Monitorizando los dominios y URLs bloqueados por squidguard Introducción a Calamaris 8/8