Documentos de Académico
Documentos de Profesional
Documentos de Cultura
GNU/Linux.
Squid es hoy por hoy, uno de los mejores web proxys que existen en Internet. Entre sus
es open-source
Hay que tener en cuenta que Squid no puede funcionar como proxy para servicios como
SMTP, POP3, TELNET, SSH, etc. Si se requiere hacer proxy para cualquier servicio
que vamos a simular con VirtualBox. En esta práctica, arrancaremos el ordenador con
Fedora, que realizará las funciones de proxy con Squid. Este servidor proxy tiene una
conexión a Internet que es la disponible a través de la tarjeta de red del equipo y una
conexión a una red privada de una empresa, que es la que simularemos con VirtualBox.
1/18
SAD 2 ASIR
Desde la máquina virtual con Windows o GNU/Linux, sólo vas a poder salir a Internet a
través del proxy Squid que configurarás en Fedora a lo largo de esta práctica. Primero
comprobarás como no puedes acceder a Internet desde tu equipo cliente, ya que la red
privada en la que se encuentra es desconocida para el router del instituto. Una vez
máquina virtual para que utilice el proxy Squid a través de la tarjeta privada entre el
2/18
SAD 2 ASIR
tenga dos tarjetas de red, una conectada a la red privada (vboxnet0) y otra a la red del
aula (la tarjeta física eth0 o eth1, depende de como se llame en tu equipo). Es
importante que para hacer una simulación real, deshabilites cualquier configuración
anteriores prácticas.
vboxnet0 de Fedora, que corresponde con la tarjeta virtual host-only, y que se conectará
ip: 10.1.1.1/27
Ahora nos queda configurar la tarjeta de red en la máquina virtual, que se conecta a la
red privada con el servidor proxy Fedora. Edita las propiedades de la tarjeta y
ip: 10.1.1.2/27
Puerta de enlace: ninguna (no es necesario pues vamos a usar un proxy sólo
3/18
SAD 2 ASIR
Instalación y configuración inicial Squid
Intenta arrancar Squid con systemctl start squid. Si Squid no arranca es porque Squid
no puede encontrar un nombre válido para tu servidor. Para ello edita como root el
Comprueba ahora que arranca Squid sin problemas ejecutando el comando systemctl
start squid.
4. Una vez comprobado que tenemos instalado Squid, vamos a realizar la configuración
necesaria para poder dar acceso a Internet a través de él. Squid se configura mediante
/etc/squid/squid.conf. Este archivo debe ser editado como root y tiene la configuración
mínima para poner en marcha un proxy con Squid, pero es muy extenso debido a que
tiene muchos comentarios dentro del archivo, que explican cada una de las directivas de
etiquetas como llaman los autores de squid) con parámetros que son los que definen el
Cada vez que hagas un cambio en el archivo de configuración, es necesario aplicar los
existir dos servidores o demonios “escuchando” en el mismo puerto tcp. Por esta razón
debes asegurarte, antes de poner en marcha un servicio de cualquier tipo que necesite
4/18
SAD 2 ASIR
estar a la escucha en algún puerto, que este puerto no se esté utlizando por otra
aplicación.
Evidentemente, este puerto de escucha podemos cambiarlo a nuestro antojo por las
puerto 3128 no entra en conflicto con ninguno más, pero si desearas hacerlo, tienes que
cambiar la etiqueta o parámetro “http_port” del archivo squid.conf. Por ejemplo, para
dejar el Squid a la escucha en el puerto 8080 y en el puerto 3128, debes introducir los
http_port 8080
http_port 3128
acepte peticiones de los clientes. Esto es útil porque si nuestro proxy tiene dos tarjetas
de red, una a la red privada y otra a Internet, no queremos que nadie pueda utilizar
nuestro proxy desde fuera de nuestra red privada. Por lo tanto, lo primero que haremos
será indicar que nuestro proxy Squid escuche en el puerto 3128 (el puerto por defecto) y
siguiente:
http_port direccion_ip:puerto
Modifica la línea del fichero donde se encuentra el parámetro http_port para que tu
práctica. Escribe la linea después de modificarla. Recuerda que para que el cambio
punto 4.
5/18
SAD 2 ASIR
En Squid es necesario establecer Listas de Control de Acceso (ACL) que definan una
red o bien ciertas maquinas en particular. A cada lista se le asignará una Regla de
espacios. El campo tipo_de_acl define el tipo de ACL que vamos a utilizar. Hay muchos
aproximadamente, donde figura el texto “TAG: acl”. Ahí tienes una referencia de la
sintaxis utilizada en la etiqueta acl y distintos ejemplos que puedes utilizar. Nosotros
usaremos para esta práctica los tipos src, dstdomain, dstdom_regex, url_regex,
urlpath_regex y time.
Si uno desea establecer una lista de control de acceso que defina sin mayor trabajo
subred. Por ejemplo, si se tiene una red donde las máquinas tienen direcciones IP
También puede definirse una ACL invocando un fichero localizado en cualquier parte del
6/18
SAD 2 ASIR
acl permitidos src "/etc/squid/permitidos"
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.15
192.168.1.16
192.168.1.20
192.168.1.40
Lo anterior estaría definiendo que la ACL denominada permitidos estaría compuesta por
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
Con allow permitimos el acceso según los criterios que define la acl y con deny
denegamos. Cuando coinciden los criterios que define la acl (por ip de origen o destino,
dominio de origen o destino, hora de la petición, protocolo, etc, etc.) con una petición al
7/18
SAD 2 ASIR
Si ponemos más de un nombre de una acl separadas por espacios, entonces deben de
dstdomain) hotmail.com.
La segunda acl, llamada localhost define una coincidencia con la ip de origen 127.0.0.1
(observa el uso del tipo src y de la máscara 255.255.255.255 para que coincidan todos
van procesando por orden de aparición, desde la primera hasta la última, pero en
cuanto se encuentra una coincidencia, squid deja de procesar las reglas. Observa
Order.
línea “http_access deny hotmail” al final, el resto de direcciones ip origen podrían entrar
a hotmail.
excepción. Pueden definirse, por ejemplo, dos ACL's, una denominada acl1 y otra
8/18
SAD 2 ASIR
denominada acl2, en la misma regla de control de acceso, en donde se asigna una
que comprenda acl1 excepto aquello que comprenda acl2 (sería como el “negado” de
lista2):
Este tipo de reglas son útiles cuando se tiene un gran grupo de IP dentro de un rango de
red al que se debe permitir acceso, y otro grupo dentro de la misma red al que se debe
denegar el acceso.
Ejemplo
Habiendo hecho lo anterior, la sección de ACL's debe quedar más o menos del siguiente
modo:
9/18
SAD 2 ASIR
http_access allow todalared
Habiendo hecho lo anterior, la zona de reglas de control de acceso debería quedar más
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
Observa como al final ponemos un deny all para denegar cualquier otra cosa que no
permitir el acceso SÓLO a los clientes de tu red privada y a NADIE MÁS. Para ello
práctica y modificar las líneas del fichero de configuración de Squid que se llaman
Una vez realizadas las modificaciones, guarda el archivo y reinicia el servicio de Squid.
7. Ahora es el momento de configurar el navegador del cliente virtual para que pueda
acceder a Internet a través del proxy Squid que has configurado. Para ello, abre el
10/18
SAD 2 ASIR
navegador en el cliente y configura el proxy de forma manual para que pueda navegar.
Escribe la dirección ip y el puerto del proxy que has tenido que configurar para que
Al seleccionar la casilla “No usar servidor proxy para direcciones locales” en “Internet
Acepta los cambios y prueba ahora a navegar a través del proxy. Si no te funciona
8. Llegado a este punto, ya puedes navegar (sólo navegar) por Internet a través del proxy
Squid configurado en Fedora. Observa que no puedes hacer ping hacia el exterior ni
resolver nombres ya que aunque tengas configurado algún dns, no puedes llegar a ellos
porque sólo tienes acceso al exterior por http a través del proxy. Cuando solicitas una
propio proxy y no el equipo cliente. Prueba a resolver unos cuantos nombres desde
9. Hasta ahora hemos visto como podemos fácilmente dar acceso a la web a una red
11/18
SAD 2 ASIR
denegar el acceso a la web desde determinados equipos de nuestra red
En esta parte de la práctica vamos a filtrar el acceso a la web en Squid mediante ACL's
por url, por la extensión de los archivos y por las horas de conexión.
10. Vamos a suponer que no deseamos que nuestro clientes web accedan al portal de
Yahoo en España. Por tanto deberíamos cortar la url www.yahoo.es en Squid. La forma
de realizar esto es creando una ACL con la etiqueta acl y aplicándola como regla con la
Para crear listas de acceso basándonos en el dominio de la url, Squid dispone de las
Consultando el fichero squid.conf, escribe una acl que deniegue el acceso al dominio
recordar que el orden de las reglas http_access es fundamental, asi es que si quieres
denegar un dominio a todos los clientes, debes ponerla antes de las líneas:
11. Modifica ahora la acl que has creado en el punto anterior para que además de yahoo.es,
efectivamente funciona.
12/18
SAD 2 ASIR
12. Para crear filtros más avanzados por dominio de destino squid nos proporciona el tipo
expresiones regulares son un tipo de patrones más avanzados que los típicos basados
del servidor del aula, puedes descargar una pequeña refencia de como funcionan las
expresiones regulares.
Por ejemplo para expresar cualquier carácter en vez de un ? escribimos un punto (.)
Pero un punto sólo marca coincidencia con un carácter. Si queremos algo parecido al
asterisco indica cero o más veces. En la siguiente tabla puedes ver los caracteres de
Ten en cuenta que el punto (.) se utiliza para representar cualquier carácter por tanto si
lo que quieres es que haya una coincidencia con un punto (.) debes anteponerle el
Por tanto, si quieres escribir una expresión regular que coincida con cualquier secuencia
.*\.dominio\..*
13/18
SAD 2 ASIR
Observa que cuando hemos querido representar la coincidencia con el carácter punto (.)
No obstante, la forma correcta y precisa de definir una expresión regular para dar una
^(.+\.)?(yahoo|messenger)\..+$
“^” significa el principio de la cadena, por ejemplo “^hola” da una coincidencia en la frase
“hola mundo” pero no en la frase “que tal, hola”, porque “hola” no está al principio de la
cadena de caracteres.
paréntesis. Lo que hay entre paréntesis indica: cualquier carácter 1 o más veces
seguido de un punto (.+\.). El “?” del final indica que esta secuencia o subexpresión
regular, puede aparecer 0 y 1 vez, es decir, no aparecer o aparecer una sola vez.
“$” significa el final de la cadena, por ejemplo “mundo$” da una coincidencia en la frase
“hola mundo” pero no en la frase “que tal mundo, hola”, porque “mundo” no está al final
de la cadena.
Vista esta breve introducción a las expresiones regulares, crea una acl que deniegue el
14/18
SAD 2 ASIR
Puedes comentar la acl y la orden http_access creadas en al punto anterior. Escribe la
acl creada.
13. En este punto de la práctica vamos a habilitar un filtro que impida descargarse archivos
ejecutables como los .exe ni tampoco comprimidos con Winzip ni con WinRAR, es decir,
las extensiones .zip y .rar. Este tipo de filtros pueden ser necesarios para evitar que
determinados tipos de archivos no son siempre por razones de seguridad sino a veces
por cuestiones de utilización ancho de banda. Por ejemplo podemos denegar las
Para crear estos filtros en squid debes utilizar las acl's de tipo urlpath_regex. Busca en
los comentarios del fichero squid.conf la sintaxis para crear filtros con expresiones
regulares basadas en la url (no en el dominio, como antes). En el ejemplo que tienes en
el fichero, se muestra como definir un patrón para ficheros gif. Observa que se utiliza el
carácter $ en la expresión regular. Este carácter indica que lo buscamos debe estar al
final de la línea. Por ejemplo, para evitar que se descarguen mp3, la expresión regular
sería “\.mp3$”.
Crea por tanto una acl que restrinja el acceso a ficheros con extensión “.exe”, “.rar”,
“.zip”, “tar.gz” o “.iso”. Después, intenta descargarte desde la web de ubuntu la iso de
la última versión y verifica que no puedes hacerlo porque es un fichero denegado por el
proxy.
15/18
SAD 2 ASIR
14. En este punto de la práctica veremos cómo restringir al acceso a la web en función del
día y la hora. Para ello squid disponde del tipo de acl time. La sintaxis general es la
siguiente:
S - Domingo
M - Lunes
T - Martes
W - Miércoles
H - Jueves
F - Viernes
A – Sábado
y las horas (opcional) son con el formato de horas y minutos que se especifica en la
sintaxis. Los días y las horas son opcionales pero al menos debe estar presente uno de
ellos. Por ejemplo para denegar el acceso desde las 8 de la mañana hasta las 7 de la
Teniendo en cuenta la fecha que tienes en Fedora, crea una acl que permita navegar a
partir de unos minutos después de la hora actual y sólo durante un par de minutos, sin
15. Reinicia squid y comprueba que sólo puedes navegar cuando llegue esa hora y durante
los minutos que has especificado. Para escribir la acl, ten en cuenta que es más fácil
definir el tiempo durante el cual quieres que se navegue y después aplicar un http_deny
16/18
SAD 2 ASIR
16. Como ya hemos visto en clase, una de las funcionalidades más útiles de un proxy http
squid podemos hacer uso de esta funcionalidad que ya viene habilitada por defecto. En
este punto de la práctica vamos a ver algunas de los parámetros que utiliza squid para
gestionar su caché.
objetos que serán guardados en la caché de disco. Por defecto son 4MB, por lo tanto,
objetos que serán guardados en la caché de disco. Por defecto son 0 KB, es decir, no
hay un mínimo. Si especificas un valor de 4KB quiere decir que los objetos que ocupen
servidor proxy. Squid utiliza caché de memoria ram y caché de disco para acelerar la
en ambas cachés y que no entraremos en ellos ya que dejaremos sus valores por
defecto. Únicamente debes saber que el algoritmo de reemplazo por defecto es el LRU
(Last Recent Used) que significa que los objetos que han sido menos usados
17/18
SAD 2 ASIR
18. El parámetro cache_dir se utiliza para establecer donde se guarda la caché y qué
tamaño en MB que se desea que tenga el cache en el disco duro para Squid, es decir,
¿cuánto se desea almacenar de Internet en el disco duro? Por defecto Squid utilizará un
incrementar el tamaño del cache hasta donde lo desee el administrador. Mientras más
grande el cache, más objetos de almacenarán en éste y por lo tanto se utilizará menos
Los números 16 y 256 significan que el directorio del cache contendrá 16 subdirectorios
con 256 niveles cada uno. No modifiques estos números, no hay necesidad de hacerlo.
Utiliza el comando du de Linux para saber cuanto está ocupando en disco en este
momento en MB la caché de Squid y anota el valor. Utiliza la ayuda del comando du (du
¿Cuál es el comando y las opciones que debes usar para saber cuanto ocupa la
cache de Squid?
18/18