Назад | Перейти на главную страницу

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

Однако, похоже, запрос все еще отправляется через прокси-сервер, поскольку я получаю сообщение «Прокси-сервер отклоняет соединения» и т. Д. В веб-браузере. Сам порт не заблокирован, я могу подключиться к нему по telnet, но в Sqiud ACL порт не разрешен. Хотя это то, чего я стараюсь избегать, и, конечно же, ПРЯМОЙ ответ означает обход?

Можно ли этого достичь с помощью PAC / WPAD с нестандартными портами или их альтернативным способом обхода и отправки напрямую для этого конкретного случая?

Если вы хотите что-то более общее, чтобы все запросы, требующие нестандартного порта, шли напрямую, попробуйте:

if (shExpMatch(url, "*://" + host + ":*"))
    return "DIRECT";

Это не идеально (и вы можете захотеть изменить так, чтобы запросы, явно указывающие стандартный порт для протокола, например: 80 для HTTP и: 443 для HTTPS, по-прежнему проходили через прокси), но он должен перехватывать большинство запросов. Доработки приветствуются.

Похоже, это была комбинация кеширования и плохого правила isInNet, переопределяющего правило DIRECT в моем конкретном операторе if для порта.

Опубликованный пример правила действительно работает, если выполняется в правильном порядке!

Оригинальный конфиг

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 и так продолжает бить прокси?