lunes, 7 de enero de 2008

squid transparente

¿Qué es un proxy transparente? Es un proxy que no requiere configuración por parte del cliente en su navegador. Así podemos hacer que todos los clientes de nuestra red pasen por un proxy y no tendrás que pasar por cada uno de los navegadores configurándolos.

Para crear un proxy transparente, instalamos squid y empezamos a configurar.
aptitude install squid squid-common

Yo uso nano como editor, podéis usar con el que más cómodos estéis.

nano /etc/squid/squid.conf
http_port 3128 transparent

3128 es el puerto por defecto de escucha de squid, podemos cambiarlo, pero lo importante para hacer un proxy transparente es añadir transparent detrás del 3128.

En esta linea definimos la profundidad de directorios para cachear las webs. El 100 indica el tamaño máximo que ocupará el árbol de directorios. Si modificamos la variable cache_mem, tendremos que sustituir el 100 por el valor que le demos a cache_mem.
cache_mem 100 MB
cache_dir ufs /var/spool/squid 100 16 256

Tenemos que permitir el acceso a nuestra red.
acl our_networks src 192.168.0.0/22 # esto es lo mismo que 192.168.0.0/255.255.252.0
http_access allow our_networks # permitido el acceso a nuestra red
http_access allow localhost # permitido el acceso a localhost

Definimos el nombre de nuestro proxy
visible_hostname delorianserver

Una vez tenemos el squid configurado tendremos que reiniciarlo con /etc/init.d/squid restart

Si queremos podemos con squid -z crear la estructura de directorios para el cache, pero si no existe la crea la primera vez que reinicia.

Yo la borraría y la volvería a crear si modificas los parámetros de las lineas:
cache_mem 100 MB
cache_dir ufs /var/spool/squid 100 16 256

Para borrar el árbol de directorios del cache:
rm -fr /var/spool/squid

Para crear la estructura de directorios (tiene que estar parado el squid /etc/init.d/squid stop)
squid -z

Después lanzamos nuevamente el servicio.
/etc/init.d/squid start

Ahora solo nos queda añadir una regla de IPTABLES que haga una redirección del puerto 80 al 3128 (puerto por defecto del squid) para hacer de nuestro squid un proxy transparente.
iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/255.255.252.0 -d 0.0.0.0/0.0.0.0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Si todo ha ido bien podremos ver haciendo un tail -f de los log de squid que todos los clientes de nuestra red están pasando por el squid.
tail -f /var/log/squid/access.log