Автоконфигурация прокси
Файл автоматической настройки прокси-сервера ( PAC ) определяет, как веб-браузеры и другие пользовательские агенты могут автоматически выбирать соответствующий прокси-сервер (метод доступа) для получения заданного URL-адреса .
Файл PAC содержит JavaScript. функцию FindProxyForURL(url, host)
. Эта функция возвращает строку с одной или несколькими спецификациями метода доступа. Эти спецификации заставляют пользовательский агент использовать определенный прокси-сервер или подключаться напрямую. [1]
Множественные спецификации обеспечивают запасной вариант, когда прокси-сервер не отвечает. Браузер извлекает этот PAC-файл перед запросом других URL-адресов. URL-адрес файла PAC либо настраивается вручную, либо определяется автоматически протоколом автоматического обнаружения веб-прокси.
Контекст
[ редактировать ]Современные веб-браузеры реализуют несколько уровней автоматизации; пользователи могут выбрать уровень, соответствующий их потребностям. Обычно применяются следующие методы:
- Автоматический выбор прокси: укажите имя хоста и номер порта, которые будут использоваться для всех URL-адресов. Большинство браузеров позволяют указать список доменов (например,
localhost
), который будет обходить этот прокси. - Автоматическая настройка прокси-сервера (PAC). Укажите URL-адрес для файла PAC с помощью функции JavaScript, которая определяет подходящий прокси-сервер для каждого URL-адреса. Этот метод больше подходит для пользователей ноутбуков, которым требуется несколько различных конфигураций прокси-серверов или сложные корпоративные настройки с множеством разных прокси-серверов.
- Протокол автоматического обнаружения веб-прокси (WPAD). Позвольте браузеру угадать местоположение файла PAC с помощью поиска DHCP и DNS .
История
[ редактировать ]Формат файла автоматической настройки прокси-сервера был первоначально разработан Netscape в 1996 году для Netscape Navigator 2.0. [2] и представляет собой текстовый файл , который определяет хотя бы одну функцию JavaScript.
PAC-файл
[ редактировать ]По соглашению файл PAC обычно называется proxy.pac
. Стандарт WPAD использует wpad.dat
. .pac
Ожидается, что файл будет содержать хотя бы одну функцию:
FindProxyForURL(url, host)
с двумя аргументами и возвращаемым значением в определенном формате:
- *
url
это URL-адрес объекта - *
host
— это имя хоста, полученное из этого URL-адреса. Синтаксически это та же строка, что и между://
и первый:
или/
после этого. [3] - *
return "..."
представляет собой строку подписей в следующем формате (см. примеры ниже): [примечание 1]returnValue = type host,":",port,[{ ";",returnValue }]; type = "DIRECT" | "PROXY" | "SOCKS" | "HTTP" | "HTTPS" | "SOCKS4" | "SOCKS5" host = UTF16String (* ECMA262-compatible UTF16 string *) port = UTF16String (* Digits *)
Для его использования PAC-файл публикуется на HTTP-сервере , и клиентские пользовательские агенты получают указание использовать его либо путем ввода URL-адреса в настройках прокси-соединения браузера, либо с помощью протокола WPAD. URL-адрес также может ссылаться на локальный файл, например: file:///etc/proxy.pac
.
Несмотря на то, что большинство клиентов будут обрабатывать сценарий независимо от типа MIME , возвращаемого в ответе HTTP , для полноты и максимальной совместимости HTTP-сервер должен быть настроен так, чтобы объявлять тип MIME этого файла: application/x-ns-proxy-autoconfig
или application/x-javascript-config
.
Существует мало доказательств в пользу использования одного типа MIME перед другим. Однако было бы разумно предположить, что application/x-ns-proxy-autoconfig
будет поддерживаться больше клиентов, чем application/x-javascript-config
как это было определено в исходной спецификации Netscape, последний тип стал использоваться совсем недавно.
Пример
[ редактировать ]Очень простой пример файла PAC:
function FindProxyForURL(url, host) {
return 'PROXY proxy.example.com:8080; DIRECT';
}
Эта функция указывает браузеру получать все страницы через прокси-сервер через порт 8080 сервера. proxy.example.com
. Если этот прокси-сервер не отвечает, браузер связывается с веб-сайтом напрямую, без использования прокси-сервера. Последнее может дать сбой, если межсетевые экраны или другие промежуточные сетевые устройства отклоняют запросы от источников, отличных от прокси-сервера (обычная конфигурация в корпоративных сетях).
Более сложный пример демонстрирует некоторые доступные функции JavaScript, которые можно использовать в FindProxyForURL
функция:
function FindProxyForURL(url, host) {
// our local URLs from the domains below example.com don't need a proxy:
if (shExpMatch(host, '*.example.com')) {
return 'DIRECT';
}
// URLs within this network are accessed through
// port 8080 on fastproxy.example.com:
if (isInNet(host, '10.0.0.0', '255.255.248.0')) {
return 'PROXY fastproxy.example.com:8080';
}
// All other requests go through port 8080 of proxy.example.com.
// should that fail to respond, go directly to the WWW:
return 'PROXY proxy.example.com:8080; DIRECT';
}
По умолчанию ключевое слово PROXY означает, что используется прокси, соответствующий протоколу исходного запроса, будь то http, https или ftp. Другие поддерживаемые типы ключевых слов и прокси включают:
- НОСКИ
- Используйте SOCKS- прокси.
- HTTP, HTTPS
- Представлено в более поздних версиях Firefox. Указывает прокси-сервер HTTP(S).
- НОСКИ4, НОСКИ5
- Представлено в более поздних версиях Firefox. Указывает версию протокола SOCKS.
Ограничения
[ редактировать ]Кодировка символов PAC
[ редактировать ]Кодировка сценариев PAC обычно не определена, и разные браузеры и сетевые стеки имеют разные правила кодирования сценариев PAC. В общем, полностью ASCII- скрипты PAC будут работать с любым браузером или сетевым стеком. Mozilla Firefox 66 и более поздних версий дополнительно поддерживает сценарии PAC в кодировке UTF-8 . [4]
DnsResolve
[ редактировать ] Функция dnsResolve
(и подобные другие функции) выполняет поиск DNS , который может заблокировать браузер на долгое время, если DNS-сервер не отвечает.
myIpAddress
[ редактировать ] The myIpAddress
Часто сообщалось, что функция дает неправильные или непригодные для использования результаты, например 127.0.0.1
, IP-адрес локального хоста. [5]
Это может помочь удалить файл хоста системы (например, /etc/hosts
в Linux) любые строки, относящиеся к имени хоста машины, а строка 127.0.0.1 localhost
можно и нужно остаться. [ нужна ссылка ]
Безопасность
[ редактировать ]В 2013 году исследователи начали предупреждать об угрозах безопасности, связанных с автоматической настройкой прокси. [6] Угроза заключается в использовании PAC, автоматически обнаруженного системой, для перенаправления трафика браузера жертвы на сервер, контролируемый злоумышленником.
Другая проблема с pac-файлом заключается в том, что типичная реализация включает получение открытого HTTP-текста, который не включает в себя какие-либо функции безопасности, такие как подписывание кода или веб-сертификаты. Злоумышленники могут легко выполнить атаку «человек посередине» .
Старые проблемы Microsoft
[ редактировать ]Кэширование результатов автоматической настройки прокси-сервера по имени домена в Microsoft Internet Explorer 5.5 или новее ограничивает гибкость стандарта PAC. Фактически вы можете выбрать прокси-сервер на основе имени домена, а не пути URL-адреса. Как вариант, нужно отключить кэширование результатов автонастройки прокси, отредактировав реестр . [7]
Рекомендуется всегда использовать IP-адреса вместо доменных имен хостов в isInNet
функция для совместимости с другими компонентами Windows, которые используют конфигурацию PAC Internet Explorer, например .NET 2.0 Framework . Например,
if (isInNet(host, dnsResolve(sampledomain), '255.255.248.0')) {} // .NET 2.0 will resolve proxy properly
if (isInNet(host, sampledomain, '255.255.248.0')) {} // .NET 2.0 will not resolve proxy properly
Текущее соглашение заключается в переключении на прямое соединение, когда файл PAC недоступен.
Вскоре после переключения между конфигурациями сети (например, при входе в VPN или выходе из нее) dnsResolve
может давать устаревшие результаты из-за кэширования DNS.
Например, Firefox обычно хранит 20 записей домена в кэше в течение 60 секунд. Это можно настроить через network.dnsCacheEntries
и network.dnsCacheExpiration
переменные конфигурации. Также может помочь очистка системного кэша DNS , чего можно добиться, например, в Linux с помощью sudo service dns-clean start или в Windows с помощью ipconfig /flushdns.
В Internet Explorer 9 isInNet('localHostName', 'second.ip', '255.255.255.255')
возвращает true
и может быть использован в качестве обходного пути.
The myIpAddress
предполагает, что устройство имеет один IPv4-адрес. Результаты не определены, если устройство имеет более одного адреса IPv4 или имеет адреса IPv6.
Другие
[ редактировать ]Дальнейшие ограничения связаны с движком JavaScript на локальном компьютере.
Расширенная функциональность
[ редактировать ]Более продвинутые файлы PAC могут снизить нагрузку на прокси, выполнить балансировку нагрузки, аварийное переключение или даже внесение в черный / белый список перед отправкой запроса через сеть. Можно вернуть несколько прокси:
return 'PROXY proxy1.example.com:80; PROXY proxy2.example.com:8080';
Вышеуказанное сначала пробует прокси1, а если он недоступен, затем пробует прокси2.
Примечания
[ редактировать ]Ссылки
[ редактировать ]- ^ «Файл автоматической настройки прокси (PAC) — HTTP | MDN» . http://developer.mozilla.org . 23 апреля 2023 г. Проверено 2 июля 2023 г.
- ^ «Формат файла автоматической настройки прокси-сервера Navigator» . Документация Netscape Navigator . Март 1996 г. Архивировано из оригинала 2 июня 2007 г. Проверено 5 июля 2013 г.
- ^ «Файл автоматической настройки прокси (PAC) — HTTP | MDN» . 23 апреля 2023 г.
- ^ «Ошибка 1492938 — сценарии автоконфигурации прокси-сервера должны загружаться как UTF-8, если они действительны UTF-8, в противном случае — как Latin-1 (байт — это кодовая точка)» . Проверено 10 апреля 2019 г.
- ^ «Ошибка 347307. Нужен способ определить лучший локальный IP-адрес для использования файлов PAC» . Проверено 18 апреля 2022 г.
- ^ Лемос, Роберт (06 марта 2013 г.). «Киберпреступники, вероятно, расширят использование браузерных прокси» . Проверено 20 апреля 2016 г.
- ^ «Microsoft KB 271361 — Как отключить автоматическое кэширование прокси-сервера в Internet Explorer» . Проверено 27 июня 2024 г.
Внешние ссылки
[ редактировать ]- «Файл автоматической настройки прокси (PAC)» . http://developer.mozilla.org . 27 января 2019 г.
- «Использование файла автоконфигурации клиента» . Руководство администратора прокси-сервера Netscape: Глава 11 . 25 февраля 1998 г. Архивировано из оригинала 10 августа 2004 г.
- «Глава 26. Использование автоматической настройки, автоматического прокси и автоматического обнаружения» . Microsoft TechNet . Проверено 5 июля 2013 г.
- «Автоматическая настройка прокси для Firefox (PAC). Полностью рабочие примеры, включая правила фильтрации для защиты от рекламы и для взрослых» . 12 мая 2012 г. Архивировано из оригинала 1 июля 2015 г. Проверено 24 мая 2009 г.
- де Бойн Поллард, Джонатан (2004). «Автоматическая настройка прокси-сервера HTTP в веб-браузерах» . Часто встречающиеся ответы . Проверено 5 июля 2013 г.