Настраиваем Squid для работы с Active Directory. Часть 2 - Kerberos-аутентификация
Продолжаем цикл статей об интеграции прокси-сервера Squid и Active Directory. Одним из наиболее важных вопросов является прозрачная аутентификация пользователей домена на прокси-сервере. В этой части мы расскажем, как настроить аутентификацию по протоколу Kerberos, которая позволит использовать единую точку входа, когда пользователь вводит логин и пароль один раз - при входе в систему.
Онлайн-курс по устройству компьютерных сетей
На углубленном курсе
"Архитектура современных компьютерных сетей"
вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов.
На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
В прошлой части мы уже касались данного вопроса, но повторимся: мы не видим никакого практического смысла использовать для работы с Active Directory отличные от Kerberos способы аутентификации. Все современные системы поддерживают Kerberos, а снижать безопасность системы ради потенциальной совместимости с абстрактными системами, которые могут не поддерживать Kerberos, явно не следует.
Подготовка Active Directory
Перед тем, как настраивать поддержку Kerberos-аутентификации на роутере, необходимо выполнить ряд подготовительных действий в Active Directory. Прежде всего заведем служебного пользователя, в нашем случае squid3.
Запрещаем смену пароля пользователем и не ограничиваем срок его действия, последнее очень важно, так как в противном случае вам придется через некоторое время не только сменить пароль служебного пользователя, но и заново выполнить все подготовительные действия.
1ktpass -princ HTTP/srv-gw01.interface31.lab@INTERFACE31.LAB -mapuser squid3 -pass Pa$$word123 -ptype KRB5_NT_PRINCIPAL -out C:\123\squid3.keytab
На первый взгляд команда довольно сложная. Разберем ее подробнее, ключ -princ обозначает Kerberos-принципала и содержит FQDN имя роутера и область Kerberos, которая совпадает с именем домена, но записывается в верхнем регистре, -mapuser и -pass имя пользователя и пароль соответственно, -ptype - тип принципала и -out - имя и расположение keytab-файла.
Важно! Для нормальной работы Kerberos на роутере его имя хоста, в нашем случае srv-gw01, не должно превышать 8 символов.
Если все сделано правильно, то команда должна отработать без ошибок.
Затем следует передать сгенерированный keytab-файл на роутер любым доступным образом, например, через WinSCP в домашнюю директорию пользователя.
Настройка поддержки Kerberos в Ubuntu Server / Debian
После того, как мы передали keytab-файл на роутер, его следует разместить в надежном месте и ограничить доступ. Понятно, что домашняя директория пользователя не самое лучшее для этого место. Так как работать с ним будет squid, то логично будет расположить keytab-файл в папке с настройками прокси-сервера.
1mv ~/squid3.keytab /etc/squid3
Затем изменим владельца и установим ограниченные права на файл:
1chown proxy:proxy /etc/squid3/squid3.keytab
2chmod 640 /etc/squid3/squid3.keytab
Для поддержки Kerberos установим пакет krb5-user:
1apt-get install krb5-user
При установке следует указать область Kerberos по умолчанию, введите имя вашего домена в верхнем регистре:
Теперь откроем файл /etc/krb5.conf, он содержит очень много ненужных параметров, поэтому удаляем или комментируем все лишнее, у вас должно остаться только то, что будет приведено ниже.
Первой идет секция libdefaults, которая содержит параметры по умолчанию, а именно область Kerberos (опция создается автоматически) и keytab-файл:
1[libdefaults]
2 default_realm = INTERFACE31.LAB
3 default_keytab_name = /etc/squid3/squid3.keytab
Следующая секция realms описывает области Kerberos, у нас она одна - INTERFACE31.LAB
1[realms]
2 INTERFACE31.LAB = {
3 kdc = srv-dc01.interface31.lab
4 kdc = srv-dc02.interface31.lab
5 admin_server = srv-dc01.interface31.lab
6 default_domain = interface31.lab
7 }
Здесь все понятно, единственного пояснения требует опция admin_server, в ее качестве указываем контроллер домена, исполняющий FSMO-роль PDC.
Последняя секция сопоставляет домены с областями Kerberos:
1[domain_realm]
2 .interface31.lab = INTERFACE31.LAB
3 intreface31.lab = INTERFACE31.LAB
Сохраняем файл. Теперь проверим работу Kerberos, для этого выполним команду:
1kinit -kV -p HTTP/srv-gw01.interface31.lab
Если все сделано правильно, вы должны получить сообщение об успешной аутентификации.
Удалим полученный билет командой:
1kdestroy
Настройка Kerberos-аутентификации в Squid
Прежде всего следует "научить" squid работать с keytab-файлом, для этого создадим специальный файл настроек:
1touch /etc/default/squid3
И внесем в него следующие строки:
1KRB5_KTNAME=/etc/squid3/squid3.keytab
2export KRB5_KTNAME
Откроем конфигурационный файл /etc/squid3/squid.conf, найдем три строки, начинающиеся с auth_param negotiate, раскомментируем и приведем их к следующему виду:
1auth_param negotiate program /usr/lib/squid3/negotiate_kerberos_auth -d -s HTTP/srv-gw01.interface31.lab
2auth_param negotiate children 20 startup=0 idle=1
3auth_param negotiate keep_alive off
Ключ -d в первой строке указан для отладки, убедившись, что все работает как надо его следует убрать, чтобы избежать чрезмерного раздувания логов.
В секцию с элементами ACL добавим:
1acl auth proxy_auth REQUIRED
Данный элемент будет соответствовать всем пользователям, успешно прошедшим Kerberos-аутентификацию. Ниже, в секции со списками доступа, строку
1http_access allow localnet
меняем на:
1http_access allow auth
сохраняем изменения, перезагружаем сервер.
На любом ПК войдем в систему под доменным пользователем и откроем любую страницу в браузере (не забываем, что прокси указываем не по IP-адресу, а по FQDN-имени), все должно работать.
Теперь зайдем на том же ПК локальным пользователем, вместо доступа к сети увидим приглашение ввести логин и пароль:
Также заглянем в /var/log/squid3/cache.log, сюда squid пишет отладочную информацию, в самом конце строки можно увидеть, кто именно прошел аутентификацию и получил доступ.
Убедившись, что все работает как надо, выключаем сбор отладочной информации, убрав ключ -d из строки в /etc/squid3/squid.conf.
1auth_param negotiate program /usr/lib/squid3/negotiate_kerberos_auth -s HTTP/srv-gw01.interface31.lab
Как видим, настроить Kerberos-аутентификацию достаточно просто. В следующих материалах мы разберем, как обеспечить автоматическое распространение настроек прокси и авторизацию на основе доменных групп безопасности.
Онлайн-курс по устройству компьютерных сетей
На углубленном курсе
"Архитектура современных компьютерных сетей"
вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов.
На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Помогла статья? Поддержи автора и новые статьи будут выходить чаще: