WPAD/PAC и Windows утилита для его диагностики

WPAD/PAC и Windows утилита для его диагностики

Мало кто настраивал в организации WPAD, но он как кролик- есть. Использует PAC файлы для того, что бы клиент определил, какой прокси, для каких URL использовать, или вообще не использовать прокси.
Применений масса, отказоустойчивые кластеры прокси серверов, балансировка нагрузки на прокси серверы, указание различных прокси для различных клиентов/групп клиентов, разных прокси для различных URL.

WPAD- Web Proxy Auto-Discovery Protocol / PAC- Proxy auto-config

PAC файл- файл с именем «wpad.dat», по сути файл на javascript, содержащий одну функцию function FindProxyForURL(url, host), возвращающую либо адрес:порт прокси сервера, либо строку «DIRECT», если прокси сервер использовать не надо.

Пример:

function FindProxyForURL(url, host)
{
$OldProxy = "PROXY proxA.youdomain.ru:3128";
$NewProxy = "PROXY proxB.youdomain.ru:3128";
// URLs for localhost
if (shExpMatch(host, "127.0.0.1" )) {return "DIRECT";}
if (shExpMatch(host, "*/localhost*" )) {return "DIRECT";}
// Local sites by IP
if (isInNet(host, "10.0.0.0", "255.0.0.0")) {return "DIRECT";}
// If URL has no dots in host name, send traffic direct
if (isPlainHostName(host)) {return "DIRECT";}
// URLs mathing mask - single host URLs in some domain
if (shExpMatch(url, "*/msksrv-01-is*")) {return "DIRECT";}
// URLs mathing mask - all URLs in some domain
if (shExpMatch(url,"*holding.com*")) {return "DIRECT";}
if (shExpMatch(url, "*second.local.ru*")) {return "DIRECT";}
if (shExpMatch(url,"*.third.local.org*")) {return "DIRECT";}
// Testing clients
if (myIpAddress() == "192.168.200.100") {return $NewProxy;}
if (isInNet(myIpAddress(), "192.168.108.0", "255.255.252.0")) {return DIRECT;}
//Return old proxy for EVERYTHING
return $OldProxy;
}

Примеры от Microsoft, примеры и описание параметров от mozilla.org

DHCP опция:
№ 252
Имя WPAD
Тип Строка
Значение http URL с файлом PAC конфигуации

DNS:
wpad.dat в корне ыеб сервера, MIME type файла конфигурации должен быть именно «application/x-ns-proxy-autoconfig».
Необходимо добавить запись типа A или CNAME, указывающую на http сервер, в корне котоого имеется wpad.dat
DNS серверы MS Windows имеют встоенную защиту от добавления записи «wpad», перед ее добавлением ее необходимо убрать:


#просмотреть блок лист
dnscmd /info /globalqueryblocklist
#оставить только isatap
dnscmd /config /globalqueryblocklist isatap
#перезапустить службу DNS
net stop dns & net start dns

Обратите внимание (ГРАБЛИ):
-если у вас больше одного DNS севера в AD, запись wpad, созданная на одном, не распростанится на дугие, пока вы на них тоже не отключите защиту от добавления wpad.
-если у клиента активна прокся, через которую он не может получить wpad.dat с уакузанного расположения- то увы и ах.
-если вы производите изменения файла wpad.dat, а он получается клиентом через проксю или с веб- сервера у которых включено кеширование- то ой, отключайте кеширование для URL WPAD или ставьте маленькие временные интервалы.

В сумме вроде все просто, НО, так как в процессе участвует достаточное количество звеньев, в функции используются регулярные выражения, описания мало, а уж догадаться о том, что файл автоконфигурации кешируется прокси-сервером практически не реально, если не сталкивался.

Для тестирования того, что вернет функция из PAC файла есть утилита на питоне Pacparser, которой можно подсунуть параметрами скачанный pacfile/url/host и получить ответ, но, это больше для проверки синтаксиса правил, плюс linux-way, можно конечно запустить и на винде, но надо скачать питон, wpad.dat, результатом будет только какой прокси сервер будет результатом для указанной связки pacfile/url/host. Можно один раз заморочиться, но не на проблемном же клиенте с горящей баней.
Оперативно протестировать, какие настойки получает данный клиент из DNS или DHCP, содержимое wpad.dat, работу регулярок и особенно, если это надо сделать быстро и на куче клиентов- мука, средств диагностики не завезли.

UP: Есть Online proxy PAC file tester

Я помыкался, потыкался, вроде как-то работает, но почему-то, настройки меняешь, клиент продолжает долбиться на старый прокси или добавляешь сайт, чтобы он открывался на прямую- все равно лезет через прокси, непонятно, надо лезть под капот, а wireshark тоже не хотелось)
Поискал еще, нашел исходники проекта, наброски, которые позволяют, используя импорт Win32Api функции WinHttpGetProxyForUrl производить тестирование URL через нее. Именно наброски, но пнули в нужном направлении, поискав немного по Win32Api, нашел функцию DetectAutoProxyConfigUrl(bool), которая мне очень подошла и возвращает URL PAC файла из DHCP и DNS, дальше недосып и дело техники):

Утилита для диагностики всего, что потребуется, прямо на клиенте, легкая, быстрая, даже щепотка асинхронщины:

WPADChecker, скачать можно на github.co
Прямая ссылка

Все должно быть ясно- понятно, запустили, нажали «Autodetect WPAD location», посмотрели, получили ли расположение PAC файла из DHCP или DNS, его можно отобразить, можно ввести ссылку и ее протестировать.

Вот с этой штукой я сразу понял, где у меня проблемы и затыки и влет все настроил, стоило день потратить, чтобы потом за 5 минут долететь).

WPADChecker.jpg

Куски wikipedia на память:

DHCP более приоритетен, чем DNS: если DHCP предоставляет WPAD URL, DNS не используется. Firefox не использует DHCP, только DNS.
В DNS-запросе отбрасывается первая часть доменного имени (описывающая клиентское имя) и заменяется на wpad. Затем происходит «движение вверх» в иерархии доменных имён, пока не будет найден адрес расположения конфигурационного файла или не будет покинут домен организации.
Браузер пытается определить домен организации и пытается подставить названия доменов вида ‘company.com’ или ‘university.edu’, но не ‘company.co.uk’ (обратите внимание на заметку о безопасности).
При DNS-запросе предполагается, что именем файла конфигурации всегда является wpad.dat. При использовании DHCP-протокола может использоваться любой корректный URL.
Сейчас только Internet Explorer и Konqueror поддерживают оба метода (DHCP и DNS), DNS-метод поддерживается большинством современных браузеров.

Безопасность
Атакующий внутри сети может запустить DHCP-сервер, который будет предлагать поддельный PAC-скрипт.
Если домен организации ‘company.co.uk’, а файл http://wpad.company.co.uk/wpad.dat не существует, то браузеры попытаются обратиться к http://wpad.co.uk/wpad.dat. Браузер не может сам определить, когда он покидает домен организации.
WPAD-метод фактически ищет и скачивает файл JavaScript, после чего выполняет его в браузере, где, однако, JavaScript уже может быть отключён в настройках.

Loading

Loading

Добавить комментарий

Войти с помощью: 

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

%d такие блоггеры, как: