Настройка прокси сервера Squid 3.3 на Ubuntu Server 14.04 LTS. Часть 4. Конфигурация Kerberos и NTLM

image_thumbВ этой части мы рассмотрим порядок настройки Ubuntu Server 14.04 LTS для обеспечения возможности работы с механизмами аутентификации пользователей прокси-сервера Squid 3 по протоколам Kerberos и NTLM в среде домена Active Directory (AD). Для поддержки NTLM наш Linux-сервер будет присоединён к домену AD, а для поддержки Kerberos для сервера в домене будет создана специальная служебная учетная запись пользователя. В дальнейшем при конфигурации Squid, протокол Kerberos будет использоваться как приоритетный, а протокол NTLM будет применяться в случаях когда клиент прокси-сервера по какой-то причине не может использовать Kerberos.

Добавляем поддержку Kerberos

Сначала проверим список установленных пакетов

dpkg-query --list | grep krb
krb5-locales             1.12+dfsg-2ubuntu4  all   Internationalization support for MIT Kerberos
libgssapi-krb5-2:amd64   1.12+dfsg-2ubuntu4  amd64 MIT Kerberos runtime libraries krb5 GSS-API Mechanism
libkrb5-26-heimdal:amd64 1.6~git20131207+dfsg-1ubuntu1 amd64  Heimdal Kerberos - libraries
libkrb5-3:amd64          1.12+dfsg-2ubuntu4  amd64  MIT Kerberos runtime libraries
libkrb5support0:amd64    1.12+dfsg-2ubuntu4  amd64  MIT Kerberos runtime libraries - Support library

Можно встретить упоминания о том что нужно установить пакеты krb5-user и libkrb53. Однако в нашем случае установка пакета libkrb53 будет безуспешна и, как я понял, в системе уже присутствует заменяющий пакет libkrb5-3, поэтому мы выполним установку только пакета krb5-user

sudo apt-get install krb5-user

Сохраним на всякий случай появившийся в системе после установки пакета krb5-user конфигурационный файл krb5.conf в krb5.conf.default и откроем исходный файл в текстовом редакторе (с подсветкой синтаксиса):

sudo cp /etc/krb5.conf /etc/krb5.conf.default
sudo nano -Y sh /etc/krb5.conf

Очистим содержимое файла (или закомментируем все открытые строки) и впишем туда следующие строки:

[libdefaults]
    default_realm = HOLDING.COM
    dns_lookup_kdc = no
    dns_lookup_realm = no
    ticket_lifetime = 24h
    default_keytab_name = /etc/squid3/PROXY.keytab

# for Windows 2003
#    default_tgs_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
#    default_tkt_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
#    permitted_enctypes = rc4-hmac des-cbc-crc des-cbc-md5

# for Windows 2008 with AES
    default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
    default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
    permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5

[realms]
    HOLDING.COM = {
        kdc = kom-ad01-dc01.holding.com
        kdc = kom-ad01-dc02.holding.com
        admin_server = kom-ad01-dc01.holding.com
        default_domain = holding.com
    }

[domain_realm]
    .holding.com = HOLDING.COM
    holding.com = HOLDING.COM

 

Настраиваем Kerberos

В интернете можно найти разные описания настройки Kerberos на Linux, где зачастую предполагается использование утилиты MSKTUTIL для создания в домене отдельной учетной записи компьютера, которая будет использоваться для аутентификации пользователей домена, а также для периодического изменения пароля этой учетной записи и регенерации keytab файла. В нашем описании мы пойдём по несколько иному пути, чтобы немного упростить схему получения и использования keytab-файла. Далее мы создадим в домене AD служебную учетную запись пользователя, отключим в свойствах учетной записи устаревание пароля и необходимость смены пароля, сгенерируем на контроллере домена для этой учетной записи keytab-файл, который затем скопируем на наш прокси сервер и будем использовать его для аутентификации Kerberos на постоянной основе.

Создаем в домене учетную запись пользователя для службы SQUID. В нашем примере это будет учетная запись KOM\s-KOM-SquidKerb  

Отключим для учетной записи требование периодической смены пароля (Password never expires):

image

Для созданной учетной записи нам нужно сгенерировать keytab-файл на контроллере домена AD (в нашем случае на базе Windows Server 2012 R2) с помощью утилиты ktpass

ktpass -princ HTTP/kom-ad01-squid.holding.com@HOLDING.COM -mapuser KOM\s-KOM-SquidKerb -pass PasSw0rd -crypto All -ptype KRB5_NT_PRINCIPAL -out C:\Temp\PROXY.keytab
Targeting domain controller: KOM-AD01-DC01.holding.com
Successfully mapped HTTP/kom-ad01-squid.holding.com to s-KOM-SquidKerb.
Password successfully set!
Key created.
Key created.
Key created.
Key created.
Key created.
Output keytab to C:\Temp\PROXY.keytab:
Keytab version: 0x502
keysize 83 HTTP/kom-ad01-squid.holding.com@HOLDING.COM ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x1 (DES-CBC-CRC) keylength 8 (0x...)
keysize 83 HTTP/kom-ad01-squid.holding.com@HOLDING.COM ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x3 (DES-CBC-MD5) keylength 8 (0x...)
keysize 91 HTTP/kom-ad01-squid.holding.com@HOLDING.COM ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x17 (RC4-HMAC) keylength 16 (0x....)
keysize 107 HTTP/kom-ad01-squid.holding.com@HOLDING.COM ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x12 (AES256-SHA1) keylength 32 (0x.......)
keysize 91 HTTP/kom-ad01-squid.holding.com@HOLDING.COM ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x11 (AES128-SHA1) keylength 16 (0x.....)

Обратите внимание на то, что в параметре –princ в большинстве случаев нужно указывать имя сервера (HOSTNAME), для которого мы собираемся настроить аутентификацию Kerberos (в нашем случае это KOM-AD01-GW10.holding.com) используя выше-обозначенную учетную запись пользователя. Однако вместо этого, я намеренно использую другое имя KOM-AD01-SQUID.holding.com, так как в перспективе есть задача использовать служебную учетную запись пользователя сразу для нескольких серверов SQUID с единой точкой входа для пользователей. Разумеется для имени KOM-AD01-SQUID.holding.com в DNS уже создана статическая A-запись (PTR-запись не создавалась) и эта запись на данный момент указывает на IP-адрес нашего Linux-сервера (10.160.0.0.2).

В процессе генерации keytab-файла в домене в свойствах учетной записи пользователя изменится имя для входа а также будет изменён атрибут servicePrincipalName (будет добавлено значение из параметра -princ)

image

 

Теперь нам нужно безопасным способом передать получившийся файл PROXY.keytab с компьютера под управлением Windows на Linux-сервер KOM-AD01-GW10 в каталог /etc/squid3/. Сделать это можно например по протоколу SSH (ранее мы уже запустили службу сервера OpenSSH на KOM-AD01-GW10) с помощью утилиты WinSCP или PSCP.

Передадим файл сначала в каталог /home/user/ (или ~ для краткости):

C:\Tools\PuTTy>pscp -scp C:\Temp\PROXY.keytab user@KOM-AD01-GW10:~/PROXY.keytab

Теперь из каталога /home/user/ нам нужно будет переместить файл в в каталог /etc/squid3/

sudo mv /home/user/PROXY.keytab /etc/squid3/PROXY.keytab

Далее выставляем разрешения на keytab-файл таким образом, чтобы в дальнейшем служба Squid могла получить к нему доступ:

sudo chgrp proxy /etc/squid3/PROXY.keytab
sudo chmod 640 /etc/squid3/PROXY.keytab
ls -la /etc/squid3/PROXY.keytab

-rw-r----- 1 user proxy 477 May 31 20:45 /etc/squid3/PROXY.keytab

***

Проверяем возможность аутентификации в AD с помощью Kerberos. Сначала выполняем команду, которая должна отработать без ошибок:

kinit -k HTTP/kom-ad01-squid.holding.com

Затем проверим наличие полученного билета Kerberos командой klist

klist

Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: HTTP/kom-ad01-squid.holding.com@HOLDING.COM

Valid starting       Expires              Service principal
05/31/2014 21:22:14  06/01/2014 07:22:14  krbtgt/HOLDING.COM@HOLDING.COM
        renew until 06/01/2014 21:22:14

Как видим, билет успешно получен. Теперь можем удалить его командой kdestroy

***

Для того чтобы SQUID однозначно знал где искать keytab-файл, создадим файл настроек по умолчанию и откроем его на редактирование:

sudo touch /etc/default/squid3
sudo nano /etc/default/squid3

Впишем в файл следующие сроки:

KRB5_KTNAME=/etc/squid3/PROXY.keytab
export KRB5_KTNAME

На этом базовую поддержку Kerberos в рамках нашей задачи можно считать законченной, переходим к NTLM.

 

Настраиваем поддержку NTLM

Устанавливаем пакеты Samba и Winbind, которые потребуются нам для того, чтобы сделать наш Linux-сервер членом домена AD и задействовать механизмы NTLM-аутентификации:

sudo apt-get install samba winbind samba-common-bin

Останавливаем только что установленные и запущенные службы:

sudo invoke-rc.d winbind stop
sudo invoke-rc.d samba stop

Как таковая, файловая служба samba в нашем случае на Linux-сервере не нужна, поэтому отключим её автозапуск (по сути нам нужна только служба winbind, т.к. она отвечает за резолвинг юзеров и групп и авторизацию в домене)

sudo update-rc.d -f samba remove 

Removing any system startup links for /etc/init.d/samba ...

Сохраняем на всякий случай исходный конфигурационный файл Samba, после чего открываем его на редактирование:

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.default
sudo nano -Y sh /etc/samba/smb.conf

Новое содержимое файла:

[global]
   netbios name = KOM-AD01-GW10
   workgroup = KOM
   security = ADS
   realm = HOLDING.COM
   encrypt passwords = yes

   interfaces = 10.0.0.0/8
   bind interfaces only = yes

   winbind nss info = rfc2307
   winbind use default domain = yes
   winbind enum users  = yes
   winbind enum groups = yes

   idmap config *:backend = tdb
   idmap config *:range = 10000-80000
   idmap config KOM:backend = rid
   idmap config KOM:range = 10000-80000

#   log level = 9

Проверяем утилитой testparm. Утилита должна распарсить конфигурационный файл без явных ошибок

testparm

Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER
Press enter to see a dump of your service definitions

[global]
        workgroup = KOM
        realm = HOLDING.COM
        interfaces = 10.0.0.0/8
        bind interfaces only = Yes
        security = ADS
        winbind enum users = Yes
        winbind enum groups = Yes
        winbind use default domain = Yes
        winbind nss info = rfc2307
        idmap config KOM:range = 10000-80000
        idmap config KOM:backend = rid
        idmap config *:range = 10000-80000
        idmap config * : backend = tdb

Чтобы увидеть содержимое текущего конфигурационного файла smb.conf и все параметры Samba по умолчанию применяемые вместе с этим файлом можно выполнить:

testparm -v

***

Создаём в домене учетную запись компьютера для нашего Linux-сервера в том OU, где нам удобно. Эта учетная запись будет использована для ввода сервера в домен AD. После этого выполняем команду ввода сервера в домен:

sudo net ads join -U DomainAdmin osName='Ubuntu Server GNU/Linux' osVer='14.04 LTS'

Вводим пароль доменного пользователя с правами на присоединение к домену (как правило это администратор домена, хотя может быть и другой непривилегированный в домене пользователь)

Enter DomainAdmin's password:
Using short domain name -- KOM
Joined 'KOM-AD01-GW10' to dns domain 'holding.com'

image_thumb1

 

***

Проверяем запуск службы winbind (должно отработать без ошибок)

sudo invoke-rc.d winbind start

Теперь нужно перезагрузить сервер и убедиться в том, что службы запустились автоматически. При перезапуске я обнаружил запись в /var/log/boot.log:

* Starting SMB/CIFS File and Active Directory Server  [fail] 

Как я понял, это проблема запуска Samba как ADS-сервера, которая в нашем случае не нужна. Поэтому я отключил выполнение соответствующего конфига в /etc/init/, создав файл переопределений, который объясняет системе Upstart, что данная служба может запускаться только вручную по мере необходимости.

echo 'manual' | sudo tee /etc/init/samba-ad-dc.override

Проверяем статус доверительных отношений с доменом:

sudo wbinfo -t
checking the trust secret for domain KOM via RPC calls succeeded

Проверяем аутентификацию пользователя в домене:

sudo wbinfo -a KOM\\artur
Enter KOM\artur's password:
plaintext password authentication succeeded
Enter KOM\artur's password:
challenge/response password authentication succeeded

Включим пользователя от имени которого будет работать Squid (proxy) в группу доступа для чтения каталога /var/run/samba/winbindd_privileged

sudo gpasswd -a proxy winbindd_priv
Adding user proxy to group winbindd_priv

Забегая вперёд могу сказать, что проделанной настройки Samba4 оказалось недостаточно. Когда дело дошло до тестирования хелперов Squid, хелпер NTLM аутентификации из состава Samba4 (/usr/bin/ntlm_auth) при вызове Squid-ом для любой попытки аутентификации пользователей приводил к одной и той же ошибке:

ERROR: NTLM Authentication validating user. Error returned 'BH NT_STATUS_UNSUCCESSFUL NT_STATUS_UNSUCCESSFUL'

Идея решения этой проблемы была найдена здесь [Bug 1304953] Re: ntlm_auth reports Broken Helper: BH NT_STATUS_UNSUCCESSFUL NT_STATUS_UNSUCCESSFUL. Как я понял, суть проблемы заключается в том, что Squid версии 3.3.8 при работе с хелпером NTLM аутентификации пытается использовать содержимое каталога /var/run/samba/winbindd_privileged, в то время как в Samba4 его месторасположение изменено на /var/lib/samba/winbindd_privileged. Оказалось, что в системе присутствуют оба каталога:

sudo ls -la /var/run/samba/winbindd_privileged
total 0
drwxr-x--- 2 root winbindd_priv  40 Jun  6 18:38 .
drwxr-xr-x 7 root root          460 Jun  6 18:38 ..
sudo ls -la /var/lib/samba/winbindd_privileged
total 8
drwxr-x--- 2 root root 4096 Jun  6 18:38 .
drwxr-xr-x 6 root root 4096 Jun  6 18:38 ..
srwxrwxrwx 1 root root    0 Jun  6 18:38 pipe

Для решения проблемы неработающей NTLM аутентификации в Squid пришлось настроить разрешения на каталог /var/lib/samba/winbindd_privileged аналогично тому, как они настроены для каталога /var/run/samba/winbindd_privileged

sudo chgrp winbindd_priv /var/lib/samba/winbindd_privileged
sudo ls -la /var/lib/samba/winbindd_privileged
total 8
drwxr-x--- 2 root winbindd_priv 4096 Jun  6 18:38 .
drwxr-xr-x 6 root root          4096 Jun  6 18:38 ..
srwxrwxrwx 1 root root             0 Jun  6 18:38 pipe

…а также слинковать подкаталог ../pipe из старого месторасположения в новое…

sudo ln -s /var/lib/samba/winbindd_privileged/pipe /var/run/samba/winbindd_privileged/pipe
sudo ls -la /var/run/samba/winbindd_privileged
total 0
drwxr-x--- 2 root winbindd_priv  60 Jun  6 18:41 .
drwxr-xr-x 7 root root          460 Jun  6 18:38 ..
lrwxrwxrwx 1 root root           39 Jun  6 18:41 pipe -> /var/lib/samba/winbindd_privileged/pipe

После этих изменений можно перезапустить сервер чтобы “взбодрить” Squid3 и Samba4.

***

Теперь относительно того, что для учетной записи компьютера (не путать с сервисной учетной записью пользователя для поддержки Kerberos) нашего Linux-сервера в домене AD рекомендуется выполнять периодическую смену пароля. Судя по документу Samba manpages - smb.conf.5 параметр machine password timeout отвечает за то, насколько часто процесс smbd будет пытаться выполнить смену пароля учетной записи компьютера в домене. По умолчанию это значение равно 604800 секунд, то есть 7 дней. Таким образом добавлять в планировщик заданий CRON в крон отдельную задачу смены пароля командой “net rpc changetrustpw” мы не станем.

***

На этом минимальную настройку поддержки Kerberos и NTLM в Ubuntu Server 14.04 LTS для использования механизмов аутентификации пользователей домена Active Directory в Squid 3 будем считать законченной. В следующей части рассмотрим базовую настройку самого прокси-сервера Squid.

 

Дополнительные источники информации:

Samba WIKI - Setup a Samba AD Member Server
Squid-Cache WIKI - Complete FAQ
Bitbinary WIKI - Active Directory Integrated Squid Proxy
RSU WIKI - Настройка proxy-сервера

***

Предыдущие части цикла заметок:

Часть 1. Установка ОС на ВМ Hyper-V Gen2
Часть 2. Настройка диска для кэша Squid
Часть 3. Конфигурация DNS , NTP и установка Squid

Следующие части цикла заметок:

Часть 5. Конфигурация Squid 3
Часть 6. Настройка Proxy Auto Configuration (WPAD)
Часть 7. Кастомизация страниц ошибок
Часть 8. Конфигурация SqStat
Часть 9. Конфигурация LightSquid
Часть 10. Отключаем IPv6

Всего комментариев: 85 Комментировать

  1. Игорь /

    Спасибо за проделанную работу! Ждем продолжения))

  2. Александр /

    Привет! Подскажите как побороть ошибку при вводе в домен "Failed to join domain: Failed to set password for machine account (NT_STATUS_WRONG_PASSWORD)"

    1. Алексей Максимов / Автор записи

      Если всё делали по описанной конфигурации, то теоретически проблема может быть на стороне AD. Возможно учетная запись компьютера с таким именем уже существует и недоступна вам для изменения по правам. Возможно учетная запись для компьютера есть, но выключена. Как минимум нужно попробовать пересоздать учетную запись.

  3. Александр /

    Все сделано по описанной конфигурации билетик получаю. Создаю учетную запись в AD, после в ubuntu даю команду на ввод в домен. Получаю ошибку выше описанную и учетная запись компьютера исчезает из AD.

    1. Алексей Максимов / Автор записи

      Если Вы действительно всё делали по порядку в такой же последовательности, как описано в заметках цикла начиная с первой части, то эта проблема не должна воспроизводится, так как описанную последовательность действий я проверял не один раз.
      В таком случае проблема может заключаться вне Lunix-системы. Как минимум можно попробовать включить расширенное логирование (log level = 9) в smb.conf, смотреть логи на контроллере домена, и т.п..Также нужно обратить внимание на то, какой уровень домена используется (в описанном примере контроллеры домена функционируют на Windows Server 2012 R2). Если у вас DC на Windows Server 2003, то потребуется корректировка параметров *_enctypes в файле krb5.conf в соответствии с поддерживаемыми типами ключей в результирующем keytab-файле.

  4. Tyoma75squad /

    Добрый день! Пытаюсь проделать всё что вы изложили приминимо к Samba4 AD level 2003 win server, squid3 ставлю на Ubuntu server 13.10. На данном этапе не получается авторизоваться по кейтаб файлу... Сам файл создаётся следующей последовательностью:
    samba-tool user create squidauth
    samba-tool spn add HTTP/proxysrv.domain.lo squidauth
    samba-tool domain exportkeytab PROXY.keytab --principal=HTTP/proxysrv.domain.lo Все команды отрабатывают нормально, далее этот файл кидаю на прокси сервер /etc/squid3/PROXY.keytab, изменяю права на файл как описано в статье но при попытке авторизоваться
    kinit -k proxysrv.domain.lo пишет что клиент не найден БД Кербероса... Есть мысли? Спасибо за ранее )

    1. Алексей Максимов / Автор записи

      Не могу комментировать работу samba-tool, так как не работал с этим инструментом. Где-то читал про проблемы связанные с samba-tool, поэтому решил с ним не заморачиваться. А из того, что Вы написали, первое что бросается в глаза, это то, что kinit надо выполнять используя не имя сервера и имя принципала, как оно было указано при генерации keytab-файла. В статье явно приведён пример. В Вашем случае команда будет такой: kinit -k HTTP/proxysrv.domain.lo

  5. Tyoma75squad /

    Благодарю за ответ. Я уже как только не пробовал kinit прописывать и так как вы написали тоже пробовал, что-то пока не получается... Думаю может там с алгоритмами шифрования несросты какие. Хотя и на клиенте и на сервере прописал
    default_tgs_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
    default_tkt_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
    permitted_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
    в общем будем дальше гуглить )) Ведь должно быть решение...)

  6. Обратная ссылка: Аутентификация и авторизация в домене Active Directory при подключении к серверу Ubuntu Server 14.04 LTS | Блог IT-KB /

  7. Николай /

    Приветствую. Подскажите пожалуйста. Все делаю по порядку. но споткнулся таки. При запуске команды kinit -k HTTP/ServerProxy.iro.local получаю вот такое сообщение kinit: Keytab contains no suitable keys for HTTP/ServerProxy.iro.local@IRO.LOCAL while getting initial credentials. Проверил все еще раз, ошибок нет =(

    1. Алексей Максимов / Автор записи

      Возможно есть расхождения между тем какое шифрование ключей внутри keytab-а и поддерживаемыми методами шифрования перечисленными в krb5.conf. Эти данные должны быть сопоставимы.

      1. Николай /

        Не успел) Ошибка заключалась в команде генерации keytab файла. ktpass -princ HTTP/ServerProxy.iro.local@iro.local -mapuser IRO\ и т.д. и т.п.
        После @ домен прописал не верно, нужно было большими буквами) Сгенерировал по новой и получил билет Kerberos. Спасибо, двигаемся дальше...

  8. Николай /

    Нашел ошибку =) Можете не отвечать)

  9. Ярослав /

    Вот маленький совет для тех у кого будет выдавать ошибку при введении в домен (но возможно это только у меня было )

    No DNS domain configured for proxy. Unable to perform DNS Update.
    DNS update failed: NT_STATUS_INVALID_PARAMETER

    Я прописал подкорректировал запись в файле /etc/hosts :

    nano /etc/hosts

    127.0.0.1 localhost
    127.0.1.1 proxy.koa.court.local proxy

  10. Михаил /

    когда запускаю команду kinit выдает ошибку, почему то чекает не тот каталог который нужен, как это поправить? kinit: Key table file '/etc/squid/PROXY.keytab' not found while getting initial credentials

  11. Михаил /

    спасибо) сам нашел ошибку)))

  12. Михаил /

    очевидно я что-то не догоняю. у меня на windows server 2003, пишет что якобы ktpass не опознана(( подскажите что делать как решать?

    1. Алексей Максимов / Автор записи

      Недостаточно информации. Телепаты и астрологи - на летних каникулах.

  13. Михаил /

    в Общем проблема следующего характера, у меня АД вертиться на windows server 2003, когща я пытаюсь сгенерить keytab файл через командную строку мне выдается ошибка 'kinit' is not recognized as an internal or external command,
    operable program or batch file. как это можно исправить? я полазил по форумам, там вроде как говорят что нужен диск установочный и так далее. к сожалению нет возможности это сделать. как то можно по другому пути сгенерить этот файл?

  14. Михаил /

    точнее вот эта ошибка, перепутал
    'ktpass' is not recognized as an internal or external command,
    operable program or batch file.

    1. Алексей Максимов / Автор записи

      Для Windows Server 2003 утилита ktpass входит в состав набора утилит Support Tools.
      Этот набор без проблем можно загрузить с сайта Microsoft.
      Ищите ссылки по названию "Windows Server 2003 Support Tools" в зависимости от версии вашей ОС и уровня обновлений Service Pack.
      Например для Windows Server 2003 Service Pack 2 32-bit ссылка на загрузку будет такой:
      http://www.microsoft.com/en-us/download/details.aspx?id=15326

  15. Михаил /

    Алексей мне снова нужна Ваша помощь. я сгенерил keytab файл. единственное в windows server 2003 ргумент /crypto ALL он не понимает, поэтому пришлось выбирать какой-то один, выбрал RC4-HMAC файл сгенерился нормально вот:
    Targeting domain controller: nvs-exch.nvs.mbrd.ru
    Using legacy password setting method
    Successfully mapped HTTP/nvs-exch2.nvs.mbrd.ru to squidlinux.
    Key created.
    Output keytab to c:\PROXY.keytab:
    Keytab version: 0x502
    keysize 73 HTTP/nvs-exch2.nvs.mbrd.ru@NVS.MBRD.RU ptype 1 (KRB5_NT_PRINCIPAL) vn
    o 48 etype 0x17 (RC4-HMAC) keylength 16 (0xbc007082d32777855e253fd4defe70ee)

    Далее делаю по инструкции выставляю разрешения и пишу в консоли:
    kinit -k HTTP/nvs-exch2.nvs.mbrd.ru
    на что мне выдает ошибку:
    kinit: Keytab contains no suitable keys for HTTP/nvs-exch2.nvs.mbrd.ru@nvs.mbrd.ru while getting initial credentials
    в файле krb5.conf у меня прописано
    default_tgs_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
    default_tkt_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
    permitted_enctypes = rc4-hmac des-cbc-crc des-cbc-md5

    1. Алексей Максимов / Автор записи

      Странно, то что здесь нет такого механизма шифрования..http://technet.microsoft.com/en-us/library/cc776746(v=ws.10).aspx. Вижу только DES-CBC-CRC и DES-CBC-MD5. Попробуйте вообще без этого ключа или если не пойдёт указать дефолтное значение DES-CBC-CRC.

  16. Михаил /

    Если смотреть по хелперу в командной строке, то он предлагает 3 ключа шифрования, я пробовал их все. он нормально генерит keytab`ы, если делать без этого значения, то выпадает в ошибку. может я где ошибся ранее, сегодня попробую с самого начала еще раз по мануалу сделать еще раз. О результатах напишу. Спасибо.

    1. Алексей Максимов / Автор записи

      Можно попробовать сгенерировать кейтаб-файл на Ubuntu с помощью утилиты ktutil, например как описано здесь http://www.itadmintools.com/2011/07/creating-kerberos-keytab-files.html. Но такой способ я сам не проверял.

  17. Михаил /

    Алексей спасибо за советы, не знаю в чем проблема была, да и не стал разбираться. просто переделал всю работу с нуля повнимательней и все получилось, билет я получил. где-то просто не внимательно прошелся по мануалу. Буду дальше собирать.

  18. Михаил /

    Алексей у меня получилось, настроил. Проходит авторизация, пускает на сайты, но сайты открывает криво(наполовину) картинки вообще не грузит. что может быть не подскажете? и и на сайте яндекса пишет Дата на вашем компьютере %local_date не совпадает с текущей %current_date. хотя дату я сверял и там, и там стоит одинаковая!

  19. Анатолий Гранат /

    генерирую ключ командой:
    ktpass -princ HTTP/proxy5.frunze.local@FRUNZE.LOCAL -mapuser FRUNZE\SquidKerb --pass ******** -crypto All -ptype KRB5_NT_PRINCIPAL -out C:\Temp\PROXY.keytab

    подкидываю, запускаю

    kinit -k HTTP/proxy5.frunze.local

    выводится ошибка:
    kinit: Keytab contains no suitable keys for HTTP/proxy5.frunze.local@frunze.local while getting initial credentials

    но если делаю:

    kinit -k HTTP/proxy5.frunze.local@FRUNZE.LOCAL
    то команда проходит без ошибок и генерируется билет

    это может помешать дальнейшей работе? и в чем может быть проблема?

    1. Алексей Максимов / Автор записи

      Если в дальнейшем настройку хелперов использующих Kerberos, таких как negotiate_wrapper_auth, будете выполнять по аналогии с примером приведённым в следующей части (-s HTTP/kom-ad01-squid.holding.com@HOLDING.COM), то проблем возникнуть не должно.

      1. Павел /

        Алексей, подскажи где можно прочитать про negotiate_wrapper_auth, зачем он нужен и что делает?

        1. Алексей Максимов / Автор записи

          Про него в трёх словах я написал в 5 части цикла заметок. А вообще про согласование можно почитать например здесь

  20. Сергей Н. /

    Большое спасибо за такие подробные статьи!
    Объясните, пожалуйста, почему вы не используете в качестве имени просто s-KOM-SquidKerb, а добавляете KOM\ перед ним? Это для вашего удобства или имеет принципиальное значение? Также с HTTP/ перед kom-ad01-squid.holding.com@HOLDING.COM тоже не очень понятно.
    Заранее прошу прощения, если мои вопросы глупые, я в администрировании Windows мало что понимаю, вот пытаюсь разобраться, т.к. просто копипастить не хочется.

    1. Алексей Максимов / Автор записи

      Честно говоря не понял ни одного вопроса. Использование "KOM" где именно смущает? Это NetBIOS имя домена и в том, что оно используется, например, в команде ktpass нет ничего особенного. "HTTP/" где именно смущает? Это формат записи SPN (атрибут servicePrincipalName) в домене Active Directory.

      1. Сергей Н. /

        Просто сразу не понял почему KOM, а не HOLDING. Обычно NetBIOS имя отличается только отсутствием окончания (.COM например) и это меня смутило.
        Также не знал что такое SPN. Спасибо, теперь всё понятно.

        1. Алексей Максимов / Автор записи

          На самом деле NetBIOS-имя домена может отличаться от первой части FQDN. В моих примерах рассмотрен как раз такой случай. А в типичной ситуации, да, так и есть, - для FQDN "holding.com", как правило, используется NetBIOS-имя "HOLDING"

  21. Сергей Н. /

    Алексей, подскажите пожалуйста, если в сети существуют пользователи двух доменов и перевести всех на один не представляется возможным, то как настроить squid, чтобы и те и другие могли выходить в интернет?

    1. Алексей Максимов / Автор записи

      Не подскажу, не имел такого опыта. Но думаю информацию о настройке Squid/Samba/Kerberos для домена с которым установлены доверительные отношения в Интернете найти можно.

  22. Константин /

    Огромное спасибо, доступно, понятно, премного благодарен!

  23. Олег /

    ktpass -princ HTTP/proxy.th.local@TH.LOCAL -mapuser TH\s-KOM-SquidKerb —pass 123 -crypto All -ptype KRB5_NT_PRINCIPAL -out C:\Temp\PROXY.keytab

    Делаю такую запись.

    Выдает
    DsCrackNames returned 0x2 in the name entry for s-KOM-SquidKerb.
    ktpass:failed getting target domain for specified user.

    В чем беда?

    1. Алексей Максимов / Автор записи

      Пишите в форум.

  24. Сергей /

    Хотел спросит, а почему в статье Вы создаете учетную запись пользователя, не безопастнее ли создать учетку компьютера ?

    1. Алексей Максимов / Автор записи

      Не вижу в чём именно "не безопаснее" такой вариант. В случае использования учетных записей компьютеров будет невозможно использовать общее имя входа для нескольких серверов Squid при условии использования Kerberos. Для этого специально и создаётся сервисная учетная. Об этом в заметке написано.

      1. Сергей /

        ну касательно общей точки входа Вы правы про это я как-то не подумал.

  25. k3nguru /

    Следует добавить в статью небольшое замечание:
    "Внимание! Пользователь должен находится в контейнере Users. Иначе будут проблемы при выполнении ktpass."

    Иначе будет такая ошибка:
    C:\Windows\system32>ktpass -princ HTTP/centi.mlvz.local@MLVZ.LOCAL -mapuser MLVZ\squid -pass PaZc2#s5# -crypto All -ptype KRB5_NT_PRINCIPAL -out C:\Temp\PROXY.keytab

    Targeting domain controller: mega.MLVZ.LOCAL
    Successfully mapped HTTP/centi.mlvz.local to squid.
    Password set failed! 0x00000020
    Aborted.

    Пользователь squid у меня находился в AD в группе с русским названием.

    Взято отсюда http://kaktusenok.blogspot.ru/2012/08/centos-58-squid-31-kerberos-windows.html

    1. Алексей Максимов / Автор записи

      У меня пользователь KOMs-KOM-SquidKerb не в контейнере Users и никаких проблем с ktpass не было.

  26. Василий /

    На RHEL7 (CentOS7)
    NTLM authentication WILL FAIL if you have “cache_effective_group squid” set, if you do then remove it! As this overrides the effective group and squid then isn’t seen as part of the ‘wbpriv’ group which breaks authentication!

    На более ранних версиях группа использовалась squid, и поэтому не получалось аунтифицироваться по NTLM.

    Очень благодарен автору за статью, особенно понравилось с разбиением на группы.

  27. Сергей /

    Подскажите вот что, настроил squid с авторизацией пользователей через ad (kerberos) но возник вопрос, когда пользователь переходит по http ссылке в логах squid видно что это за пользователь, но если переходит по https то имени не видно, скажите как это исправить можно. Спасибо

  28. Сергей /

    Подскажите в конфиге самбы "workgroup = KOM" можно заменить на свою рабочую группу? А то с такой записью получаю ошибку:
    Failed to join domain: Invalid configuration ("workgroup" set to 'KOM', should be 'MYDOMEN') and configuration modification was not requested
    И если поставить свою группу то в этих строчках тоже поменять:?
    idmap config KOM:backend = rid
    idmap config KOM:range = 10000-80000

    1. Алексей Максимов / Автор записи

      "КОМ" в моём примере это NetBIOS-имя домена. Разумеется Вам нужно указывать имя своего домена.

  29. Codet /

    Добрый день.
    Помогите пожалуйста((((
    Уже который день мучаюсь, не могу создать keytab файл,
    ввожу команду:
    ktpass -princ HTTP/testproxe.domen.local.com@DOMEN.LOCAL.COM -mapuser LOCAL\adminproxy -pass 12345
    -crypto ALL -ptype KRB5_NT_PRINCIPAL -out C:\PROXY.keytab
    Что не так?????((((((

    1. Сергей /

      Проверьте, консоль должна быть запущена от имени Администратора, так же неплохо было бы посмотреть ошибку которую возвращает введенная Вами команда.

  30. codet /

    Блин про админа не подумал))))
    Завтра с утра попробую. Спасибо за ответ.

  31. Юрий /

    "Михаил / 11.08.2014 15:15
    Алексей у меня получилось, настроил. Проходит авторизация, пускает на сайты, но сайты открывает криво(наполовину) картинки вообще не грузит. что может быть не подскажете? и и на сайте яндекса пишет Дата на вашем компьютере %local_date не совпадает с текущей %current_date. хотя дату я сверял и там, и там стоит одинаковая!"

    аналогичная ситуация у меня. подскажите куда копать
    спасибо

    1. Алексей Максимов / Автор записи

      Не знаю в чём дело. Попробуйте сопоставить дату и время на клиентском компьютере и на прокси. По логике вещей, если бы на прокси были проблемы с датой/временем, то Kerberos аутентификация попросту не работала бы.

  32. k3nguru /

    У меня почему-то после перезагрузки сервера слетает линковка
    sudo ln -s /var/lib/samba/winbindd_privileged/pipe /var/run/samba/winbindd_privileged/pipe

  33. Александр Щербак /

    Добрый день.
    Алексей, подскажите ответ на такой вопрос. - keytab создавался средствами samba net ads, аутентификация проходит, но лишь при отсутствующей записи fqdn в DNS (т.е. в рамках одной подсети). При добавлении записи FQDN в DNS аутентификация kerberos не происходит. В cache.log же появляется это:
    ERROR: Negotiate Authentication validating user. Error returned 'BH received type 1 NTLM token'
    ... соответственно аутентификация NTLM проходит нормально.

  34. Rina /

    По статье всё проходило хорошо но вот в домен не могу загнать. Failed to join domain: Invalid configuration ("workgroup" set to 'DC01', should be 'HOLDING') and configuration modification was not requested не знаю уже где копать.

    1. Алексей Максимов / Автор записи

      Мало информации. Могу только предположить, что у Вас ошибки в smb.conf

  35. Salavat /

    После перезагрузки системы, линковка:
    [b]lrwxrwxrwx 1 root root 39 Jun 6 18:41 pipe -> /var/lib/samba/winbindd_privileged/pipe[/b]
    исчезает. Каким образом ее сделать постоянной?

    1. Алексей Максимов / Автор записи

      Действительно слетает. Но как видно всё работает и без неё.

  36. SimWhite /

    Алексей, подскажите, а можно убрать NTLM, оставив только Kerberos и сделать fallback для LDAP? Задача не использовать Samba вообще и не вводить комп в домен.

    1. Алексей Максимов / Автор записи

      Не пробовал такую конфигурацию. А членство в группах доменных как вы будете проверять без самбы?

      1. SimWhite /

        Группы проверять через ext_kerberos_ldap_group_acl, и в вашем варианте, группы же тоже не через NTLM проверяются, а через LDAP.

    2. Александр Щербак /

      У меня так работает с такой конфигурацией squid3 (на примере конфигурации из части 5):
      # Negotiate Kerberos and NTLM authentication
      auth_param negotiate program /usr/lib/squid3/negotiate_kerberos_auth -r -s HTTP/kom-ad01-squid.holding.com@HOLDING.COM
      auth_param negotiate children 200 startup=50 idle=10
      auth_param negotiate keep_alive off

      1. SimWhite /

        Вопрос к вам, negotiate_kerberos_auth_test должен отдавать ответы с теми же ключами и параметрами что и negotiate_kerberos_auth или у него другой синтаксис?

      2. SimWhite /

        У меня выдает вот такую ошибку: "negotiate_kerberos_auth_test: gss_init_sec_context() failed: Unspecified GSS failure. Minor code may provide more information. SPNEGO cannot find mechanisms to negotiate", хотя по методу инструкции Алексея kerberos работает.

    3. Сергей /

      Да работает, у меня squid не введен в домен, авторизация через kerberos + basic авторизация через ldap. + rejik настроен и управлять им можно через группы в AD.

      1. SimWhite /

        Сергей, не поделитесь конфигами?

        1. Сергей /

          Да там как бы и конфигов нет, в AD создаются группы согласно группам rejik -a в них добавляется пользователь которому разрешено посещать сайты той или иной группы. На сервера perl скрипт через n времени проверяет группы и сливать их участников в отдельные файлы, а в режике указывается через allow_id какому пользователю можно посещать данную группу. Единственное ограничение должна быть именно авторизаци или basic или kerberos или ntlm, что бы rejik видел в локах имя пользователя.

  37. SimWhite /

    В общем, со всем разобрался. Сделал Kerberos+LDAP, без использования Samba и NTLM. Единственное, что в Windows, надо выключать "встроенную авторизацию" иначе IE пытается ломиться через NTLM. Да, и еще интересный момент, если использовать поиск групп через LDAP, то иногда в логах появляется ошибка что система не может связаться с LDAD-сервером, но поиск группы все-равно проходит. В варианте поиска группы через Kerberos, вроде пока все стабильно.

  38. Codet999 /

    Здравствуйте! Настроил по статье все работает но возник такой трабл. На некоторых компах постоянно просит авторизацию. Причем именно на этих компах, на других под этими же пользователями заходит без проблем. Думаю дело в windows может сталкивались с таким, подскажите куда копать,

    1. Алексей Максимов / Автор записи

      Возможно проблемы с Kerberos аутентификацией. Как минимум стоит проверить на проблемном клиенте время на предмет синхронизации с контроллерами домена.

  39. codet999 /

    Проверил mazila работает нормально. но chrome и ie гнут свое. Дайте совет где копать и как. Я навичек в этой теме. Если можно поподробней.

  40. maxdie /

    Коллеги, подскажите кто-нибудь сталкивался когда-нибудь с проблемой имени пользователя в AD состящую из двух слов типа "Иван Иванов". Авторизация проходит. Но в external_acl_type переменная %LOGIN ест только то что до пробела. Да и вслучае если использовать скажем в basic авторизации userPnincipalName обрезает обрезает суффикс. Ни как не пойму как заставить или обрабатывать пароль или использовать полный UPN авторизацию. Подскажите если кто сталкивался. Советовать сменить имена не надо. Домен не мой попросили помочь, а исторически там так и большие дядьки менять феншуй не хотят.

    1. Алексей Максимов / Автор записи

      Можно использовать вместо хелпера ext_ldap_group_acl какие-то другие хелперы, например winbind, как здесь
      Ещё можно попробовать использовать для external_acl_type дополнительный параметр "protocol=2.5" который, если я правильно понял, заключает все передаваемые в хелпер значения в кавычки.

      Здесь пишут что подобные проблемы замечены в ветке 3.5 и при этом в версии 3.3.13 логины с пробелами обрабатываются корректно.

      В общем есть над чем подумать :)

      1. maxdie /

        Понял, про версию протокола особенно интерсно, попробую поковырять, проверю все две теории, и на карайняк попробую вычленить хелперы с ветки 3.3 может получится. Отпишусь после праздников.
        Спасибо.

      2. maxdie /

        Версия протокола не помогла. Подстановка старых хелперов тоже. Городить наверно другую систему с авторизацией по группам заведомо утяжеляя конструкцию сквида с разным количеством чайлд процесов как-то неправильно (IMHO), оставлю на потом, на крайний случай. Займусь мозговым штурмом местных виндовс админов (я правда сам такой, по большей степени, но таких косяков не делал), на предмет причесывания всего в нормальный вид. А именно латиница и отсутствие пробелов. А то реализация замены TMG подвисла именно на проксе. Впны поднял, релей почтовый для эксчя сделал, фаервол настроил. и пинцет вклинился на две недели. Хотят бесплатный UTM причесывайте свой домен. А то борьба с русскими именами начинает напрягать, и самое обидное, что с радиусом такая же ерунда получается, авторизация есть acl по группам не пашет.

        1. Алексей Максимов / Автор записи

          С этого и надо было начинать :)

          1. maxdie /

            По любому спасибо за помощь. Вроде лед тронулся первую группу переименовали для тестов. Если все ок, а думаю ок, то значит переименюут и все о стальное.

  41. asddasa /

    есть второй домен в доверительных отношениях, в созданные группы доступа добавил пользователей с другого домена, прописал прокси - TCP/DENIED. зато разрешенные сайты открываются, где собака порыта? мне кажется не должно быть проблем для авторизации пользователей с другого доверительного домена?

    1. Алексей Максимов / Автор записи

      Здесь в комментариях уже задавался подобный вопрос.

  42. asddasa /

    как сделать так, чтобы в логи писалось DOMAIN\\USER, а не просто USER?

  43. Viktor /

    А у меня обратная сторона. Хочу сделать авторизацию на одном прокси из 2х доменов с двухсторонними доверительными отношениями, но незнаю как. Прописал отдельную проверку в группе по лдап в другом домене, но я так понял по логам, юзверя он берет как DOMAIN\\USER и соответственно такого пользователя ни в какой группе найти не может. Как тогда сделать авторизацию для другого домена ?

  44. Сергей /

    иногда почему то пропадает соединение с доменом, после перезакидывания все работает нормально, как это можно исправить? или в крон запихать задание?
    убунту 14.04 сквид3, ад 2к8, уровень леса 2к8

  45. Обратная ссылка: Создание keytab-файла, содержащего несколько разных Kerberos Principal | Блог IT-KB /

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