Controlar el uso de Internet en casa

Últimamente Internet está en cualquier hogar, lo que conlleva peligros. Entre estos peligros está el uso que pueden hacer los pequeños de la casa.

Para controlarlo, estaría bien poder controlar las páginas que se visitan, así como las horas y la máxima información posible.

Hay diversos filtros para ello, muchos de ellos de pago, pero yo propongo usar el PROXY-CACHE SQUID para ello (enlace descripción en wikipedia).


Podemos instalarlo en un PC servidor central en casa, que deberemos tener siempre encendido, o en el mismo PC que deseamos controlar, mejor si se instala como administrador y damos un usuario restringido a los usuarios.


Configuración básica de SQUID.

Squid utiliza el fichero de configuración llamado squid.conf (en Linux, /etc/squid/squid.conf). Existen un gran número de parámetros, de los cuales se recomienda configurar los siguientes:
  • http_port
  • cache_dir
  • Al menos una Lista de Control de Acceso
  • Al menos una Regla de Control de Acceso
  • httpd_accel_host
  • httpd_accel_port
  • httpd_accel_with_proxy


Antes de continuar, hay que tener en cuenta que las opciones de configuración se han de poner en línea nueva y sin espacios delante:

# Opción incorrectamente habilitada
http_port 3128

# Opción correctamente habilitada
http_port 3128


Parámetro http_port: ¿Que puerto utilizar?
De acuerdo a las asignaciones hechas por IANA y continuadas por la ICANN desde el 21 de marzo de 2001, los Puertos Registrados (rango desde 1024 hasta 49151) recomendados para Servidores Intermediarios (Proxies) pueden ser el 3128 y 8080 a través de TCP.

De modo predefinido SQUID utilizará el puerto 3128 para atender peticiones, sin embargo se puede especificar que lo haga en cualquier otro puerto disponible o bien que lo haga en varios puertos disponibles a la vez.

En el caso de un Servidor Intermediario (Proxy) Transparente, regularmente se utilizará el puerto 80 o el 8000 y se valdrá del re-direccionamiento de peticiones de modo tal que no habrá necesidad alguna de modificar la configuración de los clientes HTTP para utilizar el Servidor Intermediario (Proxy). Bastará con utilizar como puerta de enlace al servidor. Es importante recordar que los Servidores HTTP, como Apache, también utilizan dicho puerto, por lo que será necesario volver a configurar el servidor HTTP para utilizar otro puerto disponible, o bien desinstalar o desactivar el servidor HTTP.

Hoy en día puede no ser del todo práctico el utilizar un Servidor Intermediario (Proxy) Transparente, a menos que se trate de un servicio de Café Internet u oficina pequeña, siendo que uno de los principales problemas con los que lidian los administradores es el mal uso y/o abuso del acceso a Internet por parte del personal. Es por esto que puede resultar más conveniente configurar un Servidor Intermediario (Proxy) con restricciones por clave de acceso, lo cual no puede hacerse con un Servidor Intermediario (Proxy) Transparente, debido a que se requiere un diálogo de nombre de usuario y clave de acceso.

Regularmente algunos programas utilizados comúnmente por los usuarios suelen traer de modo predefinido el puerto 8080 (servicio de cacheo WWW) para utilizarse al configurar que Servidor Intermediario (Proxy) utilizar. Si queremos aprovechar esto en nuestro favor y ahorrarnos el tener que dar explicaciones innecesarias al usuario, podemos especificar que Squid escuche peticiones en dicho puerto también.

En nuestro caso, a no ser que la persona que queremos monitorizar sea un lince en informática, usaremos un puerto normal y no usaremos PROXY-transparente.
Siendo así localice la sección de definición de http_port, y especifique:

#
# You may specify multiple socket addresses on multiple lines.
#
# Default: http_port 3128
http_port 3128
http_port 8080

Si desea incrementar la seguridad, puede vincularse el servicio a una IP que solo se pueda acceder desde la red local. Considerando que el servidor utilizado posee una IP 192.168.1.254, puede hacerse lo siguiente:

#
# You may specify multiple socket addresses on multiple lines.
#
# Default: http_port 3128
http_port 192.168.1.254:3128
http_port 192.168.1.254:8080

En nuestro caso, usaremos solo un puerto, el 3128:

#
# You may specify multiple socket addresses on multiple lines.
#
# Default: http_port 3128
http_port 3128





Parámetro cache_mem.
El parámetro cache_mem establece la cantidad ideal de memoria para lo siguiente:
  • Objetos en tránsito.
  • Objetos frecuentemente utilizados (Hot).
  • Objetos negativamente almacenados en el caché.

Los datos de estos objetos se almacenan en bloques de 4 Kb. El parámetro cache_mem especifica un límite máximo en el tamaño total de bloques acomodados, donde los objetos en tránsito tienen mayor prioridad. Sin embargo los objetos Hot y aquellos negativamente almacenados en el caché podrán utilizar la memoria no utilizada hasta que esta sea requerida. De ser necesario, si un objeto en tránsito es mayor a la cantidad de memoria especificada, Squid excederá lo que sea necesario para satisfacer la petición.

De modo predefinido se establecen 8 MB. Puede especificarse una cantidad mayor si así se considera necesario, dependiendo esto de los hábitos de los usuarios o necesidades establecidas por el administrador.

Si se posee un servidor con al menos 128 MB de RAM, establezca 16 MB como valor para este parámetro:

cache_mem 16 MB

En nuestro caso hemos instalado SQUID en un PC moderno, el servidor casero o el mismo PC a controlar, que no tienen problemas de memória. Podríamos poner sin problemas 32 Mb o 64 Mb, y así aceleramos un poco mas la conexión a Internet:

cache_mem 32 MB




Parámetro cache_dir: ¿Cuanto desea almacenar de Internet en el disco duro?
Este parámetro se utiliza para establecer que tamaño se desea que tenga el caché en el disco duro para SQUID. De modo predefinido SQUID utilizará un caché de 100 MB, de modo tal que encontrará la siguiente línea:

cache_dir ufs /var/spool/squid 100 16 256

Se puede incrementar el tamaño del caché hasta donde lo desee el administrador. Mientras más grande sea el caché, más objetos se almacenarán en éste y por lo tanto se utilizará menos el ancho de banda. La siguiente línea establece un caché de 700 MB:

cache_dir ufs /var/spool/squid 700 16 256

Los números 16 y 256 significan que el directorio del caché contendrá 16 directorios subordinados con 256 niveles cada uno. No modifique esto números, no hay necesidad de hacerlo.

Es muy importante considerar que si se especifica un determinado tamaño de caché y éste excede al espacio real disponible en el disco duro, Squid se bloqueará inevitablemente. Sea cauteloso con el tamaño de caché especificado.

En nuestro caso, sólo para controlar la conexión bastará con la 1a línea, la de 100Mb. Si aumentamos este valor aceleraremos la conexión a Internet.


Parámetro ftp_user.
Al acceder a un servidor FTP de manera anónima, de modo predefinido Squid enviará como clave de acceso Squid@. Si se desea que el acceso anónimo a los servidores FTP sea más informativo, o bien si se desea acceder a servidores FTP que validan la autenticidad de la dirección de correo especificada como clave de acceso, puede especificarse la dirección de correo electrónico que uno considere pertinente.

ftp_user proxy@su-dominio.net


Controles de acceso.
Es necesario establecer Listas de Control de Acceso que definan una red o bien ciertas máquinas en particular. A cada lista se le asignará una Regla de Control de Acceso que permitirá o denegará el acceso a Squid. Procedamos a entender como definir unas y otras.

Listas de control de acceso.
Regularmente una lista de control de acceso se establece con la siguiente sintaxis:
acl [nombre de la lista] src [lo que compone a la lista]
Si se desea establecer una lista de control de acceso que abarque a toda la red local, basta definir la IP correspondiente a la red y la máscara de la sub-red. Por ejemplo, si se tiene una red donde las máquinas tienen direcciones IP 192.168.1.n con máscara de sub-red 255.255.255.0, podemos utilizar lo siguiente:
acl miredlocal src 192.168.1.0/255.255.255.0
También puede definirse una Lista de Control de Acceso especificando un fichero localizado en cualquier parte del disco duro, y la cual contiene una lista de direcciones IP. Ejemplo:

acl permitidos src "/etc/squid/permitidos"
acl permitidos src "c:\squid\permitidos"


El fichero /etc/squid/permitidos o c:\squid\permitidos contendría algo como siguiente:
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.15
192.168.1.16
192.168.1.20
192.168.1.40


Reglas de Control de Acceso.
Estas definen si se permite o no el acceso hacia SQUID. Se aplican a las Listas de Control de Acceso. Deben colocarse en la sección de reglas de control de acceso definidas por el administrador, es decir, a partir de donde se localiza la siguiente leyenda:
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#

La sintaxis básica es la siguiente:
http_access [deny o allow] [lista de control de acceso]

En el siguiente ejemplo consideramos una regla que establece acceso permitido a SQUID a la Lista de Control de Acceso denominada permitidos:

http_access allow permitidos

También pueden definirse reglas valiéndose de la expresión !, la cual significa no. Pueden definirse, por ejemplo, dos listas de control de acceso, una denominada lista1 y otra denominada lista2, en la misma regla de control de acceso, en donde se asigna una expresión a una de estas. La siguiente establece que se permite el acceso a Squid a lo que comprenda lista1 excepto aquello que comprenda lista2:

http_access allow lista1 !lista2

Este tipo de reglas son útiles cuando se tiene un gran grupo de IP dentro de un rango de red al que se debe permitir acceso, y otro grupo dentro de la misma red al que se debe denegar el acceso.

Para nuestro caso permitiremos nuestra lista y denegaremos el resto:
http_access allow permitidos
http_access deny !permitidos

Aplicando Listas y Reglas de control de acceso.
Una vez comprendido el funcionamiento de la Listas y las Regla de Control de Acceso, procederemos a determinar cuales utilizar para nuestra configuración.
Caso 1.

Considerando como ejemplo que se dispone de una red 192.168.1.0/255.255.255.0, si se desea definir toda la red local, utilizaremos la siguiente línea en la sección de Listas de Control de Acceso:
acl todalared src 192.168.1.0/255.255.255.0

Habiendo hecho lo anterior, la sección de listas de control de acceso debe quedar más o menos del siguiente modo:
#
# Recommended minimum configuration:
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl todalared src 192.168.1.0/255.255.255.0

A continuación procedemos a aplicar la regla de control de acceso:
http_access allow todalared

Habiendo hecho lo anterior, la zona de reglas de control de acceso debería quedar más o menos de este modo:

Reglas de control de acceso: Acceso a una Lista de Control de Acceso.
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
http_access allow localhost
http_access allow todalared
http_access deny all

La regla http_access allow todalared permite el acceso a SQUID a la Lista de Control de Acceso denominada todalared, la cual está conformada por 192.168.1.0/255.255.255.0. Esto significa que cualquier máquina desde 192.168.1.1 hasta 192.168.1.254 podrá acceder a SQUID.

Parámetro chache_mgr.

De modo predefinido, si algo ocurre con el caché, como por ejemplo que muera el proceso, se enviará un mensaje de aviso a la cuenta webmaster del servidor. Puede especificarse una distinta si acaso se considera conveniente.

cache_mgr daniel@naguissa.com


Parámetro cache_peer: caches padres y hermanos.

El parámetro cache_peer se utiliza para especificar otros Servidores Intermediarios (Proxies) con caché en una jerarquía como padres o como hermanos. Es decir, definir si hay un Servidor Intermediario (Proxy) adelante o en paralelo. La sintaxis básica es la siguiente:
cache_peer servidor tipo http_port icp_port opciones
En nuestro caso no vamos a usar mas que un cache, con lo que no vamos a especificar nada.


Caché con aceleración.
Cuando un usuario hace petición hacia un objeto en Internet, este es almacenado en el caché de SQUID. Si otro usuario hace petición hacia el mismo objeto, y este no ha sufrido modificación alguna desde que lo accedió el usuario anterior, SQUID mostrará el que ya se encuentra en el caché en lugar de volver a descargarlo desde Internet.

Esta función permite navegar rápidamente cuando los objetos ya están en el caché de SQUID y además optimiza enormemente la utilización del ancho de banda.

Para ello se han de añadir las siguientes líneas a la configuración:
httpd_accel_host virtual
httpd_accel_port 0
httpd_accel_with_proxy on


Como opción avanzada se puede usar SQUID como Servidor Intermediario (Proxy) Transparente. Sólo se requiere complementar utilizando una regla de iptables que se encargará de redireccionar peticiones haciéndolas pasar por el puerto 8080. La regla de iptables necesaria sería:
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080


y cambiar la configuración:

httpd_accel_host 192.168.1.254
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
Si vas a usar I.Explorer 5.5 con el PROXY transparente (ya son ganas...) se ha de añadir:
ie_refresh on



Análisis de logs

Una vez configurado el proxy necesitaremos un sistema para analizar los lgs, ya que éstos son muy extensos. En linux podemos usar el mismo webmin para analizarlos, o las utilidades que indicamos para Windows pero lo mejor es instalarla desde el sistema de ports/paquetes de nuestro sistema.

Para Windows tenemos muchas herramientas, tanto web como independientes. Unos ejemplos son:

http://surftrackr.net/blog/view/30/surftrackr-and-django-under-ms-windows/
http://www.webalizer.org/download.html
http://www.stonesteps.ca/downloads/



Inicio de SQUID:
Ya configurado, ya solo nos queda iniciar SQUID.

Si usamos Windows:
Si no hay ninguna opción en la instalación para que inicie SQUID automáticamente al iniciar Windows, abriremos una consola (Menú Inicio, Ejecutar y poner "cmd" sin comillas).

En la consola pondremos:
c:\squid\sbin\squid –z

Si todo ha salido bien no dará mensajes de error y procederemos a instalar el servicio:
c:\squid\sbin\squid –i
Si usamos Linux:
Usaremos el sistema de nuestra distribución para configurar el arranque. Como método común podemos usar webmin si lo tenemos instalado.
Mi distribución es Gentoo, y para instalarlo haría:
/etc/init.d/squid start

y si todo ha ido bien lo instalaría como servicio:
rc-update add squid default


Configuración de los navegadores.

Para poder controlar el tráfico deberemos decirle a los navegadores que usen el PROXY. Esto tiene la ventaja de que se puede monitorizar algunos usuarios del ordenador y otros no. Para ello seguiremos las intrucciones puestas a continuación según usemos Internet Explorer o Mozilla Firefox:

Configurar Proxy en Mozilla Firefox

Configurar Proxy en Internet Explorer 7


En ambos casos, en el paso final pondremos la IP del servidor donde hemos instalado SQUID (o 127.0.0.1 si lo hemos instalado en el mismo PC), pondremos el puerto (en el caso del ejemplo, 3128) y marcaremos la opción de usar el mismo proxy para todas las conexiones (firefox) o "No usar servidor proxy para direcciones locales" (IE7) según usemos uno u otro.

    Editado por Daniel el 24/08/2008 a las 16:17:48h.


    Editado por Daniel el 10/06/2010 a las 12:13:35h.