Squid como proxy semi-transparente.

Transcripción

Squid como proxy semi-transparente.
Squid como proxy semi-transparente.
Como explicábamos al inicio del proyecto, existe una problemática con las conexiones HTTPS al
situar un proxy entre la máquina del cliente y el servidor externo si queremos que este sea
transparente para el cliente. Estamos filtrando conexiones seguras enviándole al cliente un
certificado generado por el propio proxy. Podría comprometer la seguridad si algún intruso
accediese a la máquina del proxy, además de que en muchos foros se considera como un hack
man-in-the-middle.
Así que después de varias pruebas e investigaciones hemos considerado una alternativa intermedia
entre que el proxy sea transparente y filtrar el tráfico HTTPS en una especie de proxy-in-the-middle
y no lo sea lo que implica que el cliente deberá configurar de forma manual su navegador para la
utilización del proxy.
La alternativa se basa en el uso de WPAD.
WPAD : Web Proxy Auto-discovery Protocol .es un método utilizado por los clientes para localizar
una dirección URL de un archivo de configuración mediante DHCP y / o métodos de
descubrimiento de DNS. Una vez que la detección y la descarga del archivo de configuración se ha
completado se puede ejecutar para determinar el proxy para una dirección URL especificada.
Se basa en el anunciamiento de la configuración del proxy vía DHCP o bien DNS a los clientes de
la red. Estos tan solo tendrán que configurar en su navegador la detección de configuración
automática del servidor proxy. WPAD se encargará del resto.
Los clientes descargan y ejecutan un archivo, que debe denominarse wpad.dat, utilizando el
formato de auto-configuración de proxy (PAC, Proxy Auto-Config) diseñado por Netscape en 1996
para Netscape Navigator 2.0.
Teniendo en cuenta que en la máquina real del instituto tenemos un servidor DHCP y un DNS
podremos implementar esto sin problemas. Es por esto, en este intento de replicar la realidad, que
hemos implementado en la fase inicial nuestro propio servidor DHCP y DNS en la máquina de este
proyecto.
Así que vamos a realizar los pasos oportunos para anunciar el proxy squid que tenemos configurado
para las 3 aulas que van a usarlo.
Implementación.
Generamos un directorio nuevo en el directorio root de apache2 /var/www que deberá tener los
permisos de acceso y escritura para usuario y de acceso para grupo y otros.
mkdir -m 0775 /var/www/wpad
Ahora dentro de este directorio nuevo vamos a generar un archivo denominado wpad.dat que será
indispensable que tenga permisos de lectura para todos para poder compartirlo mediante el servidor
apache2.
El contenido de dicho archivo, adaptado para este caso será el siguiente.
function FindProxyForURL(url, host)
{
if (
isInNet(host, "192.168.202.0", "255.255.255.0")
|| isInNet(host, "127.0.0.0", "255.0.0.0")
|| shExpMatch(host, "192.168.202.*")
|| shExpMatch(host, "127.*" )
|| shExpMatch(host, "localhost")
|| shExpMatch(host, "*.iesebre.com")
|| isPlainHostName(host)
|| dnsDomainIs(host, ".iesebre.com")
){
return "DIRECT";
}
else
{
return "PROXY 192.168.202.1:3128";
}
if (
isInNet(host, "192.168.203.0", "255.255.255.0")
|| isInNet(host, "127.0.0.0", "255.0.0.0")
|| shExpMatch(host, "192.168.203.*")
|| shExpMatch(host, "127.*" )
|| shExpMatch(host, "localhost")
|| shExpMatch(host, "*.iesebre.com")
|| isPlainHostName(host)
|| dnsDomainIs(host, ".iesebre.com")
){
return "DIRECT";
}
else
{
return "PROXY 192.168.203.1:3128";
}
if (
isInNet(host, "192.168.204.0", "255.255.255.0")
|| isInNet(host, "127.0.0.0", "255.0.0.0")
|| shExpMatch(host, "192.168.204.*")
|| shExpMatch(host, "127.*" )
|| shExpMatch(host, "localhost")
|| shExpMatch(host, "*.iesebre.com")
|| isPlainHostName(host)
|| dnsDomainIs(host, ".iesebre.com")
){
return "DIRECT";
}
else
{
return "PROXY 192.168.204.1:3128";
}
}
Es una función con 3 condiciones (if). Según se pertenezca a un aula u otra se devolverá (return)
una configuración u otra del proxy en base a la red de cada aula a la que damos servicio.
Le damos permisos de lectura para todos los usuarios.
# chmod +r /var/www/wpad/wpad.dat
En algunas versiones de IE 6+ se tienen problemas para localizar el archivo wpad.dat, al parecer
hace búsqueda de un archivo llamado wpad.da, se recomienda crear un enlace simbólico para evitar
el problema. Igualmente crearemos un enlace simbólico a un archivo denominado proxy.pac para
evitar este tipo de problemas.
# cd /var/www/wpad
# ln -s wpad-dat wpad.da
# ln -s wpad.dat proxy.pac
Ahora crearemos un alías en la zona directa del dominio principal para que pueda resolver la
dirección:
wpad.iesebre.com
Línea para crear el alías:
wpad
CNAME
server10
Reiniciamos el servicio bind y comprobamos desde un cliente.
# /etc/init.d/bind9 restart
Vamos a realizar el anuncio por DHCP esto implica añadir unas líneas en el archivo de
configuración del servidor para que se haga dicho anuncio.
El servidor ISC-dhcp-Server soporta el uso de la opción 252 asignada para proveer información
para localizar el script de auto configuración. En la sección de parámetros globales del archivo de
configuración dhcpd.conf(5) define la opción wpad con el código 252 y de tipo text.
Abrimos el archivo /etc/dhcp/dhcpd.conf para añadir estas líneas:
option wpad-url code 252 = text;
option wpad-url "http://wpad.iesebre.com/wpad.dat\n";
option wpad-url "http://wpad.iesebre.com/wpad.da\n";
option wpad-url "http://wpad.iesebre.com/proxy.pac\n";
Se agrega el carácter de salto de línea(\n) para compensar el bug de IE 6+ que elimina el último
carácter.
Ponemos 3 opciones para solucionar posibles problemas con los navegadores/versiones.
Guardamos los cambios y reiniciamos el servidor DHCP.
# service isc-dhcp-server restart
Por último solo nos queda configurar apache2 para que los clientes puedan recibir el archivo.
Editamos un nuevo archivo (wpad) en:
/etc/apache2/sites-available/wpad
cuyo contenido será el siguiente:
<VirtualHost *:80>
ServerName wpad.iesebre.com
ServerAlias proxy wpad wpad.iesebre.com
DocumentRoot /var/www/wpad
<Directory /var/www/wpad/>
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from 192.168.202.0/24 192.168.203.0/24 192.168.204.0/24
</Directory>
</VirtualHost>
Guardamos los cambios , activamos el nuevo sitio y lo validamos.
# a2ensite wpad
# apache2ctl -t -d DUMP_VHOSTS
Recargamos apache2 para hacer efectivos los cambios.
# service apache2 reload
Comprobaciones.
Ahora que tenemos squid configurado, vamos a realizar la prueba de que todo funciona bien.
Como el proxy no es transparente del todo debemos configurar en el navegador del cliente la
detección automática del proxy.
Para firefox:
Editar ==> Preferencias ==> Avanzado ==> Red
Para Internet Explorer:
Herramientas=>Opciones de Internet=>Conexiones=>Configuración de LAN=>Avanzadas
Esto será cuanto tiene que hacer el cliente respecto a la configuración. El navegador se encargará de
encontrar el archivo que hemos anunciado por DHCP para configurarse.
Abrimos www.google.com cuyo protocolo es HTTPS.
Podemos ver que conectamos sin problemas con el nuevo proxy auto-configurado.
Nos dejará buscar dominios como facebook pero al intentar entrar nos negará el acceso.
Si intentamos hacer una búsqueda de alguna de las palabras prohibidas o entrar en alguna web que
las lleve nos negará el acceso.

Documentos relacionados