Herramientas de usuario

Herramientas del sitio


tutoriales:free-sa

Cómo instalar Free-SA (procesador de registros de Squid)

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:

  • 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.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:

zentyal-x86_64-gcc4.mk
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:

free-sa.conf
##################
# 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í:

squid
#
#       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
1)
Este archivo probablemente sirva también como base para Debian y otras derivadas.
tutoriales/free-sa.txt · Última modificación: 2020/04/22 20:57 (editor externo)