verificación google

lunes, 7 de enero de 2008

squid proxy 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

14 comentarios:

  1. Bueno el tutorial, la verdad es que está muy currado, pero me encontré con un problema despues de hacer el "rm -fr /var/spool/squid", ya que a la hora de hacer el squid -z, squid no era capaz de crear el directorio "squid", nada que un "mkdir /var/spool/squid" y pálante, jejeje.
    Ahora bien, le lanzé la regla para IPtables del squid, vamos lo que viene siendo redireccionar las peticiones del puerto 80 al puerto del SQUID, me voy a los equipos de mi red, y les pongo que la puerta de enlaze sea la direccion IP de squid. Y hasta ahora todo me funcionaba de coña. ¿pero que pasa con los sitios con HTTPS ....?

    Les he tenido que quitar la puerta de enlaze a todos los equipos. pues ninguno puede acceder a las web de los bancos, y eso a los contables de mi empresa no les gusta mucho, jejeje.

    ¿sabes como solucionar este problema?

    Por todo lo demás muy bueno tu BLOG

    ResponderEliminar
  2. Que tal toño yo tenia el mismo problema pero decidi compilarlo y leer un poco el manual en ingles y por fin lo solucione, hice un pequeño tutorial sepero te funcione

    Tutorial squid

    ResponderEliminar
  3. Respuesta a Antonio:

    Supongo que igual que has redireccionados las peticiones del 80 al 3128, también podrás redireccionar el https al 3128.

    Sino podrías hacer directamente forward, así cuando no puedan salir por el SQUID saldrán directamente a internet haciendo forward con IPTABLES.

    Las instrucciones para hacer forward son un poco más complicadas. Si tengo tiempo un día de estos publicaré un post. Pero seguro que no tendrás problemas en encontrar algún buen manual donde te expliquen como hacer un router con IPTABLES en un Debian.

    La verdad que es la mejor solución, yo lo tengo así montado y eso no falla en la vida.

    ResponderEliminar
  4. hola tengo un squid y dansguardian y las reglas iptables las aplico por un archivo .sh pero hasta ahora no me filtra nada como puedo saber por q puerto esta escuchando el squid y dansguardian?

    ResponderEliminar
  5. En el fichero de configuración /etc/squid/squid.conf puedes ver el puerto de escucha del squid.

    Si ejecutas "nmap -p1-65535 localhost" o "nmap -p1-65535 tuIP" podrás ver si está escuchando o no el puerto. (El puerto por defecto es el 3128).

    Una cosas que podrías hacer es pegar aquí la salida de un "iptables -L".

    ResponderEliminar
  6. Tu tutorial esta bueno y facil de seguirlo, una pregunta es que si dansguardian puede filtrar paginas seguras https por que necesito restringir las paginas de chateo y no tengo ni idea de como hacerlo o necesito hacerlo con el squid ???

    ResponderEliminar
  7. En teoría el https corre en el puerto 443, nunca lo he intentado, pero creo que tendrías que pasar el 443 al puerto de escucha del squid.
    Igual que hacemos con el http (80->3128).
    Y no sé si squid necesita alguna configuración especial para hacer esto.

    ResponderEliminar
  8. el squid me corre de maravilla ,el proble que tengo es que deseo filtar el contenido con el dansguardian que utiliza el puerto 8080, todo funcionaba bien hasta que quise restringir el acceso a ciertos rangos de ip de mi red, para lo cual les denegue el acceso en el squid.conf pero no funciono y al revisar los log de squid note que todas las maquinas las registraba con la misma ip por lo cual cualquier cosa que agregaba al squid conf no hacia efecto

    ResponderEliminar
  9. Yo normalmente los filtros me gusta controlarlos desde iptables. Creo que es más seguro que los filtros que pueda tener squid.

    ResponderEliminar
  10. hola, estoy trabajando con squid,me parece muy bueno bloqueo de pag, acceso a usuarios por medio de MAC, el inconveniente ke he notado, es ke cuando a una computadora cliente le pongo el IP manual,la puerta de enlace (la direccion del proxy 192.168.0.1) y repito esta direccion en el servidor DNS primario, la computadora cliente se brinca al proxy, es decir el proxy no restrige nada a ese equipo, es mas no es ni necesario congigurar el explorador de internet que puedo hacer para que esto no suceda?? muchisimas gracias de antemano

    ResponderEliminar
  11. Supongo que no tendrás activado la redirección del puerto 80 al 3128.

    ResponderEliminar
  12. Buenísimo el tutorial, lo que me sucedió ami fue que después de hacer "rm -fr /var/spool/squid", y al hacer el squid -z, no tenia permiso.
    Lo solucione gracias a un amigo que me dijo que haga esto
    nos colocamos en la carpeta
    #cd /var/spool/
    cambiamos el permiso de root por proxy
    #chown proxy.proxy squid

    #chmod 750 squid
    #squiz -z
    y recien alli me creo la estructura
    # /etc/init.d/squid start
    me levanto de 10. squid por que salia runing, pero seguia sin funcionar internet.
    Al compara con otro server faltaba crear en /var/spool/squid el archivo core
    # cd /var/spool/squid
    #touch core
    le cambiamos los permiso de squid
    #chwon proxy.proxy core
    reiniciamos squid y hay si funciono.

    ResponderEliminar
  13. Hola amigo bueno el post pero tengo un ultimo problema con esto el iptable en donde lo configuro que archivo tengo q modificarlo o donde crearlo por favor es urgenteeee

    ResponderEliminar
  14. Para iptables no hay un fichero especifico, crea un fichero de script y lo ejecutas al inicio del sistema.

    ResponderEliminar