Introducción a Squid: configuración paso a paso

Squid logo y Tux

Squid es otro filtro a nivel de aplicación que puede complementar a iptables. Squid es un servidor proxy para web con caché, es muy popular y libre, además es multiplataforma. Aunque se puede usar para mejorar el rendimiento de las conexiones a Internet, también se puede usar con fines de seguridad. Desde que se inició el proyecto en los años 90, mucho a avanzado Squid y ahora te la presentamos para que sepas como usarla.

Para su instalación, puedes acceder a la web oficial del proyecto y seleccionar los paquetes binarios para tu sistema operativo o distribución. Si deseas instalarlo desde el paquete de código fuente compilando, también tienes esa opción. Los tarballs disponibles son tar.gz, tar.bz2 y tar.xz. Si no sabes como instalar, puedes acudir al artículo que editamos en este blog acerca de cómo instalar cualquier paquete desde Linux. ¡Ojo! si tienes un Debian o derivado y has visto que se instala con sudo «apt-get install squid», puede que te de un error, porque tienes que sustituir «squid» por «squid3» para que surta efecto…

Ahora pasamos directamente a la acción explicando algunos ejemplos de cómo utilizar Squid para proteger nuestro equipo. Antes me gustaría explicar que Squid se basa en ACLs, es decir en Acces Control List o lista de control de acceso, es decir, unas listas en las que se detallan los permisos para controlar en este caso el flujo de red e implementar filtros similares a los de iptables pero a nivel de aplicaciones.

Normalmente, tras la instalación se incluye un fichero de configuración que se encuentra en /etc/squid3/squid.conf y es este el que debemos editar con un editor como nano o gedit. En él podemos generar nuestras reglas de filtrado, aunque existen las opciones cache_dir, cache_mem y http_port, nosotros usaremos esta última para nuestras reglas de seguridad. Otro detalle es que en este fichero se especifica el puerto por defecto que usa el servicio Squid, que por defecto es 3128 (ver la línea o directiva «http_port 3128» y quítale el # para activarla). Si quieres puedes cambiarlo a otro puerto como el 8080… Y otra cosa necesaria es configurar el hostname, busca el comentario «TAG: Visible_hostname» y verás una línea «visible_hostname» donde debes poner tu hostname.

Para saber tu hostname, puedes teclear en el terminal:


hostname

Y el nombre que te aparezca lo añades a la línea que no debe estar precedida por # para que no sea ignorada como un comentario. Es decir, quedaría así:

visible_hostname nombre_hostname_que_te_haya_aparecido

Si ves el el fichero de configuración, verás que está muy comentado, si quieres anular una regla creada, puedes iniciar la línea con # y la transformas en un comentario, con lo que Squid la ignora, para volverla a poner en servicio, borras el # y listo. De hecho, hay muchas reglas creadas y puestas como comentario que puedes usar quitándole #. Así no tendrás que borrar y volver a escribir reglas. Bien, para añadir una regla o filtro concreto, ésta debe tener una ACL y una directiva que indique lo que se debe hacer.

Por cierto, cuando quites un # para activar una regla, asegúrate de no dejar espacios al inicio de la línea. Por ejemplo:

Forma erronea:

http_port 3128

Forma correcta:

http_port 3128

¿No te has enterado de nada? Pues no te preocupes, con un ejemplo lo verás todo mucho mejor. Imagina esto:

acl bloqueo url_regex as facebook
http_access deny bloqueo

Lo que quiere decir esta regla es que la acl con nombre «bloqueo» va a prohibir el acceso a la URL que contenga «facebook» (por tanto si intentamos entrar a Facebook nos saltrará un error en el navegador). Si en vez de «deny» usas «allow», permitirías el acceso en vez de prohibirlo. También se puede usar el parámetro ! para excluir, por ejemplo, imagina que quieres permitir el acceso a lista1 pero no a lista2:


http_access allow lista1 !lista2

Otro ejemplo podría ser crear un fichero /etc/squid3/ipspermitidas y en él guardar una lista de IPs que queremos permitir el acceso. Por ejemplo, imagina que el contenido de ipspermitidas es:

192.168.30.1

190.169.3.250

192.168.1.26

Y luego creamos la acl para permitir el acceso a estas IPs:


acl nuevaregla src "/etc/squid3/ipspermitidas"

Un ejemplo bastante práctico, imagina que tu equipo lo usan niños menores de 18 años y quieres restrigir el acceso a ciertos sitios de contenido adulto. Lo primero es crear un fichero llamado /etc/squid3/lista con el contenido:

adult

porno

sex

poringa

Y ahora en  el fichero squid.conf ponemos la siguiente regla:


acl denegados url_regex "/etc/squid3/lista"

http_access allow !denegados

Como ves hemos usado allow que en principio es para permitir, pero si te fijas hemos agregado ! para negar, por tanto, sería equivalente a poner:


acl denegados url_regex "/etc/squid3/lista"

http_access deny denegados

También se pueden crear listas, no solo de nombres de dominio o IPs como hemos hecho, también puedes poner dominios y por ejemplo restrigir el acceso a dominios como .xxx, .gov, etc. Veamos un ejemplo basándonos en la regla anterior. Creamos un fichero /etc/squid3/dominios que tenga:

.edu

.es

.org

Y ahora nuestra regla, para denegar el acceso a la lista de sitios prohibidos que creamos, pero permtiendo el acceso a URLs con estos dominios:


acl denegados url_regex "/etc/squid3/lista" 
acl permitidos dstdomain "/etc/squid3/dominios"

http_access allow !denegados dominios

AMPLIACIÓN:

Perdón, al ver los comentarios me he dado cuenta que me ha faltando lo principal. Me he limitado a poner ejemplos de cómo se usa y olvidé decir que para iniciar el servidor Squid:


sudo service squid3 start

Antes se levantaba con «/etc/init.d/squid start», pero ahora debes usar ésta otra línea que te he puesto. Igual que el fichero de configuración ya no está en /etc/squid/squid.conf, sino en /etc/squid3/squid.conf. Vale, una vez creadas las políticas de filtrado, e iniciarlo, también debemos configurar el navegador, por ejemplo, si usas Mozilla Firefox o derivados, puedes dirigirte al menú de configuración (ya sabes, las tres barritas), y luego a Preferencias, Avanzado, y en la pestaña Red, pulsa en Configuración del apartado Conexión. Allí, seleccionamos Configuración manual del proxy y ponemos nuestra IP y el puerto que esté usando Squid, en este caso 3128. Selecciona también «Usar el mismo proxy para todo» y sal guardando los cambios.

Por favor, no olvides dejar tus comentarios, dudas o lo que quieras… Aunque es un tutorial muy por encima de Squid, espero que te sirva de ayuda.


17 comentarios, deja el tuyo

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: AB Internet Networks 2008 SL
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   Nicolas dijo

    gracias!,útil.

  2.   Jimmy Olano dijo

    DE NUEVO muy bien condensado para una materia un tanto compleja, sigo diciendo «nivel de usuario: medio», se deben concer algunas nociones sobre «redes».

    HUMILDEMENTE considero que se debería agregar la opción de configurar nuestro navegador para que utilice el «proxy», pero como esta entrada es una «INTRODUCCIÓN a Squid» pues estaremos muy pendientes a la ¿próxima? entrega (por último, y con el riesgo de mi persona incordiar, RECORDAR no hacerle «proxy» a las páginas web bancarias y/o instituciones financiera que usais en vuestra cas o empresa).

    1.    Isaac P. E. dijo

      Hola, gracias por los comentarios. Sí, IPTABLES y Squid son demasiado espesos como para hacer un artículo que los explique con profundidad y tienes que limitarte a poner ejemplos cotidianos…

      Pero tienes toda la razón, lo de configurar el proxy lo he agregado ahora, lo tenía previsto y se me olvidó. Fallo mío.

      Un saludo y gracias!!

      1.    Jimmy Olano dijo

        Uffff «tronco» perdón por no darme cuenta de lo principal:
        INICIAR EL SERVICIO :-( sin eso «no hay tu tía» -perdonadme por el habla coloquial- ¡ACERTADÍSIMA AMPLIACIÓN! 8-)

        {hacerlo fijo en cada arranque pasa por modificar el «/sbin/init»:
        http: //www . ubuntu-es.org/node/ 13012#.Vsr_SUJVIWw }

        {otra manera más fácil es usando «update-rc.d»:
        https: // parbaedlo. wordpress.com/201 3/03/07/estableciendo-arranque-y-parada-de-servicios-linux-update-rc-d/}

        He agregado espacios a los enlaces, quitadlos y navegareís ;-)

        MUCHAS GRACIAS POR SU ATENCIÓN.

  3.   ALBERT dijo

    NOTICIAS LINUX:Ataque a Linux Mint: infectan instaladores y comprometen credenciales de usuarios

    http://www.muylinux.com/2016/02/21/ataque-a-linux-mint

    1.    azpe dijo

      Ya lo publiqué, pero no hagas Spam de otras páginas aquí por favor

  4.   ALBERT dijo

    NOTICIAS ANDROID:GM Bot, el troyano para Android del que deriva Mazar

    http://www.redeszone.net/2016/02/21/gm-bot-el-troyano-para-android-del-que-deriva-mazar/

  5.   Hernan dijo

    Hola Jimmy, Como haces para que squid no te cachee esas paginas?. Estaría bueno bueno que comenten la opción transparent, que evita el tedio de configurar proxy a cada ordenador

    1.    Jimmy Olano dijo

      Buena pregunta, yo le he instalado a las páginas web de mis clientes un CAPTCHA en software libre:
      (http: // www. ks7000. net. ve/2015/04/03/un-captcha-facil-y-sencillo-de-implementar/
      -humildemente, NO es «spam» ni autopromoción, sí viene al caso dado-)
      e imagino que al utilizar Squid dichas imágenes NO se recargan porque les coloqué el mismo nombre -ea, que también puedo generar nombres aleatorios, no había yo pensado en eso, hasta ahora- y al tener el mismo nombre pues Squid devuelve lo que tiene en el «caché».

      Evidentemente la función principal del «proxy» es ahorrarnos ancho de banda con las imágenes -lo más pesado de una página web- [i]en el supuesto que dichas imágenes sean estáticas, no cambien con el tiempo, lo cual es cierto en el 99% de los casos[/i].

      Pero en las CAPTCHA pues «no hay marcha», debemos eliminar su almacenamiento previo y retribuir siempre una imagen nueva.

      EN CUANTO A LOS BANCOS, tengo entendido el más grande en España es «Caixa» pues crearemos una regla DE EJEMPLO:

      acl caixa dstdomain .lacaixa.es

      donde:
      acl -> comando para crear regla (releer artículo del sr. Isaac, párrafos arriba).

      caixa -> nombre de la regla.

      dtsdomain -> opción «type» para indicar que nos referimos a un dominio, IMPORTANTE el puntito al inicio ( http://ww w.visolve. com/squid/ squid24s1/access_controls.php )

      dominio(s) -> pues imagino que podemos agregar los dominios que necesitemos, separados por un espacio; hablando de espacios los he insertado en los enlaces web señalados, quitadlos y navegaréis (páginas en inglés).

      Espero les sean útiles los conocimientos aquí presentados ¡gracias a LinuxAdictos!

    2.    Jimmy Olano dijo

      BIEN, para responder la pregunta de la TRANSPARENCIA en Squid DE NUEVO insisto que se debe tener conocimientos de nivel medio y por razones didácticas voy a resumir al máximo el siguiente artículo (en inglés) que considero habla muy bien del tema:

      http: // ww w.deckle.co. uk/squid-users-guide /transparent-caching-proxy.html

      Notas:
      -He agregado espacios a los enlaces para evitar el «pingback» por parte de mi persona (no tengo nada en absoluto relación con el equipo de Linux Adictos, por tanto no estoy autorizado a realizar dicha acción).
      -¡ESTO DE LA TRANSPARENCIA YO NO LO SABÍA! (no me lo enseñaron, digo).
      -Ayudandolos a ustedes me ayudo a mí mismo también, ¡esto mola en cantidad! ?

      Pues bien, dicho esto, vayamos al grano:

      JUSTAMENTE le sugerí al Sr. Isaac ampliar sobre el configurar nuestros navegadores con el «proxy» instalado y muy amablemente lo hizo (¡qué baŕbaro, ¿de dónde saca tiempo este hombre para hacer tantas cosas?).

      Bajo ese esquema el uso del Squid ES OPCIONAL: cada usuario de nuestra red de área local se encargará de hacer su trabajo , pero podéis apostar «duros de plata contra pesetas de papel» que hay por allí algún «bash script» que puede ser instalado vía SSH a varias ordenares corriendo GNU/Linux.

      PRE REQUISITO: que nuestro servidor Squid esté funcionando tal como lo enseña el Sr. Isaac en esta entrada, si ya lo probamos y le metimos «carga de trabajo» y se desempeña bien podemos proceder a ir más allá.

      BAJO EL ESQUEMA DE TRANSPARENCIA:

      PRIMERO.- Nuestro Squid debe ser ruta predeterminada «gateway» en nuestra «eth0» o «wlan0» -¿recuerdan lo de conocimientos nivel medio?-, pues bien allí lo establecemos (se hace por defecto con DHCP POR TANTO también debemos configurar un servidor de tal servicio:
      htt ps: // es.wikipe dia.org/wiki/ Dynamic_Host_Configuration_Protocol ).

      Debemos prever el configurar, en caso de fallo, redirigir todo el tráfico a nuestro(s) modem(s) directamente si Squid -el ordenador donde corre- se ve sobrepasado en su carga de trabajo -y usar el(los) modem(s) tipo «puente» para que salgan al exterior, esto se logra haciendo un «script» que se dispare en dicho evento y configure nuestro servidor DHCP -que debería estar instalado en un odenador distinto al de nuestro Squid-.

      NOTA: nuestro ordenador con Squid dependerá siempre su dirección IP del DHCP PERO a la vez tendrá cierto «control» con dicho servidor DHCP. Si os apetece trabajar con direcciones IP fijas, de poder, podéis, pero cuando agregueis más ordenadores O SUSTITUIR alguno tendréis que configurar de nuevo y no es la idea (leed con deleite:
      ht tps: // pheno barbital. wordpress.com/2012/07/23/las-12-razones-por-las-que-un-administrador-de-sistemas-perezoso-es-un-buen-administrador/ )
      OTRA NOTA (ver punto segundo): nuestro(s) modem(s) y/o aparatos enrutadores les debemos desactivar la función DHCP y que ellos se rijan por nuestro servidor DCHP (-que os aseguro que de esto sale otra entrada para enseñarnos cómo montar dicho servicio-)

      SEGUNDO.- Debemos filtrar el tráfico hacia nuestro servidor Squid, esto si tenemos varios enrutadores dispersos que cubran un área de red inalámbrica «wifi», sigue siendo una red de área local pero de medianas dimensiones. Esencialmente es lo mismo del punto primero PERO si tenemos diversos aparatos O INCLUSO subredes pues debemos configurarlas también, así que ojito con los que trabajamos «machacando los hierros» en empresas grandes.

      TERCERO.- En nuestro GNU/Linux que hospeda al Squid debemos redireccionar los puertos y configurar el «firewall» (leed artículo anterior IPTables
      http://www.linuxadictos.com/introduccion-a-iptables-configura-un-firewall-en-linux.html )

      iptables -t nat -A PREROUTING -p TCP –dport 80 -j REDIRECT –to-port 3128

      y al IPFW:

      /sbin/ipfw add 3 fwd 127.0.0.1,3128 tcp from any to any 80

      Demás está decir que NO podemos correr un servidor Apache o Ngix en ese puerto 80 -puerto por defecto de las páginas web- EL SENTIDO COMÚN INDICA no ponerle más carga a nuestro ordenador con Squid -pendientes con el espacio en disco para «caché»-.

      CUARTO.- Nuestro servidor Squid debemos configurarlo y decirle que está trabajando en ese modo modificando «/etc/squid/squid.conf» con nano o el editor que más os guste:

      http_port 3128 transparent

      Debemos, además, habilitar el reenvio de paquetes en «/etc/sysctl.conf»:

      net.ipv4.ip_forward=1
      net.ipv6.conf.all.forwarding=1

      Esta última linea si es que tenemos IPv6, es bueno configurarla de una vez a futuro.

      Por último reiniciar el servicio Squid tal como recomienda arriba el Sr. Isaac y reiniciar también el servicio de red:

      /etc/init.d/procps.sh restart

      ALGUNA FE DE ERRATA (o alguna burrada de mi parte) hacedmelo saber por esta misma vía, sus críticas y comentarios son bienvenidos;
      EL SR. ISAAC ES EL MODERADOR quien tendrá la última palabra en esta «lid».

  6.   Jimmy Olano dijo

    En este corto video prodemos ver cómo configurar a Mozilla para utilizar un servidor proxy, con la salvedad que utiliza una máquina virtual con ReactOS, pero es corto y pienso ILUSTRA lo que se desa configurar aquí (enlace inutilizado con espacios, quitadlos y navegareís):

    ht tps:/ / www. youtube. com/watch?v=st47K5t7s-Q

  7.   ProfeSalo dijo

    Recien comienzo a seguir tu estacion de radio, llevo 2 dias .. y muy buen contenido..
    saludos desde mexico..(soy docente y mi granito de arena es utilizar opensource)

  8.   ari dijo

    qusiera que me ayudes quiero dar el privilegio a un usuario de ver el facebook y que los otros esten con las restricciones configuradas ya y como habilitar en determinados horarios internet a los usuarios quisiera que me asesores gracias

  9.   Belkis dijo

    Ari lo que me explicaron al respecto es que la maquina que quieres no este restringida tiene que quedar fuera ,pero hasta alli lego la explicacion tambien soy inexperta en el tema

  10.   Victor dijo

    Buenas noches disculpen tal ves es un poco basica mi pregunta pero bueno, he instalado squid y configurado en un centos 5.4 , instale wine y ultrasurf, lo que pretendo hacer es compartir el internet de ultrasurf con squid, hago lo mismo en una maquina con windows XP con FreeProxy y ultrasurf y puedo compartirlo sin problema pero no se como hacerle en linux

  11.   Daniel Andrada dijo

    Te consulto, tengo una configuracion como la tuya, en mi caso redirecciono el puerto 80 al 8080 por donde corre el squid. El problema es que algunos usuarios dejan esa configuracion en sus pc daba de baja y acceden por el puerto 80 aunque no a todos los servicios . Esto con iptables. Tienes idea de por donde vendria a estar el problema?

  12.   Mer dijo

    Muy útil y bien explicado. Gracias!

    Tengo una duda, cuando quiero crear una acl, ¿dónde lo hago, es decir, en qué línea del archivo de configuración? Y debo poner inmediatamente 2 líneas más abajo la orden http_access como muestras en tu post? o dónde?

    Gracias de nuevo!! Saludos!