среда, октября 05, 2016

SSO-авторизация в Zimbra (автоматический вход пользователей spnego)

Итак, есть уже настроенная Zimbra, настроена интеграция с учетками Active Directory и для полного счастья пользователей (и админов) осталось настроить так называемую "сквозную" SSO-авторизацию (когда пользователям не нужно вводить свои учетные данные - логин и пароль берутся из AD).
В случае моей организации, механизм "единого пароля на все" работает в нескольких сервисах (портал, облако, справочник, прокси, кое-какая-базейка), настало время почты.


Что нужно?
Чтобы при переходе по кнопке "Почта" на корпоративном портале (или по адресу http://mail.domain.ru) пользователь автоматически попадал в свой почтовый ящик, а в случае нового пользователя, при первом входе его ящик еще и сам создавался.

Как делать?
Основная работа по настройке autoprov в Zimbra уже сделана и описана в Zimbra интеграция с Active Directory (autoprov)

Опять же - ничего сложного если читать мануалы, которые лежат в /opt/zimbra/dosc

Имеется Zimbra 8.7.0 работает на Ubuntu 14.04 с hostname mail.domain.ru и почтовым доменом domain.ru
Active Directory работает на Булщите 2012 с именем MY-DOMAIN.local
В AD должен быть создан пользователь «билетер», будем использовать уже созданного для адресной книги - zimbra@MY-DOMAIN.local (с паролем PassworD, запретить смену пароля).

Осталось создать keytab, настроить kerberos и браузер, а еще раскидать сертификаты на машинки пользователям.
Для SSO авторизации в Zimbra также есть встроенное средство – spnego.

Добавить SPN для этого пользователя на контроллере домена.

setspn –A mail.domain.ru zimbra

Проверить результат (mail.domain.ru должен быть добавлен пользователю)

setspn –L zimbra

Создать keytab-файл на контроллере домена.

ktpass -out c:\keys\jetty.keytab -princ HTTP/mail.domain.ru@MY-DOMAIN.local -mapUser zimbra -mapOp set -pass PassworD -crypto RC4-HMAC-NT -pType KRB5_NT_PRINCIPAL


Команда выведет что-то вроде:

Targeting domain controller: dc.MY-DOMAIN.local
Using legacy password setting method
Successfully mapped HTTP/mail.domain.ru to zimbra.
Key created.
Output keytab to c:\keys\jetty.keytab:
Keytab version: 0x502
keysize 68 HTTP/mail.domain.ru@MY-DOMAIN.local ptype 1 (KRB5_NT_PRINCIPAL) vno 8 etype 0x17 (RC4-HMAC) keylength 16
ddda58f19cfd4b3b231ebadda4277)

Переместить keytab на сервер Zimbra в каталоги /opt/zimbra/data/mailboxd/spnego/ и /opt/zimbra/jetty/ затем сменить права:

chown zimbra:zimbra /opt/zimbra/data/mailboxd/spnego/jetty.keytab
chown zimbra:zimbra /opt/zimbra/jetty/jetty.keytab

Настроить сервер Zimbra для работы с keytab

su zimbrazmprov mcf zimbraSpnegoAuthEnabled TRUE
zmprov mcf zimbraSpnegoAuthRealm MY-DOMAIN.local
zmprov ms mail.domain.ru zimbraSpnegoAuthTargetName HTTP/mail.domain.ru
zmprov ms mail.domain.ru zimbraSpnegoAuthPrincipal HTTP/mail.domain.ru
zmprov md domain.ru zimbraAuthKerberos5Realm MY-DOMAIN.local
zmprov md domain.ru zimbraWebClientLoginURL '/service/spnego'
zmprov md domain.ru zimbraWebClientLogoutURL '../?sso=1'

Привести конфиг /opt/zimbra/jetty/etc/krb5.ini к такому виду:

[libdefaults]                                                                                                      
default_realm = MY-DOMAIN.local
dns_lookup_realm = no
dns_lookup_kdc = no
kdc_timesync = 1
ticket_lifetime = 24h

default_keytab_name = FILE:/opt/zimbra/data/mailboxd/spnego/jetty.keytab
default_tgs_enctypes = arcfour-rc4-md5 rc4-hmac des-cbc-crc des-cbc-md5
default_tkt_enctypes = arcfour-rc4-md5 rc4-hmac des-cbc-crc des-cbc-md5
permitted_enctypes = arcfour-rc4-md5 rc4-hmac des-cbc-crc des-cbc-md5

[realms]
MY-DOMAIN.local = {
kdc = dc.MY-DOMAIN.local
admin_server = dc.MY-DOMAIN.local
default_domain = MY-DOMAIN.local
}

[domain_realm]
my-domain.local = MY-DOMAIN.local
.my-domain.local = MY-DOMAIN.local
.local = MY-DOMAIN.local

[appdefaults]
autologin = true
forwardable=true

Настроить браузеры, в случае с Mozilla Firefox ввести в адресную строку about:config
В поле поиска ввести network.neg
В найденных полях содержащих в названии слово uris записать значение mail.domain.ru или http://,https:// 

В случае с Internet Explorer нужно добавить в местную интрасеть http://mail.domain.ru и https://mail.domain.ru
Это можно и через GPO сделать.

Теперь нужно слегка изменить параметр авторизации для режима autoprov LAZY

su zimbra
zmprov md domain.ru +zimbraAutoProvAuthMech SPNEGO +zimbraAutoProvAuthMech KRB5 +zimbraAutoProvAuthMech PREAUTH +zimbraAutoProvAuthMech LDAP
zmcontrol restart

Далее, т.к. наш сертификат Zimbra само подписанный, браузеры будут ругаться и требовать подтверждения при входе в почту, что очень не удобно (пользователям). От этих запросов можно избавиться установив сертификат.


Сначала выгрузим его

sudo su
cd /opt/zimbra/ssl/zimbra/ca
openssl x509 -in ca.pem -outform DER -out ~/zimbra.cer

Теперь установим его на целевой системе, для этого нужно открыть сертификат двойным щелчком и выбрать Установить сертификат. Откроется мастер импорта сертификатов, работа с которым не представляет сложности. На этапе выбора хранилища ставим переключатель в положение Поместить все сертификаты в выбранное хранилище, где выбираем Доверенные коренные центры сертификации. Либо установить всем юзерам через GPO.

Все готово!