Windows 10 proxy pac

  1. History
  2. PAC/WPAD script
  3. Hosting proxy.pac/wpad.dat file
  4. Adding script file to IE/EDGE
  5. Autodetection of script using DHCP and DNS servers – WPAD
  6. P.S

History

The first proxy automatic detection system, called PAC (proxy auto-config), was developed in time of Netscape Navigator (if you are old enough like me you will remember). It allowed you to specify a JavaScript location which told the browser which proxy to use or bypass request. It also provided a central position from which to change proxy servers. In years after, there was a problem with changing script location. Clients needed to change script location manually, or you, as admin, needed to change script location yourself. The solution for this problem is WPAD (Web Proxy Auto Discovery). This is a set of methods for finding the PAC script to be tried in order, leveraging DHCP and DNS services on network. Let start with script itself.

Browser support for WPAD

PAC/WPAD script

A PAC/WPAD file contains a JavaScript function “FindProxyForURL(url, host)”. JavaScript is case sensitive, and IE itself converts the variables url and host into lowercase before the FindProxyForURL function is called. This condition is not true for WinHTTP. This is because WinHTTP passes the host and the url directly to the function. That’s why we need conversion to lowercase in script. If you are familiar with proxy settings up to now all comments in script should be self explanatory. Function returns a string with one or more access method specifications. These specifications cause browser to use a particular proxy server or to connect directly. You can copy this function in any text editor and save it under proxy.pac or wpad.dat file . Names can be different but its usual naming convection you will encounter.

function FindProxyForURL(url, host)
{
 
/* Normalize the URL for pattern matching */
url = url.toLowerCase();
host = host.toLowerCase();
 
/* Don't proxy local hostnames */
if (isPlainHostName(host))
{
return 'DIRECT';
}
 
/* Don't proxy local domains */
if (dnsDomainIs(host, ".example1.com") ||
(host == "example1.com") ||
dnsDomainIs(host, ".example2.com") ||
(host == "example2.com") ||
dnsDomainIs(host, ".example3.com") ||
(host == "example3.com"))
{
return 'DIRECT';
}
 
/* Don't proxy Windows Update */
if ((host == "download.microsoft.com") ||
(host == "ntservicepack.microsoft.com") ||
(host == "cdm.microsoft.com") ||
(host == "wustat.windows.com") ||
(host == "windowsupdate.microsoft.com") ||
(dnsDomainIs(host, ".windowsupdate.microsoft.com")) ||
(host == "update.microsoft.com") ||
(dnsDomainIs(host, ".update.microsoft.com")) ||
(dnsDomainIs(host, ".windowsupdate.com")))
{
return 'DIRECT';
}
 
if (isResolvable(host))
{
var hostIP = dnsResolve(host);
 
/* Don't proxy non-routable addresses (RFC 3330) */
if (isInNet(hostIP, '0.0.0.0', '255.0.0.0') ||
isInNet(hostIP, '10.0.0.0', '255.0.0.0') ||
isInNet(hostIP, '127.0.0.0', '255.0.0.0') ||
isInNet(hostIP, '169.254.0.0', '255.255.0.0') ||
isInNet(hostIP, '172.16.0.0', '255.240.0.0') ||
isInNet(hostIP, '192.0.2.0', '255.255.255.0') ||
isInNet(hostIP, '192.88.99.0', '255.255.255.0') ||
isInNet(hostIP, '192.168.0.0', '255.255.0.0') ||
isInNet(hostIP, '198.18.0.0', '255.254.0.0') ||
isInNet(hostIP, '224.0.0.0', '240.0.0.0') ||
isInNet(hostIP, '240.0.0.0', '240.0.0.0'))
{
return 'DIRECT';
}
 
/* Don't proxy local addresses.*/
if (false)
{
return 'DIRECT';
}
}
 
if (url.substring(0, 5) == 'http:' ||
url.substring(0, 6) == 'https:' ||
url.substring(0, 4) == 'ftp:')
{
return 'PROXY 10.0.40.50:9090';
}
 
return 'DIRECT';
}

Depending on configuration needed you can change script to fit your needs. For example if you have multiple branch offices, or subnets that have its own proxy server installed, you can configure script in next way to reflect your infrastructure

{
if (isInNet(myIpAddress(), "10.1.0.0", "255.255.0.0"))
{ return "PROXY wcg1.example.com:8080; " +
"PROXY wcg2.example.com:8080";
}
 
if (isInNet(myIpAddress(), "10.2.0.0", "255.255.0.0"))
{ return "PROXY wcg1.example.com:8080; " +
"PROXY wcg2.example.com:8080";
}
 
if (isInNet(myIpAddress(), "10.3.0.0", "255.255.0.0"))
{ return "PROXY wcg2.example.com:8080; " +
"PROXY wcg1.example.com:8080";
}
 
if (isInNet(myIpAddress(), "10.4.0.0", "255.255.0.0"))
{ return "PROXY wcg2.example.com:8080; " +
"PROXY wcg1.example.com:8080";
}
else return "DIRECT";
}

There is a lot of examples on the Net about possible configuration, but if you want to know more about function you can use in if statements ,visit next sites I consulted while creating this blog post.

https://www.websense.com/content/support/library/web/v76/pac_file_best_practices/PAC_best_pract.aspx

http://findproxyforurl.com/

Hosting proxy.pac/wpad.dat file

You need to present your PAC file on some location that is accessible to computers on your network. Usually it is web location hosted on local web service. For our example we will put PAC file on root of default web site in IIS.

Problem you will encounter is next one (see picture below). To correct it you need to add PAC extension to host header mime types.

HTTP error 404.3 hosting pac file

Open IIS manager select website where you hosted pac file and open MIME types presented on next picture

MIME types

Click add to add pac file with next values FileExtension=’.pac’;mimeType= ‘application/x-ns-proxy-autoconfig’

Add pac file to MIME types

If you are using wpad.dat naming you will need same setting but you need to enter next values File extension: ‘dat’; MIME type: ‘application/x-javascript-config’

You can do same with PowerShell (example)

import-module WebAdministration
md c:\AutoConfig
New-Item 'IIS:\Sites\Default Web Site\AutoConfig' -Type VirtualDirectory -PhysicalPath c:\AutoConfig
add-WebConfigurationProperty //staticContent -name collection -PSPath 'IIS:\Sites\Default Web Site\AutoConfig' -Value @{FileExtension='.pac';mimeType= 'application/x-ns-proxy-autoconfig'

After that client will be able to get PAC file from web location.

Adding script file to IE/EDGE

To use script file you need to add script location resembling example on picture. You can use this config in IE settings also, or deploy it with GPO (refer to part II of this guide)

Proxy setup for pac file publisned on IIS website

What happens now is that every url you type in browser is evaluated with JavaScript function FindProxyForURL and accordingly, you will use or not use proxy for that url.

Autodetection of script using DHCP and DNS servers – WPAD

If you want to provide same proxy policy to all browsers, and ability to easily change PAC file location to all clients, you need two things:

  • Standard Proxy auto-config (PAC): Create and publish a central proxy configuration file.
  • Autodiscovery Protocol (WPAD) Web Proxy Standard

WPAD standard define method to retrieve location of PAC file using first DHCP or DNS if DHCP discovery fail or doesn’t exist (Firefox doesn’t support DHCP WPAD discovery). DHCP has a higher priority than DNS for automatic configuration. If DHCP provides the URL for configuration file, the process stops and the DNS lookup doesn’t happen.

For DHCP to work it need to support DHCPINFORM message, to obtain the DHCP options 252. Let first show configuration of that option on Windows Server DHCP.

First we need to add/configure that option on DHCP server level, and then to add that option to DHCP IP scope of our choice. Open DHCP management tools and right click on IPV4 and choose Set Predefined Options. In new window click Add and enter next values: NameWPAD; Code : 252; Data type select String, and then click OK. In string type URL of PAC file : http://192.168.0.2/proxy.pac. It will be default value for this option. After you create it check for its existence. It should be present like on the picture below.

DHCP option 252

After that you need to turn on created option to IP scope. Right click Scope options, and then click Configure options. Select option 252 from existing list. Default location of script will be presented but you can change it.

Selecting WPAD Scope option

For most of clients or browsers this setting is more than enough (except Firefox), but some clients have static ip addresses and they can not use DHCP. This is part where DNS comes in. If DHCP proxy discovery fails or doesn’t exist, DNS is next stop for WPAD. You need to create alias (CNAME) record in your local domain zone with name WPAD. It means that if your local domain name is contoso.com, client/browser will look for next URLs using WPAD method, trying to find autoproxy configuration file in next order

http://wpad.contoso.com/wpad.dat;

http://wpad.com/wpad.dat

wpad.dat vs proxy.pac

You probably noticed that client is looking for wpad.dat file. In our examples up to now we used proxy.pac naming. It would be beneficial to use wpad.dat file naming, even though, content of the file is same. Main reason is WPAD method mentioned above, where DNS discovery is trying to look for wpad.dat file. You can bypass it with HTTP URL rewrite rule on web site.

URL rewrite rule for wpad.dat

After yu setup everything usually what is happening is that if you try to resolve wpad entry in DNS you get nothing in response. Because of security reasons, and possible hijacking of wpad record in DNS, Microsoft decided to put wpad entry on DNS server global query block list. It exist from W2008 Server. To make it work you need to remove it with next command

Removing wpad grom DNS server global query block list

after that your DNS resolution will work

Everything that is left is to click automatically detect setting button in browser or system proxy settings.

This should be the last post of proxy trilogy from me. I was really tired of collecting bits and pieces about proxy setting from around the web. somwhow it turns out it can be a small book. There is some more things about proxy configuration, but I will leave that for readers to discover.

I wish you to enjoy rest of this summer. I am going to use it also on vacation staring next week.

P.S

One more thing you can research is Autoprox.exe utility for testing and debugin your PAC file. Download link

If you like you can read also about optimizing PAC file functions on https://docs.microsoft.com/en-us/troubleshoot/developer/browsers/connectivity-navigation/optimize-pac-performance

Протокол WPAD (Web Proxy Auto-Discovery Protocol) позволяет упростить настройку параметров прокси сервера в браузерах на клиентах в вашей сети. Идея WPAD в том, что клиент сам обнаруживает (через DHCP или DNS) в вашей сети веб-сервер, где хранится конфигурационный файл с настройками прокси (
http://yourdomain/wpad.dat
).

Содержание:

  • Настройка параметров прокси в файле wpad.dat
  • Настройка WPAD записей в DHCP и DNS
  • Использование WPAD с настройками прокси в браузерах

Настройка параметров прокси в файле wpad.dat

Правила использования прокси описываются в специальном файле PAC-файле (Proxy Auto Configuration). PAC файл имеет предопределенное имя wpad.dat. В этом файле указываются правила, в которых указано, нужно ли клиенту использовать прокси сервер при подключении или обращаться к запрошенному ресурсу (HTTP, HTTPS или FTP) напрямую.

В файле wpad.dat использует синтаксис Java-script. Вы можете задать адрес прокси сервера по-умолчанию, а также различные исключения и правила, когда клиент должен использовать (или не использовать) подключение через прокси.

Рассмотрим простой примера синтаксиса файла wpad.dat:

function FindProxyForURL(url, host)
{
if (shExpMatch(host, "127.0.0.1" )) {return "DIRECT";}
if (shExpMatch(host, "*/localhost*" )) {return "DIRECT";}
if (isInNet(host, "192.0.0.0", "255.0.0.0")) {return "DIRECT";}
if (isInNet(host, "10.0.0.0", "255.0.0.0")) {return "DIRECT";}
//отдельный прокси для одной подсети:
if (isInNet(myIpAddress(), "172.10.30.0", "255.255.255.0"))
{return "PROXY prx2.winitpro.ru:8080";

}
if (dnsDomainIs(host, "*.corp.winitpro.ru")) {return "DIRECT";}
// Локальные адреса с которыми нужно работать напрямую.
if (
shExpMatch(url,"http://*.winitpro.ru") ||
shExpMatch(url,"https://*.winitpro.ru") ||
shExpMatch(url,"ftp://*.winitpro.ru")
)
return "DIRECT";
// Если URL не содержит точек в адресе, то работаем напрямую.
if (isPlainHostName(host)) {return "DIRECT";}
if (shExpMatch(host,"bank.example.com")) {return "DIRECT";}
//используем отдельный прокси для одного домена
if (shExpMatch(url,"*.sbis.ru*")){return "PROXY prx2.winitpro.ru:8080";}
//адрес прокси-сервера по-умолчанию
return "PROXY proxy.winitpro.ru:3128";
}

пример синтаксиса файла wpad.dat

PAC файл обычно состоит из одной функции
FindProxyForURL
, которая возвращает клиенту адрес прокси в зависимости от запрошенного URL адреса. В данном случае директива
return "DIRECT"
указывает, что для данных адресов и доменов нужно использовать прямое подключение (без прокси). Если сайт, к которому обращается клиент не подходит ни под одно из правил в файле WPAD, для доступа к нему используется прокси сервер
PROXY proxy.winitpro.ru:3128
.

В качестве прокси вы можете использовать любой из популярных прокси серверов, таких как squid или 3proxy.

PAC файл можно использовать в качестве средства простейшей фильтрации контента, чтобы запретить пользователям доступ к определенным сайтам или запретить обращаться к доменам с рекламой.

proxy_empty = "PROXY 127.0.0.1:3128"; // ссылка на несуществующий прокси
if ( shExpMatch(url,"*://twitter.com/*")) { return proxy_empty; }
if ( shExpMatch(url,"*://spam.*")) { return proxy_empty; }
if ( shExpMatch(url,"*doubleclick.net/*")) { return proxy_empty; }

В различных версиях ОС есть ограничения на максимальный размер PAC-файла. Для Windows – не превышайте размер 1 Мб.

Нужно разместить файл wpad.dat на HTTP веб сервере в локальной сети, который будет доступен для чтения всем пользователям. Можно использовать веб сервер на Linux (nginx, apache, lighttpd) или Windows (IIS, или даже простейший веб сервер на PowerShell).

В нашем примере я опубликую файл wpad.dat на веб сервере IIS на контроллере домена. Скопируйте файл wpad.dat в каталог C:\inetpub\wwwroot.

Если в вашей сети используются недоменные клиенты, нужно предоставить права на чтение каталога в IIS для «IUSR» и «IIS APPPOOL\DefaultAppPool.

Запустите консоли IIS Manager, в настройках сайта IIS выберите раздел MIME Types и добавьте новый тип:

  • File name extension:
    .dat
  • MIME type:
    application/x-ns-proxy-autoconfig

добавить dat файлы в IIS

Перезапустите IIS.

Настройка WPAD записей в DHCP и DNS

Теперь нужно настроить сервера DHCP и DNS записи обнаружения PAC файла клиентами.

Если у вас используется сервер DHCP, можно задать адрес WPAD для клиентов с помощью опции 252.

В нашем примере для DHCP на Windows Server:

  1. Запустите консоль
    dhcpmgmt.msc
    , щелкните по разделу IPv4 и выберите опцию Set Predefined Options;
  2. Нажмите кнопку Add и добавьте запись с параметрами:Name:
    WPAD

    Data type:
    string

    Code:
    252
  3. Нажмите OK и укажите адрес вашего WPAD сервера (http://wpad.winitpro.ru);
    настройка WPAD в DHCP

  4. Затем откройте параметры DHCP области Scope Options и включите для нее опцию 252 WPAD (или настройте этот параметр в разделе Server Options).

Теперь нужно создать DNS записи типа A или CNAME для имени wpad в вашем домене.

Если у вас используется Active Directory, обратите внимание, что сервер Microsoft DNS по умолчанию блокирует использование имен wpad и isatap. Можете проверить это, выполнив команду:

dnscmd msk-dc02 /info /globalqueryblocklist

microsoft dns блокирует записи wpad и isatap по умолчанию

Чтобы разрешить использование этих имен в DNS, нужно выполнить команду:

dnscmd msk-dc02 /config /enableglobalqueryblocklist 0

Можно очистить этот список:

dnscmd /config /globalqueryblocklist

И добавить запись для isatap:

dnscmd /config /globalqueryblocklist isatap

Эти изменения нужно внести на всех DNS серверах.

Теперь создайте A запись с именем wpad, которая указывает на ваш веб-сервер, где находится WPAD файл. Можно создать A запись вручную через консоль DNS Manager (
dnsmgmt.msc
) или воспользоваться PowerShell командлетом Add-DnsServerResourceRecordA:

Add-DnsServerResourceRecordA -Name wpad -IPv4Address 192.168.13.10 -ZoneName winitpro.loc -TimeToLive 01:00:00

wpad запись в dns

Использование WPAD с настройками прокси в браузерах

Теперь нужно настроить браузеры, чтобы при старте они автоматически получали PAC файл с настройками. Для этого в параметрах IE или в настройках прокси в Windows в панели Параметры (команда быстрого доступа
ms-settings:network-proxy
) должна быть включена опцию Automatic Detect Settings (Tools > Internet Options > Connections > LAN Settings).

автоматически определять параметры покдлчения прокси в браузере

Можно централизованно включи эту опцию с помощью групповой политики User Configuration -> Preferences -> Control Panel Settings -> Internet Settings –> New -> Internet Explorer 10.

Включить автоопределение прокси через GPO

Теперь браузеры на клиентских устройствах при загрузке будут искать wpad запись в DNS (или получат ее от DHCP). Если в сети найдет сервер с WPAD, браузер клиента скачает файл
http://wpad.%domain%/wpad.dat
, выполнит код JavaScript и применит правила прокси-сервера из PAC файла.

Windows например выполняет поиск имени wpad сначала по DNS, затем через Link-Local Multicast Name Resolution (LLMNR) и затем через NetBIOS (NBNS). Если LLMNR и NetBIOS отключены, используется только DNS поиск.

Вы можете проверить, что браузер использует PAC файл при доступе в интернет (для веб браузеров на движке Chromium: Google Chrome, Opera, Microsoft Edge):

  1. Откройте браузер и перейдите на
    chrome://net-export/
  2. Выберите опцию Strip private information и нажмите кнопку Start Logging to Disk;
    включить логирование в браузере chrome

  3. Затем укажите имя json файла для сохранения данных;
  4. Нажмите Stop Logging;
  5. Откройте полученный json файл с помощью любого текстового редактора и выполните поиск по ключу
    proxySettings
    . В нашем примере видно, что браузер использует настройки прокси из wpad.dat:

    "proxySettings":{"effective":{"pac_url":"http://wpad/wpad.dat"},"original":{"auto_detect":true,"from_system":true}}

проверить pac_url в proxysettings браузера

Если вы хотите запретить использовать WPAD на компьютере Windows, нужно создать параметр Dword параметр с именем DisableWpad и значением 1 в ветке
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp\
.

Настройка параметров прокси через файл WPAD (PAC) позволяет добавить гибкость, недоступные при настройке параметров прокси в Windows через GPO. Кроме того, WPAD поддерживается не только на Windows, но и на Linux, MacOS и мобильных устройствах.

0

Proxy PAC is a simple “hack” to force a client to pass through your proxy server, but in Windows10 doesn’t work anymore as regular file.

Before you could simply copy your proxy.pac file in the client drive, but now to work with Windows10 (and its folder limitations) you have to publish it, so the client can read it through a regular www session.

The proxy pac is not useful only in a private network but could be used also for capturing (and forcing the connection through your proxy) an external request.

A typical scenario could be that a client must connect to a specific website/domain showing the same public IP address from both LAN or external connection.

So the proxy PAC file could be something:

function FindProxyForURL(url, host){

    var proxy_yes = "PROXY my_proxy_ip:3128";
    var proxy_no = "DIRECT";

    if (shExpMatch(url, "*mybank*")) { return proxy_yes; return proxy_no; }
    if (shExpMatch(url, "*mylanservice*")) { return proxy_yes; return proxy_no; }
    if (shExpMatch(url, "*bbc*")) { return proxy_yes; return proxy_no; }
    if (shExpMatch(url, "*whatever*")) { return proxy_yes; return proxy_no; }
    return proxy_no;
}

Copy the proxy.pac configuration file in the root of your website (for example: /usr/local/www/data), then add proxy.pac internet path to your client or simply use a .reg file to do it (or force) automatically (for example upon a logon):

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"AutoConfigURL"="http://www.mywebsite.com/proxy.pac"
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings]
"EnableLegacyAutoProxyFeatures"=dword:00000001
[HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Privacy]
"EnableInPrivateBrowsing"=dword:00000000
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Internet Explorer\Privacy]
"EnableInPrivateBrowsing"=dword:00000000

So the client that will connect to one or more patterns included in the proxy.pac file will be forced to navigate through your proxy server.

Of course if you want to intercept an external connection your proxy must be configured properly (pay attention to security), for example in Squid proxy (remember 1st to deny_all as last line) configuration file should appear a line like:

auth_param basic program /usr/local/libexec/squid/basic_ncsa_auth /usr/local/etc/squid/passwd

Long life to proxy pac!

Provide feedback

Saved searches

Use saved searches to filter your results more quickly

Sign up

Если автоматическая настройка сетевых параметров сегодня стала «нормой жизни» даже в небольших сетях, то автоматическое получение настроек прокси-сервера по-прежнему вызывает некоторые затруднения. Для этих целей существует протокол автоматической настройки прокси — WPAD, который позволяет достаточно гибко управлять трафиком и избежать необходимости настраивать браузеры и иное сетевое ПО вручную.

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе «Архитектура современных компьютерных сетей» вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Протокол WPAD

Прежде всего немного теории. Давайте разберемся, как работает протокол и какие сетевые службы нужны для этого.

Автоматическая настройка системы на работу с прокси-сервером производится специальным набором инструкций на JavaScript, который называется PAC-файл (Proxy Auto Configuration), для нахождения его расположения в локальной сети используется протокол WPAD (Web Proxy Auto-Discovery Protocol).

Рассмотрим следующую схему:

wpad-pac-001.png

Получив запрос от пользователя браузер пытается найти расположение PAC-скрипта используя различные сетевые механизмы. В первую очередь отправляется DHCP-запрос, ответ на который должен содержать URL PAC-файла в специальном поле ответа, для этого используется опция 252 протокола DHCP.

Если в ответе DHCP-сервера искомый адрес не найден, то посылается DNS-запрос для хоста wpad в текущем домене. Некоторые браузеры, например, Firefox, не используют DHCP-запросы, а сразу обращаются к DNS. С механизмом поиска службы WPAD через DNS связана одна серьезная уязвимость. Если в текущем домене хост с именем wpad не найден, то поиск будет произведен в вышестоящем домене, при этом выход за пределы домена организации никак не контролируется.

Что это значит? Допустим клиент расположен в домене office.spb.example.com, то поочередно будет произведен поиск следующих хостов:

  • wpad.office.spb.example.com
  • wpad.spb.example.com
  • wpad.example.com
  • wpad.com

Пользуясь этим, злоумышленники могут расположить PAC-файл по адресу за пределами домена предприятия и направить весь трафик на свои прокси сервера, в том числе и зашифрованный, в отношении которого можно осуществить атаку типа «человек посередине» с подменой сертификата.

В связи с этим DNS-сервер от Microsoft начиная с Windows Server 2008 содержит хост wpad в черном списке и не разрешает данное имя, даже если соответствующая запись на данном сервере существует.

В среде OC Windows, если предыдущие попытки не принесли результата, производится поиск хоста WPAD на WINS-сервере и посредством широковещательных протоколов LLMNR (Link-Local Multicast Name Resolution) и NBNS (NetBIOS Name Service).

После того, как расположение PAC-файла установлено, система делает попытку получить его из корневой директории веб-сервера по полученному через WPAD адресу, предопределенное имя PAC-файла — wpad.dat. Здесь таится еще одна тонкость. Разные браузеры по-разному формируют запрос к веб-серверу. Например, Firefox обращается по доменному имени — http://wpad.example.com/wpad.dat, а Internet Explorer использует для этого IP-адрес — http://192.168.0.100/wpad.dat.

Поэтому, если данный веб-сервер использует виртуальные хосты, хост wpad должен являться хостом по умолчанию (или корневым хостом), т.е. его содержимое должно отдаваться при обращении к данному серверу без указания имени хоста, просто по IP-адресу.

Также, в целях безопасности, PAC-файл не должен быть доступен за пределами локальной сети.

PAC-файл

Как мы уже упоминали, PAC-файл является JavaScript-скриптом, однако количество инструкций в нем жестко ограничено. Разберем некоторые из них.

isPlainHostName(host) — истина если host — «плоское» имя хоста, т.е. обычное NetBIOS-имя и т.п. Позволяет определять обращения к хостам локальной сети по простому имени.

dnsDomainIs(host, domain) — истина, если домен в запросе (host) совпадает с заданным в директиве domain.

isResolvable(host) — истина, если доменное имя удается разрешить. Данную инструкцию следует использовать осторожно, так как она делает дополнительный DNS-запрос, что может увеличить нагрузку на сервера и ухудшить время отклика.

isInNet(host, pattern, mask) — истина, если IP-адрес хоста совпадает с шаблоном, где pattern — шаблон сети, mask — маска. Например, 192.168.0.0, 255.255.255.0.

shExpMatch(str, shexp) — истина, если строка совпадает с шаблоном, в качестве строки можно использовать host или url, при этом следует помнить, что шаблон не является регулярным выражением.

Этих инструкций вполне достаточно, чтобы составить достаточно подробные и разветвленные правила для работы с прокси-сервером. Попробуем составить реальный сценарий.

Прежде всего укажем функцию:

function FindProxyForURL(url, host)
{
...
}

Данная функция получает от браузера URL и host из запроса и в ответ должна вернуть адрес прокси-сервера. Внутри фигурных скобок следует располагать инструкции и условия, в зависимости от выполнения которых браузеру будет возвращен тот или иной результат.

Начнем с того, что не следует направлять на прокси. Прежде всего это «плоские» имена, когда к какому-либо ресурсу пытаются обратиться по короткому имени, например, http://server, так как это однозначно ресурс локальной сети.

if (isPlainHostName(host)) {return "DIRECT";}

Согласно данной записи, если в поле host запроса содержится «плоское» имя, то возвращаем браузеру директиву DIRECT, что означает, что прокси-сервер для этого соединения использовать не следует.

Таким же образом предписываем обращаться напрямую по запросам с IP-адресами локальной сети:

if (isInNet(host, "192.168.31.0", "255.255.255.0")) {return "DIRECT";}

И локальным адресам:

if (shExpMatch(host, "127.0.0.1" )) {return "DIRECT";}
if (shExpMatch(host, "*/localhost*" )) {return "DIRECT";}

Кстати, первое правило можно переписать по-другому:

if (isInNet(host, "127.0.0.1", "255.255.255.255")) {return "DIRECT";}

В доменной сети также следует настроить прямое соединение для внутренних ресурсов:

if (dnsDomainIs(host, ".interface31.lab")) {return "DIRECT";}

Аналогичным образом можно направить мимо прокси какие-либо критичные внешние ресурсы, например, интернет-банки или площадки электронных торгов.

Если ваш прокси не обрабатывает https запросы, то их тоже следует направить мимо, обратите внимание, что вместо host в данном правиле мы используем url:

if (shExpMatch(url, "https:*")) {return "DIRECT";}

Тоже самое следует сделать и для ftp запросов:

if (shExpMatch(url, "ftp:*")) {return "DIRECT";}

И наконец все, что не попало ни под одно правило отправляем на прокси:

return "PROXY srv-gw01.interface31.lab:3128";

Разобравшись с тем, как устроен PAC-файл перейдем к сценариям практической реализации служб WPAD в сети.

Сети Active Directory

Так как все наши статьи преемственны, то далее будет подразумеваться что WPAD настраивается для работы с роутером в сети Active Directory, описанного нами в цикле Настраиваем Squid для работы с Active Directory, таким образом данный материал может служить его логическим завершением.

Начнем с настройки DHCP, откроем соответствующую оснастку и перейдем к списку серверов, щелкните правой кнопкой мыши на пункт IPv4 и выберите Предопределенные параметры.

wpad-pac-002.png

В открывшемся окне нажмите Добавить

wpad-pac-003.png

И заполните поля следующим образом:

  • Имя — WPAD
  • Тип данных — строка
  • Код — 252

Затем нажмите ОК и в поле Значение — Строковое введите адрес расположения PAC-файла, в нашем случае это http://wpad.interface31.lab

После чего перейдите в Область — Параметры области — Настроить параметры и добавьте созданную нами опцию WPAD.

wpad-pac-005.png

Если в вашей сети более одного DHCP-сервера, то аналогичные настройки нужно выполнить на каждом их них.

Следующим шагом будет настройка DNS, прежде всего откорректируем черный список, для этого на DNS-сервере откроем редактор реестра и перейдем в раздел:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters

Откроем опцию GlobalQueryBlockList и удалим оттуда значение wpad, после чего службу DNS нужно перезапустить.

Данную операцию следует выполнить на каждом DNS-сервере в вашей сети.

Затем добавьте запись типа A для хоста wpad, которая должна указывать на веб-сервер с PAC-файлом.

wpad-pac-007.png

Закончив настройки DHCP и DNS следует наконец установить на выбранный хост веб-сервер и разместить на нем wpad.dat. Никаких ограничений здесь нет, вы можете настроить любой веб-сервер на любом узле сети. В нашем случае напрашиваются два варианта: веб-сервер непосредственно на роутере, мы рекомендуем для этих целей простой и легкий lighttpd или веб-сервер на одном из контроллеров домена, в этом случае предпочтение следует отдать IIS.

В данной части статьи мы рассмотрим вариант с IIS, а к lighttpd вернемся чуть позже, когда будем говорить об одноранговых сетях. Мы не будем подробно останавливаться на установке роли Веб-сервер (IIS), достаточно просто пройти все шаги мастера со значениями по умолчанию.

wpad-pac-008.png

После установки роли перейдите в Диспетчер служб IIS — Сайты — Default Web Site в настройках которого выберите Типы MIME.

wpad-pac-009.png

Для правильной работы с PAC-файлом добавьте новый тип MIME, указав расширение .dat и тип MIME application/x-ns-proxy-autoconfig.

wpad-pac-010.png

Выполнив данную настройку не забудьте перезапустить веб-сервер и разместите в его корневой директории C:\inetpub\wwwroot файл wpad.dat.

Как правило, дальнейших действий не требуется. Internet Explorer и Edge по умолчанию имеют настройку автоматического определения настройки параметров прокси-сервера. Но можно подстраховаться и создать отдельную политику в GPO, для этого используйте Конфигурация пользователя — Настройка — Параметры панели управления — Параметры обозревателя.

wpad-pac-011.png

Браузеры на основе Google Chrome (в т.ч. Opera, Яндекс) используют настройки, заданные для IE. Проблемы, как всегда, возникают с Firefox, который с настройкой по умолчанию Использовать системные настройки прокси игнорирует их и ходит напрямую, поэтому данную опцию следует изменить на Автоматически определять настройки прокси для этой сети.

wpad-pac-012.png

Одноранговая сеть

В одноранговых сетях обычно применяются прозрачные прокси, не требующие настройки параметров браузера, однако в ряде случаев, например, для аутентификации, от прозрачности приходится отказываться, следовательно, возникает потребность в WPAD. Далее мы будем рассматривать настройку на примере роутера, настроенного по нашей статье: Ubuntu Server. Настраиваем роутер NAT + DHCP + Squid3.

Так как в большинстве случаев лишних серверов в небольших сетях нет, то все службы будем располагать в пределах роутера. DHCP и кэширующий DNS у нас уже есть, в виде пакета dnsmasq, а в качестве веб-сервера можно установить легковесный lighttpd. На первый взгляд все необходимое имеется и особых проблем возникнуть не должно.

А теперь вспомним, как происходит поиск PAC-файла. Если браузер не получил нужной опции по DHCP или не умеет ее получать, он делает DNS-запрос для хоста wpad в текущем домене. Мы специально выделили ключевой момент — в текущем домене. А какой текущий домен в одноранговой сети? Правильно, никакого…

Чтобы убедиться в этом, следует проверить DNS-суффикс текущего подключения. Для этого в консоли PowerShell выполните команду:

Get-DnsClient

Ниже показан вывод команды для одноранговой и доменной сетей, разница в отсутствии DNS-суффикса отлично видна «невооруженным глазом».

wpad-pac-013.png

Если все оставить как есть, то тот же Firefox не сможет получить настройки прокси и будет требовать ручного ввода параметров. Что делать? К счастью в протоколе DHCP есть опция 015, позволяющая передавать клиенту DNS-суффикс подключения.

Откроем /etc/dnsmasq.conf и последовательно изменим в нем следующие опции:

local=/interface31.local/

Данная опция указывает, что домен interface31.local — локальный и разрешать его имена на вышестоящих DNS-серверах не следует.

address=/wpad.interface31.local/192.168.31.1

Данная запись в формате dnsmasq является аналогом A-записи для хоста wpad, где 192.168.31.1 — адрес хоста, на котором будет расположен веб-сервер (в нашем случае это роутер).

domain=interface31.local

DNS-имя домена, передаваемое клиенту в опции 015 DHCP.

dhcp-option=252,http://wpad.interface31.local/wpad.dat

Задает расположение PAC-файла.

Перезапустим службу:

service dnsmasq restart

Теперь заново получим IP-адрес и снова проверим DNS-суффикс, также можно попробовать разрешить любое плоское имя (существующего хоста) командой nslookup.

wpad-pac-014.png

Если все сделано правильно — у подключения появится указанный нами суффикс, а плоские имена будут дополняться до FQDN. Теперь можно переходить к настройке веб-сервера.

Установим lighttpd:

apt-get install lighttpd

Затем откроем его конфигурационный файл /etc/lighttpd/lighttpd.conf и добавим туда опцию:

server.bind = "192.168.31.1"

Это ограничит работу веб-сервера только локальной сетью.

После чего следует убедиться, что в файле /etc/mime.types присутствует запись:

application/x-ns-proxy-autoconfig    pac dat

Если такой записи нет, то ее следует добавить.

Перезапустим веб-сервер:

service lighttpd restart

На этом настройка сервера закончена, осталось разместить PAC-файл в директории /var/www и проверить работу браузеров.

Поскольку одноранговая сеть не предоставляет таких возможностей по управлению клиентскими ПК как ActiveDirectory, то следует предпринять меры по предотвращению обхода прокси. Это можно сделать через iptables, запретив форвардинг пакетов с назначением на 80-й порт. Но лучше поступить иначе.

В /etc/nat добавим следующее правило:

# Запрещаем обход прокси
iptables -t nat -A PREROUTING -i eth1 ! -d 192.168.31.0/24 -p tcp -m multiport --dport 80,8080,3128 -j REDIRECT --to-port 80

Данная конструкция перенаправит все запросы к веб-серверам или сторонним прокси на порт 80 нашего роутера, где работает собственный веб-сервер.

В конфигурацию lighttpd добавим опцию (не забудьте перезапустить веб-сервер):

server.error-handler-404 = "/index.html"

Теперь в /var/www создадим файл index.html со следующим содержимым:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<h3>Ваш браузер настроен неправильно. Доступ запрещен!</h3>
<p>Обратитесь к системному администратору</p>
</body>
</html>

После чего при попытке обхода прокси пользователь увидит сообщение:

wpad-pac-015.png

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

Если вам нужно разрешить работу с некоторыми сайтами напрямую, минуя прокси, то перед запрещающим правилом добавьте:

iptables -t nat -A PREROUTING -i eth1 -d xxx.xxx.xxx.xxx -j ACCEPT

где xxx.xxx.xxx.xxx — IP-адрес требуемого ресурса.

Как видим, настроить автоматическое получение параметров прокси совсем несложно и можно эффективно применять данную технологию как в крупных, так и в небольших сетях.

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе «Архитектура современных компьютерных сетей» вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Как запустить игровой режим в windows 10
  • Windows 10 проблемы smb
  • Integrated smart update tools for windows x64
  • Ошибка 0xc004f050 активация не удалась windows 10
  • Windows 11 поддержка процессоров intel xeon