Исключить 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.

Размещенный пример правила работает, когда выполняется в правильном порядке!

Другие вопросы по тегам