Как использовать аутентификацию с согласованием (например, Kerberos) для HTTP-прокси?

Вопрос или проблема

Общепринято использовать переменные окружения HTTP_PROXY/HTTPS_PROXY для указания использования прокси-сервера. Аутентификация может быть включена в этот URL, например, HTTP_PROXY=http://user:[email protected]:3128/.

Однако я использую SSO Kerberos для аутентификации через прокси. Как мне это настроить? Пусть будет конфигурация сервера прокси Squid, как описано здесь: https://wiki.squid-cache.org/ConfigExamples/Authenticate/Kerberos. В ней описано, как клиенты Windows могут использовать аутентификацию прокси с переговорами, но нет информации о том, как я могу настроить клиентов Linux/Unix.

Для cURL использование --proxy-negotiate -u : решает проблему, например:

HTTPS_PROXY=http://myproxy.mydomain.tld:3128/ curl --proxy-negotiate -u : https://www.google.com

Как мне сказать приложениям, не использующим cURL, использовать этот механизм? Например, для APT в Debian/Ubuntu с Acquire::http::Proxy "http://myproxy.mydomain.tld:3128/";?

Я нашел cntlm, который работает как еще один локально запущенный прокси-сервер, упрощая неаутентифицированные соединения с localhost. Однако это работает только с NTLM, а мне нужен Kerberos. Смог бы Squid соединиться в качестве клиента, используя Kerberos? Кажется, что невероятно сложно найти возможности аутентификации на исходящем соединении прокси-серверов. Все, похоже, сосредоточены на функциях аутентификации на слушающем сокете вместо этого.

Более актуальное решение, которое может сработать в вашей ситуации: https://github.com/genotrance/px

.

Ответ или решение

Для реализации аутентификации по протоколу Kerberos с использованием HTTP-прокси в системах Linux/Unix, таких как Debian/Ubuntu, необходимо учитывать несколько аспектов. Эти аспекты связаны с контекстом использования прокси-сервера, спецификой Kerberos и соответствующими конфигурациями программного обеспечения.

1. Конфигурация прокси-сервера с поддержкой Kerberos

Сначала необходимо убедиться, что ваш прокси-сервер, например Squid, должным образом настроен для аутентификации Kerberos. Вы можете следовать примеру конфигурации по этой ссылке. Убедитесь, что ваши Kerberos-билеты правильно настроены на сервере и что все необходимые модули, такие как kerberos_auth, загружены.

2. Проверка Kerberos

Убедитесь, что у вас установлен и работает пакет krb5-user, который предоставляет инструменты для работы с Kerberos. Проверьте наличие активных билетов с помощью команды:

klist

Если нет активных билетов, выполните команду аутентификации:

kinit ваш_пользователь

3. Использование cURL с аутентификацией Kerberos

Как упоминается в вашем вопросе, cURL поддерживает аутентификацию с помощью параметров --proxy-negotiate. Это позволит вашему запросу использовать аутентификацию Kerberos в следующих формах:

HTTPS_PROXY=http://myproxy.mydomain.tld:3128/ curl --proxy-negotiate -u : https://www.google.com

Где http://myproxy.mydomain.tld:3128/ — ваш прокси-сервер.

4. Аутентификация через APT и другие приложения

Для настройки APT в Debian/Ubuntu вы можете указать прокси в файле конфигурации APT. Однако стандартный механизм APT не поддерживает аутентификацию Kerberos напрямую. Вы можете настроить использование прокси-сервера в файле /etc/apt/apt.conf.d/xxxx-proxy следующим образом:

Acquire::http::Proxy "http://myproxy.mydomain.tld:3128/";

Для правильной работы необходимо либо использовать обертку над APT, поддерживающую Kerberos, либо предусмотреть другую схему, например, использование дополнительного инструмента.

5. Использование промежуточного прокси-сервера

Вы также можете рассмотреть использование промежуточного прокси-сервера, который будет служить связующим звеном между вашим приложением и прокси с поддержкой Kerberos. Например, вы упомянули cntlm, который предоставляет аутентификацию для NTLM. Для Kerberos можно использовать squid в связке с дополнительными инструментами, такими как px, о которых вы упомянули. px позволяет облегчить аутентификацию Kerberos для приложений, которые не поддерживают ее напрямую.

Установите px и настройте его, используя ваш прокси-сервер:

px --proxy=myproxy.mydomain.tld:3128

После этого настройте свои приложения для обращения к px как к локальному прокси:

Acquire::http::Proxy "http://localhost:порт/";

6. Заключение

Аутентификация Kerberos с использованием HTTP-прокси в среде Linux/Unix может быть сложной задачей из-за отсутствия прямой поддержки в некоторых приложениях. Использование инструментов вроде px и правильная настройка прокси-сервера, такого как Squid, смогут значительно облегчить этот процесс. Всегда проверяйте настройки Kerberos и наличие активных билетов, чтобы избежать проблем с аутентификацией.

Оцените материал
Добавить комментарий

Капча загружается...