En este tutorial mostraremos cómo instalar Free-SA, un procesador de registros de Squid que resulta muy funcional, ligero y eficiente (según el autor, entre 7 y 20 veces más rápido que SARG). Esta es una aplicación multiplataforma desarrollada en lenguaje C que se distribuye con licencia GPL v3.
Algunas cosas que se asumen en este tutorial:
La aplicación se distribuye en código fuente, de manera que hay que descargarla, preparar los archivos de configuración, y finalmente compilarla.
Esta aplicación se encuentra en Sourceforge, que frecuentemente bloquea las direcciones IP de Cuba, de modo que descargaremos la aplicación de un espejo, y la compilaremos en /opt/
.
cd /opt wget ftp://ftp.heanet.ie/mirrors/sourceforge/f/fr/free-sa/free-sa-dev/2.0.0b6p7/free-sa-2.0.0b6p7.tar.gz tar -xf free-sa-2.0.0b6p7.tar.gz
Con el paso anterior, debería crearse en /opt/
un directorio con el nombre free-sa-2.0.0b6p7
. Dentro de este directorio existe un archivo global.mk
que contiene una variable especial llamada OSTYPE que debemos ajustar de acuerdo a nuestro sistema operativo. Dependiendo del sistema definido, el script de compilación toma valores de las plantillas de configuración en el subdirectorio configs
.
cd /opt/free-sa-2.0.0b6p7 editor global.mk
Para ilustrar mejor este tutorial, supongamos que nuestro servidor corre Zentyal 2.2 x86_64 (basado en Ubuntu 10.04 LTS). Entonces en el archivo, la variable por lógica debería quedar de la siguiente manera:
OSTYPE = zentyal-x86_64-gcc4
Sucede que si revisamos el subdirectorio configs
notaremos que el archivo de plantilla zentyal-x86_64-gcc4.mk
no existe; de hecho ni siquiera existe una plantilla para Ubuntu x86_64, pero nada nos impide crear una plantilla adecuada guiándonos por las existentes, en particular por ubuntu-i586-gcc4.mk
.1)
Para esto, una de las primeras cosas que tenemos que verificar es la ubicación del comando sort:
which sort
Como veremos, en la plantilla de Free-SA para Ubuntu x86 el comando sort tiene la ruta /usr/bin/sort
mientras que en Zentyal 2.2 es /bin/sort
(como recién comprobamos), de modo que hay que modificar el valor de la variable SORT.
Otra cosa que necesitamos ajustar es la arquitectura de nuestro sistema operativo, que se define en la variable SARCH. En el caso de la plantilla de Ubuntu, este valor se define como i586, pero si nos fijamos en la plantilla de un sistema con arquitectura x86_64 bits como redhat-x86_64-gcc4.mk
, veremos que el valor de SARCH debería ser x86-64, que es el que utilizaremos en este caso.
También debemos verificar la ruta del registro de accesos de Squid, que en este caso no hay que modificar (/var/log/squid/access.log
).
De modo que ahora podemos simplemente copiar la plantilla de Ubuntu y modificarla con los valores adecuados:
cd /opt/free-sa-2.0.0b6p7/configs cp ubuntu-i586-gcc4.mk zentyal-x86_64-gcc4.mk editor zentyal-x86_64-gcc4.mk
Una vez comprobados los valores de todas las variables, el contenido de la plantilla zentyal-x86_64-gcc4.mk
sería entonces este:
PREFIX = /usr ETCDIR = /etc/$(PROGLNAME) WWWDIR = /var/www/$(PROGLNAME) CACHEDIR = /var/cache/$(PROGLNAME) LOCDIR = $(PREFIX)/share/$(PROGLNAME) DOCDIR = $(PREFIX)/share/doc/$(PROGLNAME)-$(PROGVERSION) MANDIR = $(PREFIX)/share/man LOGFILE = /var/log/squid/access.log CC = gcc SORT = /bin/sort INSTALL = /usr/bin/install LARGEFILE = yes SATSEP = ' HAVE_STRL = 0 # CPU (allowed by gcc '-march' option: native, i486, pentium3, athlon, nocona, k8 ...) SARCH = x86-64 ADDCFLAGS = \ -O4 -pipe -march=$(SARCH) -fomit-frame-pointer \ -std=c99 \ -W -Wall -Wextra -Wredundant-decls -Wnested-externs -Wstrict-prototypes \ -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual \ -Wreturn-type -Wswitch -Wshadow -Wcast-align -Wuninitialized \ -Wchar-subscripts -Wuninitialized -Wbad-function-cast -Wwrite-strings ADDLDFLAGS = -mrelax
Una vez terminados los preparativos, podemos compilar e instalar de una vez; para ello simplemente ejecutamos lo siguiente:
cd /opt/free-sa-2.0.0b6p7 make install
El instalador debería crear automáticamente el archivo ejecutable /usr/bin/free-sa
(la ubicación podría ser diferente en dependencia de la plantilla utilizada) y además el manual, los archivos de documentación y algunos ejemplos de configuración.
Una vez finalizada la instalación, hay que configurar la aplicación para su uso. Para esto, conviene copiar el ejemplo de configuración por defecto y editarlo para ajustarlo a nuestra conveniencia:
cd /etc/free-sa cp free-sa.conf.sample free-sa.conf editor free-sa.conf
En este archivo normalmente no es necesario editar muchas cosas, pero podríamos por ejemplo modificar la ruta por defecto de los reportes, en caso que deseemos colocarla en un directorio del servidor Web protegido por contraseña, al cual solamente tengan acceso los administradores de red y responsables de seguridad informática.
En este caso, ilustraremos cómo podría quedar el archivo, excluyendo las secciones y líneas deshabilitadas por marcas de comentario:
################## # GLOBAL OPTIONS # ################## configuration_name="/etc/free-sa/free-sa.conf" cache_directory="/var/cache/free-sa" target_directory="/var/www/admin/trazas-navegacion" #################### # LOG FILE OPTIONS # #################### log_file="/var/log/squid/access.log" ################### # FILTERS OPTIONS # ################### users_filter="/etc/free-sa/users.filter.sample" local_filter="/etc/free-sa/HTTP_proxy_auth_failures.filter.sample" local_filter="/etc/free-sa/HTTP_site_auth_failures.filter.sample" local_filter="/etc/free-sa/HTTP_proxy_denied.filter.sample" local_filter="/etc/free-sa/HTTP_site_denied.filter.sample" local_filter="/etc/free-sa/HTTP_CONNECT_method.filter.sample" local_filter="/etc/free-sa/HTTP_PUT+POST_method.filter.sample" local_filter="/etc/free-sa/HTTP_downloads.filter.sample" ############################## # PARTICULAR REPORTS OPTIONS # ############################## index_show_calendar="yes" index_sort="d"
Notarán que al final se habilitó mostrar el calendario, y también se habilitó la variable index_sort que por defecto trae el valor d, que significa que el índice se ordenará por fecha (date), en orden descendente. Para conocer las otras opciones permitidas en la configuración, puede consultarse el manual:
man free-sa.conf
Una vez configurada la aplicación, queda decidir cómo invocarla, pues Free-SA no funciona como servicio. El autor recomienda programar la ejecución de Free-SA en crontab, pero en este caso, lo invocaremos mediante logrotate.
Para esto, solo necesitamos editar el archivo de configuración de la rotación de los registros de Squid:
editor /etc/logrotate.d/squid
En este caso, solo añadiremos (o modificaremos) la sección prerotate. El archivo quedaría aproximadamente así:
# # Logrotate fragment for squid. # /var/log/squid/*.log { daily compress delaycompress rotate 365 missingok nocreate sharedscripts prerotate test -x /usr/bin/free-sa && /usr/bin/free-sa -d day endscript postrotate test ! -e /var/run/squid.pid || /usr/sbin/squid -k rotate endscript }
Como notarán, en la sección insertada se comprueba que el archivo /usr/bin/free-sa
exista y tenga permisos de ejecución, en cuyo caso se invoca el comando free-sa con el parámetro -d day
que significa que el período seleccionado será diario (lo natural, dado que el registro de Squid está configurado para rotar diariamente).
De esta manera, como la invocación de Free-SA se ha establecido en la sección prerotate, la generación de los reportes de navegación se realiza justo antes de rotar el registro de accesos de Squid, y así la pérdida de trazas se reduce al mínimo, cosa que sería más difícil de ajustar con crontab. Esto se consultó con el autor y este comentó que efectivamente estaba muy bien, que la principal razón por la que recomienda crontab es simplemente porque resulta más conocido.
Se ha preparado este tutorial en esperas de que esta excelente aplicación (que aun es relativamente desconocida) tenga una mayor difusión. Deseo agradecer la ayuda brindada por Oleg Sapon (autor de la aplicación), quien aclaró atenta y pacientemente todas mis dudas.