Исключить URL-адрес с нестандартным портом из прокси через файл PAC/WPAD
Я использую прокси-сервер Squid и хочу исключить определенный веб-адрес, доступ к которому осуществляется через нестандартный порт, из прокси-сервера, а не открывать порт в ACL-списке squid.conf
(кажется, это конкретный случай использования).
В моем случае рассматриваемый порт TCP 2222 (DirectAdmin) через http:// и https://. Я не был уверен, можно ли вообще обойтись без открытия самого порта, но я нашел несколько статей об обходе URL с нестандартными портами с PAC/WPAD. Я пробовал набор правил, подобный приведенному ниже, который устанавливает подстановочный знак для TLD и конкретные правила для нестандартного URL-адреса порта.
if (shExpMatch(host, "*.somedomain.com") ||
shExpMatch(url, "http://example.somedomain.com:2222/*") ||
shExpMatch(url, "https://example.somedomain.com:2222/*"))
return "DIRECT";
С помощью pactester
, Я получаю правильный ответ DIRECT из теста правил
pactester -p /path/to/wpad.dat -u http://example.somedomain.com
DIRECT
pactester -p /path/to/wpad.dat -u http://example.somedomain.com:2222
DIRECT
pactester -p /path/to/wpad.dat -u https://example.somedomain.com:2222
DIRECT
Однако кажется, что запрос по-прежнему отправляется через прокси-сервер, когда я получаю сообщение "Прокси-сервер отклоняет подключения" и т. Д. В веб-браузере. Сам порт не заблокирован, я могу подключиться к нему, но Sqiud ACL не имеет разрешенного порта. Хотя это то, что я пытаюсь избежать, и, конечно, прямой ответ означает обход?
На самом ли деле этого можно достичь с помощью PAC / WPAD с нестандартными портами или их альтернативным способом обхода и отправки напрямую для этого конкретного случая?
3 ответа
Оригинальный конфиг
if (shExpMatch(host, "*.somedomain.co.uk") ||
shExpMatch(url, "http://example.somedomain.com:2222/*") ||
shExpMatch(url, "https://example.somedomain.com:2222/*"))
return "DIRECT";
Вы уверены, что это не должно быть
if (shExpMatch(host, "*.somedomain.co.uk") ||
shExpMatch(url, "http://example.somedomain.co.uk:2222/*") ||
shExpMatch(url, "https://example.somedomain.co.uk:2222/*"))
return "DIRECT";
Возможно, вы пытаетесь посетить example.somedomain.co.uk, но ваше условие написано для example.somedomain.com и поэтому оно продолжает работать с прокси?
Если вы хотите что-то более общее, чтобы все запросы, для которых требуется нестандартный порт, работали напрямую, попробуйте:
if (shExpMatch(url, "*://" + host + ":*"))
return "DIRECT";
Он не идеален (и вы можете изменить его так, чтобы запросы, в которых явно указан стандартный порт для протокола, например:80 для HTTP и:443 для HTTPS, по-прежнему проходили через прокси-сервер), но он должен перехватывать большинство запросов. Уточнения приветствуются.
Похоже, это была комбинация кэширования и плохого правила isInNet, переопределяющего правило DIRECT в моем конкретном операторе порта if.
Размещенный пример правила работает, когда выполняется в правильном порядке!