Задача
Мне нужно настроить squid в качестве промежуточного прокси, чтобы он принмал запросы от клиентов и перенапрвлял их на вышестоящий прокси, который требует аутентифкации по протоколу Kerberos.
Реализация
Мой Squid работает на Ubuntu 20.04, которая введена в домен с помощью samba, то есть файл /etc/krb5.conf уже настроен и DOMAIN.LOCAL прописан в нем как default realm.
Создадим keytab с помощью утилиты ktutil:
$ ktutil ktutil: addent -password -p user.name@DOMAIN.LOCAL -k 1 -e RC4-HMAC Password for user.name@DOMAIN.LOCAL: ktutil: wkt keytab.file.name ktutil: q
В результате - в текущей директории будет файл с хешем пароля пользователя, от имени которого squid будет аутентифицироваться на вышестоящем upstream parent proxy.
Дальше - скопируем этот файл в директорию сквида и дадим ему прав на чтение этого файла:
sudo cp ./keytab.file.name /etc/squid/ sudo chown proxy:proxy /etc/squid/keytab.file.name
Теперь в конфиге сквида нужно прописать parent proxy:
cache_peer parent-proxy.domain.local parent 3128 0 no-query default login=NEGOTIATE
Или, если вышестоящий прокси не умеет digest и netdb-exchange
cache_peer srv-proxy.rdleas.ru parent 3128 0 default no-query no-digest no-netdb-exchange login=NEGOTIATE
Тип аутентификации задается выражением login=NEGOTIATE.
Теперь нужно указать сквиду где ему брать keytab. Для этого в его окружении должна прописаться переменная KRB5_KTNAME, значение которой - это путь до keytab-файла.
В Ubuntu сервисы запускает systemd, поэтому создаю файл /etc/systemd/system/squid.service.d/krb.conf с таким содержимым:
[Service] Environment="KRB5_KTNAME=/etc/squid/keytab.file.name"
Всё. Обновляем конфигурацию systemd и перезапускаем squid:
sudo systemctl daemon-reload sudo service squid restart
Если что-то идет не так, то добавляем в конфиг такое:
debug_options ALL,2
И читаем лог. Логи работы с parent proxy будут в /var/log/squid/cache.log
Discussion