Вопрос или проблема
Общепринято использовать переменные окружения 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 и наличие активных билетов, чтобы избежать проблем с аутентификацией.