SQUID

El filtrado de accesos es un tema que genera polémica en cuanto algunos lo pueden interpretar como una restricción o censura mientras que otros lo consideran como una protección. Esta no es la discusión que nos ocupa, aquí sólo pretendo dar una visión técnica sobre como establecer filtros de contenidos con la esperanza de que se haga buen uso de ella.

El filtrado de accesos es también una herramienta para manener la seguridad y privacidad de los usuarios de nuestra red en tanto que podremos protegerlos de ciertos programas de spyware, popup y otras prácticas molestas de la web.

Proxy Transparente

La configuración normal de un proxy exige que cada navegador esté configurado para utilizar dicho proxy como salida. Pero claro, por una lado es un engorro tener que configurar uno a uno todos los equipos de la red y por otro, tenemos la posibilidad de que la configuración TCP/IP le da salida a través de una pasarela.

 

Si a pesar de todo queremos esta configuración, tendremos que decirle al navegador que utilice como proxy el equipo que alberga Squid y el puerto el 3128. El puerto se puede cambiar en el fichero de configuración. Otro puerto que se suele usar para proxy es el 8080, pero ¿para qué cambiarlo?

Como queremos evitar tener que configurar los navegadores cliente y queremos evitar posibles puertas traseras de salida vamos a configurar un proxy transparente.

¿Qué es un proxy transparente? Es un proxy que no necesita ninguna configuración especial en los clientes. Se denomina transparente porque el cliente en realidad no sabe que lo está usando, es transparente para él.

Cómo configurar el proxy transparente, pues en primer lugar tenemos que configurar el cortafuegos para que reenvíe todas las peticiones que se hagan a un puerto 80 hacia el puerto 3128 que utiliza Squid. Es decir, capturamos todas las peticiones que se hagan a un servidor http y se las enviamos a Squid para que él se encarge del resto.

 

Estas son las reglas de iptables. La primera para redrigir las peticiones al proxy la siguiente para rechazar el resto de los reenvíos.

 

 

Si queremos que las páginas web pasen por el proxy con squid que está en 192.168.5.254, pero el resto siga con acceso normal, pondríamos:

 

iptables -t nat -A PREROUTING -i   eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination   192.168.5.254:3128

 

Si el equipo con squid está en la misma pasarela entonces podemos poner:

 

 

iptables -t nat -A PREROUTING -i   eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

 

 

Cuidado, de las opciones anteriores, sólo debemos escoger una de ellas.

 

Si sólo queremos salida para visitar páginas web, entonces pondremos:

 

Primero garantizamos el tráfico DNS:

 

iptables -A FORWARD -p tcp -m tcp   --dport 53 -j ACCEPTiptables -A FORWARD -p udp -m udp   --dport 53 -j ACCEPTiptables -A FORWARD -p tcp -m tcp   --sport 53 -j ACCEPTiptables -A FORWARD -p udp -m udp   --sport 53 -j ACCEPT

 

En el siguiente caso suponemos que el equipo con squid está en 192.168.5.254:

 

iptables -A PREROUTING -i eth1 -p   tcp -m tcp --dport 80 -j DNAT --to-destination   192.168.5.254:3128iptables -t nat -A FORWARD -j   REJECT --reject-with icmp-port-unreachable

 

 

Si el equipo con squid está en la misma pasarela entonces podemos poner:

 

iptables -t nat -A PREROUTING -i   eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128iptables -A FORWARD -j REJECT   --reject-with icmp-port-unreachable

Control de acceso mediante Squid

Para controlar los accesos primero, tenemos que saber definir las propiedades de las conexiones sobre las que queremos establecer algún tipo de control. Las acl de Squid permiten especificar acl según muy diversos criterios, por ejemplo:

  1. Una dirección de red

  2. Una dirección de máquina

  3. Un rango de direcciones

  4. Una url de una conexión

  5. Una franja horaria


Concepto de ACL en Squid

Un ACL es una definición de control de acceso, que en Squid se especifica mediante el parámetro acl según la siguiente sintaxis:

acl nombre_acl tipo_acl descripción ...

 

acl nombre_acl tipo_acl "fichero_de_descripciones" ...

 

Cuando usamos un "fichero_de_descripciones", cada descripción se corresponde con una línea del fichero.

 

Leer más...