Un proxy transparente nos va a proporcionar muchas ventajas y, gracias a las avanzadas posibilidades de squid, más bien pocos inconvenientes:
- Listas de acceso complejas para modificar a nuestro gusto los permisos
- Caché 'inteligente' para imágenes y demás objetos que no es necesario descargar continuamente.
- Asimismo, posibilidad de no cachear contenido dinámico (php, asp, cgi-bin)
- Limites para el tamaño de objeto, para no cachear objetos excesivamente grandes como isos o mp3, o para no permitir su descarga, útil en entornos de trabajo.
- Posibilidad de conectarlo a su vez a otro proxy
- Al ser transparente (al menos para los usuarios de la red), no será necesario configurar absolutamente nada en éstos.
Para este caso, fundamento el artículo en Debian GNU/Linux (Sid), utilizando iptables y squid para el proxy, y con una máquina actuando de puerta de enlace entre la red local e Internet.
Deberemos contar con sendos paquetes antes de nada:
apt-get install squid iptables
Por descontado, en nuestro kernel debería haber soporte para netfilter/iptables.
Antes de poner las reglas de filtrado, echemos un vistazo a las opciones del/etc/squid.conf que nos va a interesar modificar para que el proxy actúe como transparente.
Antes de nada: Las "listas de acceso" o ACL son un tipo especial de expresiones condicionales mediante las cuales se configura gran parte del sistema, luego es importante conocerlas.
Están formadas por 3 elementos:
acl nombre_de_la_regla método_de_actuación expresión_coincidente
El nombre de la regla es una expresión arbitraria. El método de actuación puede ser:
| src |
Dirección de orígen. La expresión coincidente puede ser una dirección IP, o un conjunto de direcciones (siempre en formato CIDR), nunca un host. |
| dst |
Dirección de destino, con el mismo formato que la anterior |
myip |
Se evalúa en función de la dirección ip por la que le llegue al squid la petición. Se trata de su dirección IP. |
| srcdomain |
Evalúa el nombre del host del que procede la petición. |
| dstdomain |
Evalúa el destino de la petición a partir de su host. |
| srcdom_regex y dstdom_regex |
Evalúa los nombres de dominio de orígen o destino, pudiéndose utilizar expresiones regulares POSIX para encontrar coincidencias. |
| time |
Evalúa en función de tiempo |
| url_regex |
Regla muy útil. Evalúa toda la dirección que el cliente solicite, empezando desde http://.. incluído. Se utilizarán expresiones regulares. |
urlpath_regex |
Igual que la anterior, sólo que se empieza a evaluar a partir del primer / que se encuentre por detrás del nombre de dominio. |
| method |
Método con el que se trate de obtener el contenido. Los más usuales son GET, POST, CONNECT y, en algunos casos, PUT. |
| maxconn |
Esto se utiliza para detectar cuándo un cliente ha alcanzado un máximo de conexiones, que especificaremos en su expresión coincidente con un número entero positivo. |
| rep_mime_type |
Se utiliza para evaluar en función del tipo de dato que el cliente solicite, pudiendo ser algo como application/x-javascript o application/x-msdos-program. Consultar /etc/mime.types para ver una lista. |
Nótese que las expresiones son sensibles a mayúsculas. Si queremos que no lo sean, deberemos anteponerles el parámetro -i
Hay más tipos de ACLs, pero no merece la pena comentarlas aquí, debido a su falta de utilidad para nuestro propósito.
|