Configuración automática de proxy
Un archivo proxy auto-config (PAC) define cómo los navegadores web y otros agentes de usuario pueden elegir automáticamente el servidor proxy apropiado (método de acceso) para recuperar una URL determinada. .
Un archivo PAC contiene una función JavaScript FindProxyForURL(url, host). Esta función devuelve una cadena con una o más especificaciones de método de acceso. Estas especificaciones hacen que el agente de usuario utilice un servidor proxy particular o se conecte directamente.
Varias especificaciones proporcionan un respaldo cuando un proxy no responde. El navegador busca este archivo PAC antes de solicitar otras URL. La URL del archivo PAC se configura manualmente o se determina automáticamente mediante el protocolo de descubrimiento automático del proxy web.
Contexto
Los navegadores web modernos implementan varios niveles de automatización; Los usuarios pueden elegir el nivel que sea adecuado a sus necesidades. Los siguientes métodos se implementan comúnmente:
- Selección proxy automática: Especifique un nombre de host y un número de puerto que se utilizará para todas las URL. La mayoría de los navegadores le permiten especificar una lista de dominios (como
localhostEso evitará este proxy. - Autoconfiguración proxy (PAC): Especifique la URL para un archivo PAC con una función JavaScript que determina el proxy adecuado para cada URL. Este método es más adecuado para usuarios portátiles que necesitan varias configuraciones proxy diferentes, o configuraciones corporativas complejas con muchos proxies diferentes.
- Web Proxy Auto-Discovery Protocol (WPAD): Deje que el navegador adivine la ubicación del archivo PAC a través de DHCP y DNS.
Historia
El formato de archivo de configuración automática de Proxy fue diseñado originalmente por Netscape en 1996 para Netscape Navigator 2.0 y es un archivo de texto que define al menos una función de JavaScript.
El archivo PAC
Por convención, el archivo PAC normalmente se denomina proxy.pac. El estándar WPAD utiliza wpad.dat. Se espera que el archivo .pac contenga al menos un función:
FindProxyForURL(url, host), con dos argumentos y valor de retorno en formato específico:
- *
urles la URL del objeto - *
hostes el nombre de host derivado de esa URL. Sintácticamente es la misma cuerda que entre://y el primero:o/después de eso. - *
return "..."es una cadena de firmas en el siguiente formato (ver ejemplos a continuación):Regreso Valor = tipo host,":",puerto[{ ";,Regreso Valor }] Tipo = "DIRECT" Silencio "PROXY" Silencio "SOCKS" Silencio "HTTP" Silencio "HTTPS" Silencio "SOCKS4" Silencio "SOCKS5" anfitrión = UTF16String (* cuerda UTF16 compatible con ECMA262 *) puerto = UTF16String (* Digits *)
Para usarlo, se publica un archivo PAC en un servidor HTTP y se indica a los agentes de usuario del cliente que lo usen, ya sea ingresando la URL en la configuración de conexión proxy del navegador o mediante el uso del protocolo WPAD. La URL también puede hacer referencia a un archivo local como por ejemplo: file:///etc/proxy.pac.
Aunque la mayoría de los clientes procesarán el script independientemente del tipo MIME devuelto en la respuesta HTTP, en aras de la integridad y para maximizar la compatibilidad, el servidor HTTP debe configurarse para declarar el tipo MIME de este archivo como < b>application/x-ns-proxy-autoconfig o application/x-javascript-config.
Hay poca evidencia que favorezca el uso de un tipo MIME sobre el otro. Sin embargo, sería razonable suponer que application/x-ns-proxy-autoconfig será compatible con más clientes que application/x- javascript-config tal como se definió en la especificación original de Netscape; este último tipo se utiliza más recientemente.
Ejemplo
Un ejemplo muy simple de un archivo PAC es:
función FindProxyForURL()url, anfitrión) {} Regreso Proxy.example.com:8080; DIRECT ';}Esta función indica al navegador que recupere todas las páginas a través del proxy en el puerto 8080 del servidor proxy.example.com. Si este proxy no responde, el navegador contacta directamente con el sitio web, sin utilizar un proxy. Este último puede fallar si los firewalls u otros dispositivos de red intermediarios rechazan solicitudes de fuentes distintas al proxy, una configuración común en las redes corporativas.
Un ejemplo más complicado demuestra algunas funciones de JavaScript disponibles para usar en la función FindProxyForURL:
función FindProxyForURL()url, anfitrión) {} // nuestras URL locales de los dominios a continuación ejemplo.com no necesitan un proxy: si ()shExpMatch()anfitrión, '*.example.com ') {} Regreso 'DIRECT '; } // URLs dentro de esta red se acceden a través de // puerto 8080 en fastproxy.example.com: si ()isInNet()anfitrión, '10.0.0.0 ', '255.255.248.0') {} Regreso 'PROXY fastproxy.example.com:8080 '; } // Todas las demás solicitudes pasan por el puerto 8080 de proxy.example.com. // si eso no responde, vaya directamente a la WWW: Regreso Proxy.example.com:8080; DIRECT ';}De forma predeterminada, la palabra clave PROXY significa que se utiliza un proxy correspondiente al protocolo de la solicitud original, ya sea http, https o ftp. Otros tipos de palabras clave y proxy admitidos incluyen:
- SOCKS
- Usa un proxy SOCKS.
- HTTP, HTTPS
- Presentado en versiones más recientes de Firefox. Especifica un proxy HTTP(S).
- SOCKS4, SOCKS5
- Presentado en versiones más recientes de Firefox. Especifica la versión de protocolo SOCKS.
Limitaciones
Codificación de caracteres PAC
La codificación de los scripts PAC generalmente no se especifica, y diferentes navegadores y pilas de red tienen diferentes reglas sobre cómo se pueden codificar los scripts PAC. En general, los scripts PAC totalmente ASCII funcionarán con cualquier navegador o pila de red. Mozilla Firefox 66 y versiones posteriores también admiten scripts PAC codificados como UTF-8.
Resolución DNS
La función dnsResolve (y otras funciones similares) realiza una búsqueda de DNS que puede bloquear el navegador durante mucho tiempo si el servidor DNS no responde.
Mi dirección IP
A menudo se ha informado que la función myIpAddress proporciona resultados incorrectos o inutilizables, p. 127.0.0.1, la dirección IP del host local.
Puede resultar útil eliminar del archivo host del sistema (por ejemplo, /etc/hosts en Linux) cualquier línea que haga referencia al nombre del host de la máquina, mientras que la línea 127.0.0.1 localhost puede y debe permanecer.
Seguridad
En 2013, los investigadores comenzaron a advertir sobre los riesgos de seguridad de la configuración automática del proxy. La amenaza implica el uso de un PAC, descubierto automáticamente por el sistema, para redirigir el tráfico del navegador de la víctima a un servidor controlado por el atacante.
Otro problema con pac-file es que la implementación típica implica la recuperación http de texto sin cifrar, que no incluye ninguna característica de seguridad como firma de código o certificados web. Los atacantes pueden realizar ataques de intermediario fácilmente.
Viejos problemas de Microsoft
El almacenamiento en caché de los resultados de la configuración automática del proxy por nombre de dominio en Internet Explorer 5.5 o posterior de Microsoft limita la flexibilidad del estándar PAC. De hecho, puede elegir el proxy según el nombre de dominio, pero no según la ruta de la URL. Alternativamente, debe deshabilitar el almacenamiento en caché de los resultados de la configuración automática del proxy editando el registro.
Se recomienda utilizar siempre direcciones IP en lugar de nombres de dominio de host en la función isInNet para lograr compatibilidad con otros componentes de Windows que utilizan la configuración PAC de Internet Explorer, como .NET 2.0 Framework. Por ejemplo,
si ()isInNet()anfitrión, dnsResolve()sampledomain), '255.255.248.0') {} //.NET 2.0 resolverá el proxy correctamentesi ()isInNet()anfitrión, sampledomain, '255.255.248.0') {} //.NET 2.0 no resolverá el proxy correctamenteLa convención actual es realizar una conmutación por error a una conexión directa cuando un archivo PAC no está disponible.
Poco después de cambiar entre configuraciones de red (por ejemplo, al entrar o salir de una VPN), dnsResolve puede dar resultados obsoletos debido al almacenamiento en caché de DNS.
Por ejemplo, Firefox generalmente mantiene 20 entradas de dominio caché durante 60 segundos. Esto se puede configurar a través de network.dnsCacheEntries y network.dnsCacheExpiration variables de configuración. Flushing the system's DNS cache may also help, which can be achieved e.g. in Linux with sudo service dns-clean start o en Windows con ipconfig /flushdns.
En Internet Explorer 9, isInNet('localHostName', 'segunda.ip', '255.255.255.255') devuelve true y se puede utilizar como solución alternativa.
La función myIpAddress supone que el dispositivo tiene una única dirección IPv4. Los resultados no están definidos si el dispositivo tiene más de una dirección IPv4 o tiene direcciones IPv6.
Otros
Otras limitaciones están relacionadas con el motor JavaScript en la máquina local.
Funcionalidad avanzada
Los archivos PAC más avanzados pueden reducir la carga en servidores proxy, realizar equilibrio de carga, conmutación por error o incluso listas en blanco y negro antes de que la solicitud se envíe a través de la red. Se pueden devolver varios proxies:
Regreso Proxy1.example.com:80; PROXY proxy2.example.com:8080 ';Lo anterior intentará primero con proxy1 y, si no está disponible, intentará con proxy2.