Búsqueda de sitios web

Configurar el servidor proxy Squid con acceso restringido y configurar clientes para usar proxy - Parte 5


Un Ingeniero certificado de la Fundación Linux es un profesional capacitado que tiene la experiencia para instalar, administrar y solucionar problemas de servicios de red en sistemas Linux, y está a cargo del diseño, implementación y mantenimiento continuo del sistema. amplia arquitectura.

Presentamos el programa de certificación de la Fundación Linux.

En la Parte 1 de esta serie, mostramos cómo instalar squid, un servidor de caché proxy para clientes web. Consulte esa publicación (enlace que se encuentra a continuación) antes de continuar si aún no ha instalado squid en su sistema.

  1. Parte 1: instalar servicios de red y configurar el inicio automático en el arranque

En este artículo, le mostraremos cómo configurar el servidor proxy Squid para otorgar o restringir el acceso a Internet y cómo configurar un cliente http o navegador web para usar ese servidor proxy.

Configuración de mi entorno de prueba

Servidor de calamar
Operating System :	Debian Wheezy 7.5
IP Address 	 :	192.168.0.15
Hostname	 :	dev2.gabrielcanepa.com.ar
Máquina cliente 1
Operating System :	Ubuntu 12.04
IP Address 	 :	192.168.0.104 
Hostname	 :	ubuntuOS.gabrielcanepa.com.ar
Máquina cliente 2
Operating System :	CentOS-7.0-1406
IP Address 	 :	192.168.0.17 
Hostname	 :	dev1.gabrielcanepa.com.ar

Recordemos que, en términos sencillos, un servidor proxy web es un intermediario entre uno (o más) ordenadores cliente y un determinado recurso de red, siendo el más común el acceso a Internet. En otras palabras, el servidor proxy está conectado por un lado directamente a Internet (o a un enrutador que esté conectado a Internet) y por el otro lado a una red de computadoras cliente que accederán a la World Wide Web a través de él.

Quizás se pregunte: ¿por qué querría agregar otra pieza de software a mi infraestructura de red?

Aquí están las 3 razones principales:

1. Squid almacena archivos de solicitudes anteriores para acelerar transferencias futuras. Por ejemplo, supongamos que cliente1 descarga CentOS-7.0-1406-x86_64-DVD.iso de Internet. Cuando cliente2 solicita acceso al mismo archivo, squid puede transferir el archivo desde su caché en lugar de descargarlo nuevamente de Internet. Como puedes adivinar, puedes utilizar esta función para acelerar las transferencias de datos en una red de computadoras que requieren actualizaciones frecuentes de algún tipo.

2. Las ACL (Listas de control de acceso) nos permiten restringir el acceso a sitios web y/o monitorear el acceso por usuario. Puedes restringir el acceso según el día de la semana, la hora del día o el dominio, por ejemplo.

3. Eludir los filtros web es posible mediante el uso de un proxy web al que se realizan solicitudes y que devuelve el contenido solicitado a un cliente, en lugar de que el cliente lo solicite directamente a Internet.

Por ejemplo, supongamos que ha iniciado sesión en cliente1 y desea acceder a www.facebook.com a través del enrutador de su empresa. Dado que el sitio puede estar bloqueado por las políticas de su empresa, puede conectarse a un servidor proxy web y solicitar acceso a www.facebook.com. Luego, el contenido remoto se le devuelve nuevamente a través del servidor proxy web, sin pasar por las políticas de bloqueo del enrutador de su empresa.

Configuración de Squid: conceptos básicos

El esquema de control de acceso del servidor proxy web Squid consta de dos componentes diferentes:

  1. Los elementos ACL son líneas directivas que comienzan con la palabra “acl” y representan tipos de pruebas que se realizan en cualquier transacción de solicitud.
  2. Las reglas de la lista de acceso constan de una acción permitir o denegar seguida de una serie de elementos ACL y se utilizan para indicar qué acción o limitación tiene. que se aplicará para una solicitud determinada. Se verifican en orden y la búsqueda en la lista finaliza tan pronto como una de las reglas coincide. Si una regla tiene varios elementos ACL, se implementa como una operación AND booleana (todos los elementos ACL de la regla deben coincidir para que la regla coincida).

El archivo de configuración principal de Squid es /etc/squid/squid.conf, que tiene ~5000 líneas de largo ya que incluye directivas de configuración y documentación. Por esa razón, crearemos un nuevo archivo squid.conf con solo las líneas que incluyen directivas de configuración para nuestra conveniencia, omitiendo líneas vacías o comentadas. Para hacerlo, usaremos los siguientes comandos.

mv /etc/squid/squid.conf /etc/squid/squid.conf.bkp

Y luego,

grep -Eiv '(^#|^$)' /etc/squid/squid.conf.bkp

OR

grep -ve ^# -ve ^$ /etc/squid/squid.conf.bkp > /etc/squid/squid.conf

Ahora, abra el archivo squid.conf recién creado y busque (o agregue) los siguientes elementos ACL y listas de acceso.

acl localhost src 127.0.0.1/32
acl localnet src 192.168.0.0/24

Las dos líneas anteriores representan un ejemplo básico del uso de elementos ACL.

  1. La primera palabra, acl, indica que se trata de una línea directiva de elemento ACL.
  2. La segunda palabra, localhost o localnet, especifica un nombre para la directiva.
  3. La tercera palabra, src en este caso, es un tipo de elemento ACL que se utiliza para representar la dirección IP de un cliente o un rango de direcciones, respectivamente. Puede especificar un único host por IP (o nombre de host, si tiene algún tipo de resolución DNS implementada) o por dirección de red.
  4. El cuarto parámetro es un argumento de filtrado que se “alimenta” a la directiva.

Las dos líneas siguientes son reglas de lista de acceso y representan una implementación explícita de las directivas ACL mencionadas anteriormente. En pocas palabras, indican que se debe otorgar acceso http si la solicitud proviene de la red local (localnet), o de localhost. Específicamente, ¿cuál es la red local permitida o las direcciones de host local? La respuesta es: los especificados en las directivas localhost y localnet.

http_access allow localnet
http_access allow localhost

En este punto puedes reiniciar Squid para aplicar los cambios pendientes.

service squid restart 		[Upstart / sysvinit-based distributions]
systemctl restart squid.service 	[systemd-based distributions]

y luego configure un navegador cliente en la red local (192.168.0.104 en nuestro caso) para acceder a Internet a través de su proxy de la siguiente manera.

En Firefox

1. Vaya al menú Editar y elija la opción Preferencias.

2. Haga clic en Avanzado, luego en la pestaña Red y finalmente en Configuración

3. Marque la Configuración manual del proxy e introduzca la dirección IP del servidor proxy y el puerto donde está escuchando. para conexiones.

Nota De forma predeterminada, Squid escucha en el puerto 3128, pero puedes anular este comportamiento editando la lista de acceso regla que comienza con http_port (por defecto dice http_port 3128).

4. Haga clic en Aceptar para aplicar los cambios y listo.

Verificar que un cliente está accediendo a Internet

Ahora puede verificar que su cliente de red local esté accediendo a Internet a través de su proxy de la siguiente manera.

1. En su cliente, abra una terminal y escriba,

ip address show eth0 | grep -Ei '(inet.*eth0)'

Ese comando mostrará la dirección IP actual de su cliente (192.168.0.104 en la siguiente imagen).

2. En su cliente, utilice un navegador web para abrir cualquier sitio web determinado (linux-console.net en este caso).

3. En el servidor, ejecute.

tail -f /var/log/squid/access.log

y obtendrá una vista en vivo de las solicitudes atendidas a través de Squid.

Restringir el acceso por cliente

Ahora suponga que desea denegar explícitamente el acceso a esa dirección IP de cliente en particular, manteniendo al mismo tiempo el acceso para el resto de la red local.

1. Defina una nueva directiva ACL de la siguiente manera (la he llamado ubuntuOS pero usted puede nombrarla como quiera).

acl ubuntuOS src 192.168.0.104

2. Agregue la directiva ACL a la lista de acceso a la red local que ya está implementada, pero precediéndola con un signo de exclamación. Esto significa, “Permitir el acceso a Internet a los clientes que coincidan con la directiva ACL de localnet, excepto al que coincida con la directiva ubuntuOS”.

http_access allow localnet !ubuntuOS

3. Ahora necesitamos reiniciar Squid para poder aplicar los cambios. Luego, si intentamos navegar a cualquier sitio, encontraremos que ahora el acceso está denegado.

Configuración de Squid – Ajuste fino

Restringir el acceso por dominio y/o por hora del día/día de la semana

Para restringir el acceso a Squid por dominio usaremos la palabra clave dstdomain en una directiva ACL, de la siguiente manera.

acl forbidden dstdomain "/etc/squid/forbidden_domains"

Donde forbidden_domains es un archivo de texto plano que contiene los dominios a los que deseamos denegar el acceso.

Finalmente, debemos otorgar acceso a Squid para solicitudes que no coincidan con la directiva anterior.

http_access allow localnet !forbidden

O tal vez solo queramos permitir el acceso a esos sitios durante una determinada hora del día (10:00 a 11:00 a.m.) solo el lunes (M), miércoles (mi) y viernes (viernes).

acl someDays time MWF 10:00-11:00
http_access allow forbidden someDays
http_access deny forbidden

De lo contrario, se bloqueará el acceso a esos dominios.

Restringir el acceso mediante autenticación de usuario

Squid admite varios mecanismos de autenticación (Basic, NTLM, Digest, SPNEGO y Oauth) y ayudas (base de datos SQL, LDAP, NIS, NCSA, por nombrar algunos). En este tutorial usaremos la autenticación básica con NCSA.

Agregue las siguientes líneas a su archivo /etc/squid/squid.conf.

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
auth_param basic credentialsttl 30 minutes
auth_param basic casesensitive on
auth_param basic realm Squid proxy-caching web server for Tecmint's LFCE series
acl ncsa proxy_auth REQUIRED
http_access allow ncsa

Nota: En CentOS 7, el complemento NCSA para squid se puede encontrar en /usr/lib64/squid/basic_nsca_auth, así que cambie en consecuencia en la línea anterior.

Algunas aclaraciones:

  1. Necesitamos decirle a Squid qué programa auxiliar de autenticación usar con la directiva auth_param especificando el nombre del programa (muy probablemente, /usr/lib/squid/ncsa_auth o /usr/lib64/squid/basic_nsca_auth), además de cualquier opción de línea de comando (/etc/squid/passwd en este caso) si es necesario.
  2. El archivo /etc/squid/passwd se crea a través de htpasswd, una herramienta para gestionar la autenticación básica a través de archivos. Nos permitirá agregar una lista de nombres de usuario (y sus correspondientes contraseñas) que podrán usar Squid.
  3. credentialsttl 30 minutos requerirá ingresar su nombre de usuario y contraseña cada 30 minutos (también puede especificar este intervalo de tiempo con horas).
  4. distingue entre mayúsculas y minúsculas activado indica que los nombres de usuario y las contraseñas distinguen entre mayúsculas y minúsculas.
  5. reino representa el texto del cuadro de diálogo de autenticación que se utilizará para autenticarse en squid.
  6. Por último, el acceso se concede sólo cuando la autenticación del proxy (proxy_auth REQUIRED) se realiza correctamente.

Ejecute el siguiente comando para crear el archivo y agregar credenciales para el usuario gacanepa (omita el indicador -c si el archivo ya existe).

htpasswd -c /etc/squid/passwd gacanepa

Abra un navegador web en la máquina cliente e intente navegar a cualquier sitio determinado.

Si la autenticación tiene éxito, se concede acceso al recurso solicitado. De lo contrario, se denegará el acceso.

Usar caché para acelerar la transferencia de datos

Una de las características distintivas de Squid es la posibilidad de almacenar en caché los recursos solicitados desde la web en el disco para acelerar futuras solicitudes de esos objetos, ya sea por parte del mismo cliente u otros.

Agregue las siguientes directivas en su archivo squid.conf.

cache_dir ufs /var/cache/squid 1000 16 256
maximum_object_size 100 MB
refresh_pattern .*\.(mp4|iso) 2880

Algunas aclaraciones de las directivas anteriores.

  1. ufs es el formato de almacenamiento de Squid.
  2. /var/cache/squid es un directorio de nivel superior donde se almacenarán los archivos de caché. Este directorio debe existir y Squid debe poder escribirlo (Squid NO creará este directorio por usted).
  3. 1000 es la cantidad (en MB) que se utilizará en este directorio.
  4. 16 es el número de subdirectorios de primer nivel, mientras que 256 es el número de subdirectorios de segundo nivel dentro de /var/spool/squid.
  5. La directiva maximum_object_size especifica el tamaño máximo de los objetos permitidos en la caché.
  6. refresh_pattern le dice a Squid cómo tratar con tipos de archivos específicos (.mp4 y .iso en este caso) y durante cuánto tiempo debe almacenar el archivo solicitado. objetos en caché (2880 minutos=2 días).

El primer y el segundo 2880 son límites inferior y superior, respectivamente, durante cuánto tiempo los objetos sin un tiempo de caducidad explícito se considerarán recientes y, por lo tanto, serán atendidos por la caché, mientras que 0% es el porcentaje de la antigüedad de los objetos (tiempo desde la última modificación) en el que cada objeto sin tiempo de vencimiento explícito se considerará reciente.

Estudio de caso: descargar un archivo .mp4 de 2 clientes diferentes y probar el caché

El primer cliente (IP 192.168.0.104) descarga un archivo 71 MB .mp4 en 2 minutos y 52 segundos.

¡El segundo cliente (IP 192.168.0.17) descarga el mismo archivo en 1,4 segundos!

Esto se debe a que el archivo se entregó desde el caché de Squid (indicado por TCP_HIT/200) en el segundo caso, a diferencia del primer caso, cuando se descargó directamente desde Internet (representado por TCP_MISS/200).

Las palabras clave HIT y MISS, junto con el código de respuesta 200 http, indican que el archivo se entregó correctamente en ambas ocasiones, pero el caché fue HIT. y Perdido respectivamente. Cuando el caché no puede atender una solicitud por algún motivo, Squid intenta atenderla desde Internet.

Conclusión

En este artículo hemos analizado cómo configurar un proxy de almacenamiento en caché web Squid. Puede utilizar el servidor proxy para filtrar contenidos utilizando un criterio elegido y también para reducir la latencia (ya que las solicitudes entrantes idénticas se atienden desde la memoria caché, que está más cerca del cliente que el servidor web que realmente sirve el contenido, lo que resulta en una velocidad más rápida). transferencias de datos) y también el tráfico de red (lo que reduce la cantidad de ancho de banda utilizado, lo que le ahorra dinero si paga por el tráfico).

Es posible que desee consultar el sitio web de Squid para obtener más documentación (asegúrese de consultar también la wiki), pero no dude en contactarnos si tiene alguna pregunta o comentario. ¡Estaremos más que encantados de saber de usted!