Я выполняю прокси Сквида и хочу исключить определенный веб-адрес, к которому получают доступ по нестандартному порту от прохождения через прокси, вместо того, чтобы открыть порт в ACL в squid.conf
(кажется, что это - определенный случай использования).
В моем случае порт рассматриваемый TCP 2222 (DirectAdmin) и по http:// и по https://. Я не был уверен, было ли это на самом деле возможно обойтись без открытия самого порта, но я действительно находил несколько статей об обходе URL с нестандартными портами с PAC/WPAD. Я попробовал ruleset как тот ниже, который устанавливает подстановочный знак для TLD и определенные правила для нестандартного порта URL.
if (shExpMatch(host, "*.somedomain.com") ||
shExpMatch(url, "http://example.somedomain.com:2222/*") ||
shExpMatch(url, "https://example.somedomain.com:2222/*"))
return "DIRECT";
Используя pactester
, Я получаю корректный ответ ОТ теста правила
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
Однако кажется, что запрос все еще отправляется через прокси, поскольку я получаю "Прокси, отказывается от соединений" и т.д. в веб-браузере. Сам порт не заблокирован, я могу, telnet к нему, но ACL Sqiud не позволили порт. Хотя это - то, что я стараюсь не делать, и конечно ПРЯМОЙ обход средств ответа?
Действительно ли этого на самом деле возможно достигнуть с PAC/WPAD с нестандартными портами или их альтернативный способ обойти и отправить непосредственно для этого конкретного случая?
Исходная конфигурация
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 , и поэтому он продолжает обращаться к прокси?
Похоже, это была комбинация кеширования и плохого правила isInNet, отменяющего правило DIRECT в моем конкретном порту. Оператор if.
Опубликованный пример правила работает, если выполняется в правильном порядке!
Если вам нужно что-то более общее, чтобы все запросы, требующие нестандартного порта, шли напрямую, попробуйте:
if (shExpMatch(url, "*://" + host + ":*"))
return "DIRECT";
Это не идеально (и вы можете захотеть изменить так, чтобы запросы которые явно указывают стандартный порт для протокола, например: 80 для HTTP и: 443 для HTTPS по-прежнему проходят через прокси), но он должен перехватывать большинство запросов. Уточнения приветствуются.