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. Part 1 – Install Network Services and Configuring Auto Startup at Boot

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 (oa 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 . 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. The ACL elements are directive lines that begin with the word “acl” and represent types of tests that are performed against any request transaction.
  2. The access list rules consist of an allow or deny action followed by a number of ACL elements, and are used to indicate what action or limitation has to be enforced for a given request. They are checked in order, and list searching terminates as soon as one of the rules is a match. If a rule has multiple ACL elements, it is implemented as a boolean AND operation (all ACL elements of the rule must be a match in order for the rule to be a match).

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. The first word, acl, indicates that this is a ACL element directive line.
  2. The second word, localhost or localnet, specify a name for the directive.
  3. The third word, src in this case, is an ACL element type that is used to represent a client IP address or range of addresses, respectively. You can specify a single host by IP (or hostname, if you have some sort of DNS resolution implemented) or by network address.
  4. The fourth parameter is a filtering argument that is “fed” to the directive.

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 .

Restricción de acceso por cliente

Ahora suponga que quiere 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 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á en su lugar, pero precediéndola con un signo de exclamación. Esto significa, " Permita 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 cambie en consecuencia en la línea anterior.

Algunas aclaraciones:

  1. We need to tell Squid which authentication helper program to use with the auth_param directive by specifying the name of the program (most likely, /usr/lib/squid/ncsa_auth or /usr/lib64/squid/basic_nsca_auth), plus any command line options (/etc/squid/passwd in this case) if necessary.
  2. The /etc/squid/passwd file is created through htpasswd, a tool to manage basic authentication through files. It will allow us to add a list of usernames (and their corresponding passwords) that will be allowed to use Squid.
  3. credentialsttl 30 minutes will require entering your username and password every 30 minutes (you can specify this time interval with hours as well).
  4. casesensitive on indicates that usernames and passwords are case sensitive.
  5. realm represents the text of the authentication dialog that will be used to authenticate to squid.
  6. Finally, access is granted only when proxy authentication (proxy_auth REQUIRED) succeeds.

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 is the Squid storage format.
  2. /var/cache/squid is a top-level directory where cache files will be stored. This directory must exist and be writeable by Squid (Squid will NOT create this directory for you).
  3. 1000 is the amount (in MB) to use under this directory.
  4. 16 is the number of 1st-level subdirectories, whereas 256 is the number of 2nd-level subdirectories within /var/spool/squid.
  5. The maximum_object_size directive specifies the maximum size of allowed objects in the cache.
  6. refresh_pattern tells Squid how to deal with specific file types (.mp4 and .iso in this case) and for how long it should store the requested objects in cache (2880 minutes = 2 days).

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 Missed 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 caché web Squid . Puede usar el servidor proxy para filtrar contenidos usando 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 realmente está sirviendo el contenido, lo que resulta en una transferencias de datos) y el tráfico de la red (reduciendo 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 encantados de saber de usted!