====== Cómo instalar Free-SA (procesador de registros de Squid) ======
En este tutorial mostraremos cómo instalar [[http://free-sa.sourceforge.net|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:
* Squid ya se encuentra instalado, configurado y funcional, generando sus registros normalmente.
* Se posee un nivel intermedio de familiaridad con la compilación de paquetes en Linux (obviamente, el sistema debe tener instalados los paquetes requeridos para compilar aplicaciones en C).
* Se trabajará como superusuario.
===== Instalación =====
La aplicación se distribuye en código fuente, de manera que hay que descargarla, preparar los archivos de configuración, y finalmente compilarla.
==== Descarga de la aplicación ====
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
==== Preparativos ====
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''.((Este archivo probablemente sirva también como base para Debian y otras derivadas.))
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
==== Compilación ====
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.
===== 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
==== Invocación ====
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.
===== Notas =====
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.
===== Atribuciones =====
* **Autor:** Hugo Florentino