Configuración de Squid Proxy Server con acceso restringido y configuración de clientes para usar proxy - Parte 5


Un ingeniero certificado por Linux Foundation 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 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.

Operating System :	Debian Wheezy 7.5
IP Address 	 :	192.168.0.15
Hostname	 :	dev2.gabrielcanepa.com.ar
Operating System :	Ubuntu 12.04
IP Address 	 :	192.168.0.104 
Hostname	 :	ubuntuOS.gabrielcanepa.com.ar
Operating System :	CentOS-7.0-1406
IP Address 	 :	192.168.0.17 
Hostname	 :	dev1.gabrielcanepa.com.ar

Recordemos que, en términos simples, un servidor proxy web es un intermediario entre una (o más) computadoras 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 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 esté preguntando, ¿por qué querría agregar otra pieza de software a mi infraestructura de red?

1. Squid almacena archivos de solicitudes anteriores para acelerar futuras transferencias . Por ejemplo, supongamos que client1 descarga CentOS-7.0-1406-x86_64-DVD.iso de Internet. Cuando client2 solicita acceso al mismo archivo, squid puede transferir el archivo desde su caché en lugar de descargarlo nuevamente de Internet. Como puede adivinar, puede usar 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. Puede 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, suponga 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 hacer que solicite acceso a www.facebook.com . Luego, el contenido remoto se le devuelve a través del servidor proxy web nuevamente, 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 contra cualquier transacción de solicitud.
  2. Las reglas de la lista de acceso consisten en una acción permitir o denegar seguida de varios elementos de ACL, y se utilizan para indicar qué acción o se debe hacer cumplir una limitación para una solicitud determinada. Se verifican en orden y la búsqueda de listas termina tan pronto como una de las reglas coincide. Si una regla tiene varios elementos de ACL, se implementa como una operación Y booleana (todos los elementos de 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 ya que incluye tanto las directivas de configuración como la 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, dejando fuera las líneas vacías o comentadas. Para hacerlo, usaremos los siguientes comandos.

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

Y entonces,

# 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 de directiva de elemento de 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 de ACL que se utiliza para representar la dirección IP de un cliente o un rango de direcciones, respectivamente. Puede especificar un solo 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 locales? La respuesta es: las especificadas en las directivas localhost y localnet.

http_access allow localnet
http_access allow localhost

En este punto, puede 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.

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. Verifique la Configuración manual del proxy e ingrese la dirección IP del servidor proxy y el puerto donde está escuchando las conexiones.

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

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

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 ( www.tecmint.com en este caso).

3. En el servidor, ejecute.

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

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

Restringir el acceso por parte del cliente

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

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

acl ubuntuOS src 192.168.0.104

2. Agregue la directiva ACL a la lista acceso a la red local que ya está en su lugar, 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 localnet, excepto al que coincida con la directiva ubuntuOS ".

http_access allow localnet !ubuntuOS

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

Configuración de Squid - Ajuste fino

Para restringir el acceso a Squid por dominio, usaremos la palabra clave dstdomain en una directiva ACL , como sigue.

acl forbidden dstdomain "/etc/squid/forbidden_domains"

Donde forbidden_domains es un archivo de texto sin formato 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 queremos permitir el acceso a esos sitios durante una determinada hora del día ( 10:00 a 11:00 am ) solo el lunes (M) , Miércoles (W) y Viernes (V) .

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.

Squid admite varios mecanismos de autenticación (Basic, NTLM, Digest, SPNEGO y Oauth) y ayudantes (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 cámbielo en consecuencia en la línea anterior.

Algunas aclaraciones:

  1. Necesitamos decirle a Squid qué programa de ayuda 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), más 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 administrar la autenticación básica a través de archivos. Nos permitirá agregar una lista de nombres de usuario (y sus contraseñas correspondientes) 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 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. Finalmente, el acceso se otorga solo cuando la autenticación de proxy ( proxy_auth REQUIRED ) tiene éxito.

Ejecute el siguiente comando para crear el archivo y agregar credenciales para el usuario gacanepa (omita la marca -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 un sitio determinado.

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

Uso de 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 las solicitudes futuras de esos objetos, ya sea por el mismo cliente o por 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 puede 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 manejar tipos de archivos específicos ( .mp4 y .iso en este caso) y por cuánto tiempo debería almacenar los objetos solicitados en la caché (2880 minutos u003d 2 días).

El primero y el segundo 2880 son límites inferior y superior, respectivamente, sobre cuánto tiempo los objetos sin un tiempo de vencimiento 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) que cada objeto sin una fecha de vencimiento explícita se considerará reciente.

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 sirvió desde la caché de Squid (indicado por TCP_HIT/200 ) en el segundo caso, a diferencia de la primera instancia, 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 la caché fue HIT. y Perdido respectivamente. Cuando el caché no puede atender una solicitud por algún motivo, Squid intenta hacerlo desde Internet.

Conclusión

En este artículo hemos discutido cómo configurar un proxy de almacenamiento en caché web Squid . Puede utilizar el servidor proxy para filtrar el contenido utilizando un criterio elegido, y también para reducir la latencia (ya que las solicitudes entrantes idénticas se atienden desde la caché, que está más cerca del cliente que el servidor web que en realidad está sirviendo el contenido, lo que resulta en un proceso más rápido transferencias de datos) y el tráfico de la red (lo que reduce la cantidad de ancho de banda utilizado, lo que le permite ahorrar 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 ponerse en contacto con nosotros si tiene alguna pregunta o comentario. ¡Estaremos más que encantados de saber de usted!