sudo: Jack of all trades, master of some

Bloquear contenido adulto de Google con Squid

Comentarios desactivados en Bloquear contenido adulto de Google con Squid

Mi criterio personal es que el acceso a internet en un entorno laboral debe ser justamente para eso: acceder a contenidos afines con los perfiles de de los trabajadores y necesidades de investigación y superación. No niego que en momentos es necesario acceder a otro tipo de contenidos, pero con mesura. Para los administradores de sistemas y de redes en general se hace muy complicado el filtrado de contenidos, generalmente a través de firewalls y proxies como squid. En esta entrada veremos cómo bloquear contenido adulto usando los servicios de Google a través de Squid, Squirm y Bind.

Requerimientos

Nota: este tutorial se comprobó en un sistema Debian 6.

Denegar accesos a dominios de google y permitir solo google.com.cu

El primer paso sería permitir solamente el acceso a google.com.cu en nuestro Squid, para evitarnos crear varias zonas y patrones que veremos más adelante, en fin de cuentas google.com.cu resuelve los problemas de los usuarios de Cuba ¿no?. Para esto es necesario crear las siguientes ACLs en el archivo principal de configuración de squid, /etc/squid/squid.conf:

acl foo dstdom_regex -i google.*
acl bar dstdomain .google.com.cu

La primera ACL se utilizará para denegar cualquier petición a cualquier URL dentro del dominio de google y la segunda para permitir cualquier URL bajo el dominio google.com.cu

Después en el mismo orden (primero permitir, después denegar).

http_access allow bar
http_access deny foo

Después de realizar los anteriores ajustes en la configuración de squid tenemos que hacer uso de squirm que es un redirector para squid. Básicamente lo que haremos con squirm es reescribir las peticiones que llegan al squid. Para ilustrar de modo sencillo un ejemplo:

Si un usuario hace la petición de este URL http://www.google.com.cu/search?q=foo squirm simplemente anexa al final del URL &safe=active quedando http://www.google.com.cu/search?q=foo&safe=active

Instalación y configuración de squirm

Extraer y compilar squirm.

tar xf squirm-1.0betaB.tar
cd regex
./configure
make clean
make
cp -p regex.o regex.h ..
cd ../

Editar el archivo Makefile específicamente la sección install: quedando así:

install:        all
                        install -m 755 -o root -g proxy -d /usr/local/squirm \
                        /usr/local/squirm/bin
                        install -m 770 -o root -g proxy -d /usr/local/squirm/etc
                        install -m 750 -o proxy -g proxy -d /usr/local/squirm/logs
                        install -m 660 -o root -g proxy squirm.local.dist squirm.patterns.dist \
                        /usr/local/squirm/etc
                        install -m 755 -o root -g proxy --strip squirm /usr/local/squirm/bin

Por último instalar el binario resultante.

make
make install

Editar el archivo /usr/local/squirm/etc/squirm.local y agregar los segmentos de red que se afectarán.

cd /usr/local/squirm/etc
cp squirm.local.dist squirm.local

Agregar:

xxx.xxx.xxx

Donde xxx.xxx.xxx es el segmento de red real, por ejemplo: 192.168.0, 192.168.100.
No es necesario especificar el host, ya que squirm asume /24 como red.

Patrones de redirección

Editar el archivo /usr/local/squirm/etc/squirm.patterns

cd /usr/local/squirm/etc/
cp squirm.patterns.dist squirm.patterns

Agregar las siguientes líneas:

regexi ^(http://www\.google\.com\.cu\.*/search\?.*) \1&safe=active
regexi ^(http://www\.google\.com\.cu\.*/images\?.*) \1&safe=active

Configuración de squid con soporte para squirm

Editar el archivo de configuración principal de squid /etc/squid/squid.conf y agregar las siguientes líneas:

redirect_program /usr/local/squirm/bin/squirm
redirect_children 30

acl toSquirm url_regex ^http://www\.google\.com\.cu\.*/(search|images)\?
url_rewrite_access allow toSquirm
url_rewrite_access deny all

Recargar squid

/etc/init.d/squid reload

Configuración del DNS

Crear una zona para google.com.cu dentro de una de nuestras vistas

zone "google.com.cu" IN {
    type master;
    file "/etc/bind/db.google.com.cu";
}

Contenido del archivo db.google.com.cu

$TTL 3D
google.com.cu.  IN SOA  ns.google.com.cu. root.ns.google.com.cu. (
                                2014051903      ; serial
                                8H              ; refresh
                                2H              ; retry
                                4W              ; expire
                                1D              ; minimum
                                )

                                IN NS           ns.google.com.cu.
                                IN A            xxx.xxx.xxx.xxx
ns                              IN A            xxx.xxx.xxx.xxx

*.google.com.cu.                IN A            216.239.32.20

Recargar BIND

/etc/init.d/bind reload

Importante: cambiar el valor xxx.xxx.xxx.xxx por la dirección IP con la que resuelven nuestros clientes.

Comprobaciones

Podemos comprobar que está funcionando la redirección viendo el contenido del archivo de logs de squirm /usr/local/squirm/logs/squirm.match.

Fuentes