Openfire на связь с Active Directory

Posted by

Задача: настроить на связь с AD с последующей прозрачной регистрацией клиентов

Итак, как выдались свободные минуты я решил, что пора задокумментировать, как настроить связку сервиса OpenFire и Active Directory чтобы не создавать учетные записи, а брать их из сервиса где и так все пользователи локальной сети имеют место быть. Да и контролировать удобнее, к примеру уволился человек и помимо блокировки доменной учетной записи блокируется доступ и к общему чату компании. Плюс можно мониторить переписку сотрудников, конфиденциально обсуждать технические вопросы не выводя переписку сторонним сервисам.

Мои характеристики системы на которых я тестируя связь сервиса OpenFire и Active Directory: CPU 2, RAM 2, HDD 50

Пожалуй начну свое документирование действий которыми я достиг практической части:

ekzorchik@srv-trusty:~$ sudo rm -Rf /var/lib/apt/lists

ekzorchik@srv-trusty:~$ sudo apt-get update && sudo apt-get upgrade -y

ekzorchik@srv-trusty:~$ sudo apt-get install linux-generic-lts-xenial linux-image-generic-lts-xenial -y

ekzorchik@srv-trusty:~$ sudo nano /etc/hosts

10.10.10.12 srv-trusty.polygon.local srv-trusty

10.10.10.2 srv-dc.polygon.local srv-dc

ekzorchik@srv-trusty:~$ sudo nano /etc/hostname

srv-trusty.polygon.local

ekzorchik@srv-trusty:~$ sudo service hostname start

ekzorchik@srv-trusty:~$ sudo reboot

ekzorchik@srv-trusty:~$ uname -a

Linux srv-trusty.polygon.local 4.4.0-83-generic #106~14.04.1-Ubuntu SMP Mon Jun 26 18:10:19 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

ekzorchik@srv-host:~$ sudo tasksel install lamp-server

New password for the MySQL "root" user:712mbddr@

Repeat password for the MySQL "root" user:712mbddr@

Как всегда создаю пользователя, пароль и базу для работы сервиса OpenFire:

ekzorchik@srv-trusty:~$ mysql -u root -p712mbddr@ -e "create database db_openfire"

ekzorchik@srv-trusty:~$ mysql -u root -p712mbddr@ -e "create user 'openfire'@'localhost' identified by '612mbddr@'"

ekzorchik@srv-trusty:~$ mysql -u root -p712mbddr@ -e "grant all on db_openfire.* to 'openfire'@'localhost'"

ekzorchik@srv-host:~$ sudo apt-get install openjdk-7-jre openjdk-7-jdk -y

ekzorchik@srv-trusty:~$ java -version

java version "1.7.0_131"

OpenJDK Runtime Environment (IcedTea 2.6.9) (7u131-2.6.9-0ubuntu0.14.04.2)

OpenJDK 64-Bit Server VM (build 24.131-b00, mixed mode)

Теперь скачиваю с официального сайта самую последнюю версию пакета для организации корпоративного чата:

ekzorchik@srv-trusty:~$ wget -c https://www.igniterealtime.org/downloadServlet?filename=openfire/openfire_4.1.5_all.deb

ekzorchik@srv-trusty:~$ sudo mv downloadServlet\?filename\=openfire%2Fopenfire_4.1.5_all.deb openfire_4.1.5_all.deb

ekzorchik@srv-trusty:~$ file openfire_4.1.5_all.deb

openfire_4.1.5_all.deb: Debian binary package (format 2.0)

ekzorchik@srv-trusty:~$ sudo dpkg -i openfire_4.1.5_all.deb

По аналогии с установкой SQUID в связке Active Directory настраиваю получение Kerberos билета:

ekzorchik@srv-trusty:~$ sudo apt-get install krb5-user -y

ekzorchik@srv-trusty:~$ klist -V

Kerberos 5 version 1.12

ekzorchik@srv-trusty:~$ sudo cp /etc/krb5.conf /etc/krb5.conf.backup

ekzorchik@srv-trusty:~$ sudo bash -c "cat > /etc/krb5.conf"

^C → нажимаю сочетание клавиш для выхода, т. е. Ctrl + C

ekzorchik@srv-trusty:~$ sudo nano -Y sh /etc/krb5.conf

[libdefaults]

default_realm = POLYGON.LOCAL

dns_lookup_realm = false

dns_lookup_kdc = false

ticket_lifetieme = 24h

kdc_timesync = 1

ccache_type = 4

forwardable = yes

rdns = no

default_keytab_name = /etc/openfire/openfire.keytab

default_tgs_enctypes = des-cbc-crc rc4-hmac des-cbc-md5

default_tkt_enctypes = des-cbc-crc rc4-hmac des-cbc-md5

permitted_enctypes = des-cbc-crc rc4-hmac des-cbc-md5

clock_skew = 300

[realms]

POLYGON.LOCAL = {

kdc = srv-dc.polygon.local

admin_server = srv-dc.polygon.local

default_domain = POLYGON.LOCAL

}

[domain_realm]

.polygon.local = POLYGON.LOCAL

polygon.local = POLYGON.LOCAL

Затем в аплете DNS домена polygon.local создаю DNS записи текущей системы, а записи вида A и вида PTR в соответствующей для этого зоне.

После в оснастке Active Directory Users and Computers домен контроллера нужно создать специализированного пользователя ответственного за связь Ubuntu системы с контроллером домена. Итак это учетная запись: openfire с паролем Aa1234567. После создаю keytab файл, копирую его через winscp на Ubuntu и перезапускаю krb5:

C:\Windows\system32>mkdir c:\keytab

C:\Windows\system32>ktpass -princ HTTP/srv-trusty.polygon.local@POLYGON.LOCAL -mapuser openfire -pass Aa1234567 -ptype KRB5_NT_PRINCIPAL -crypto ALL -out c:\keytab\openfire.keytab

ekzorchik@srv-trusty:~$ sudo mv openfire.keytab /etc/openfire/

ekzorchik@srv-trusty:~$ sudo chmod 640 /etc/openfire/openfire.keytab

ekzorchik@srv-trusty:~$ sudo chown -R openfire:openfire /etc/openfire

ekzorchik@srv-trusty:~$ sudo kinit -kV -p HTTP/srv-trusty.polygon.local

Using default cache: /tmp/krb5cc_0

Using principal: HTTP/srv-trusty.polygon.local@POLYGON.LOCAL

Authenticated to Kerberos v5

ekzorchik@srv-trusty:~$ sudo klist

Ticket cache: FILE:/tmp/krb5cc_0

Default principal: HTTP/srv-trusty.polygon.local@POLYGON.LOCAL

Valid starting Expires Service principal

07/14/2017 09:30:45 07/14/2017 19:30:45 krbtgt/POLYGON.LOCAL@POLYGON.LOCAL

renew until 07/15/2017 09:30:45

Теперь перехожу к установке сервера OpenFire:

http://IP&DNS:9090

Setup Progress — Choose Language (English) и нажимаю Continue

Server Settings:

  • XMPP Domain Name: srv-trusty.polygon.local
  • Server Host Name (FQDN): srv-trusty.polygon.local
  • Admin Console Port: 9090
  • Secure Admin Console Port: 9091
  • Property Encryption via: Blowfish

и нажимаю Continue

  • Database Settings: выбираю Standard Database Connection и нажимаю Continue

заполняю параметры соединения с внешней базой

  • Database Driver Presets: MySQL
  • JDBC Driver Class: com.mysql.jdbc.Driver
  • Database URL: jdbc:mysql://localhost:3306/db_openfire?rewriteBatchedStatements=true
  • Username: openfire
  • Password: 612mbddr@

и нажимаю Continue

Теперь вместо дефолтного месторасположения хранения в базе аутентификационных данных я указываю что данные брать из Directory Server (LDAP) и нажимаю Continue, следом запускается мастер настройки подключения к LDAP серверу который в моем случае это Active Directory текущего домена на базе Windows Server 2012 R2 Std

Шаг №1: Connection Settings

  • Server Type: (Тип Сервера) Active Directory
  • Host: (Хост) srv-dc.polygon.local
  • Port: (Порт) 389
  • Base DN: (База DN) DC=polygon,DC=local
  • Authentication: (Аутентификация)
  • Administrator DN: (Администратор DN) openfire@polygon.local (Пользователи домена)
  • Password: (Пароль) Aa1234567

Нажимаю Test Settings (Настройка теста), если Вы видите в появившемся окне:

  • Test: Connection Settings (Настройка соединений)
  • Status: Error

Unknown host address

, то просто вместо имени контроллера домена укажите его IP адрес Host: 10.10.10.2 (либо в файле /etc/hosts вы не прописали и адрес сервера где работает DNS), тогда в появившемся окне будет положительный результат:

  • Test: Connection Settings

Status: Success! (Успех)

A connection was successfully established to the LDAP server using the settings above. Close this test panel and continue to the next step.

Проверяю настройки для связи OpenFire через LDAP

У меня же так хорошо сделано, что вводить IP адрес нет нужды все подхватилось и по DNS имени.

Следом нажимаю Save & Continue (Сохранять & Продолжить) для применения настроек.

Шаг №2: User Mapping:

  • Username Field: samaccountname
  • Advanced Settings:
  • User Filter: (objectClass=user)(objectCategory=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2))

Нажимаю Test Settings, а после Save & Continue

Шаг №3: Group Mapping:

  • Group Field: cn
  • Member Field: member
  • Description Field: description
  • Advanced Settings:
  • Posix Mode: No
  • Group Filter: (objectCategory=Person)

Нажимаю Test Settings, а после Save & Continue

На следующем шаге Administrator Account ввожу именование учетной записи с полномочиями Администратора:

  • Add Administrator: ввожу openfire (ту которую создали в AD), нажимаю Add, а после Continue.

Если все прошло успешно, то вы увидите надпись вида:

Setup Complete!

Сервис OpenFire успешно установлен

Нажимаю Login to the admin console и авторизуюсь:

http://IP&DNS:9090/login.jsp

Username: ekzorchik

Password: 712mbddr@ (точно такой же пароль и на доменную учетную запись)

и я успешно авторизовался

Успешная авторизация в OpenFire под доменной учетной записью

После проверяю, а вижу ли я учетные записи Active Directory:

http://IP&DNS:9090/index.jsp — Пользователи/Группы (Users/Groups) — Пользователи (Users) — Все пользователи (User Summary) и вижу все учетные записи моего домена:

Учетные записи Active Directory видны в OpenFireОтлично что и задумывалось, а если перейти в группы (Groups) то также вижу, что представлены все доменные группы моего домена:

Группы домена также отображаются в OpenFire

После делаю некоторые настройки с сервером openfire в панели администрирования.

Server — Server Manager — Language and Time → Choose Language = Русский (ru_RU) и нажимаю Save Settings

Сервер — Настройки сервера — Регистрация и вход

  • Регистрация учетной записи: Выключено
  • Изменение пароль: Включено
  • Анонимный вход: Выключено

После запускаю клиент Spark и настраиваю (нажимаю Advanced) подключение к серверу Openfire с использование доменной учетной записи:

Вкладка General

  • Automatically discover host and port: снимаю галочку
  • Host: srv-trusty.polygon.local
  • Port: 5222
  • Use hostname as resource: отмечаю галочкой
  • Accept all certificates (self-signed/expired/not trusted): отмечаю галочкой
  • Disable cerfificate hostname verification (not recommended): отмечаю галочкой

После нажимаю OK для выхода из окна Advanced connection preferences и указываю параметры аутентификации, точнее они будут доменными:

  • Username: alektest
  • Password: Aa1234567
  • Domain: polygon.local
  • Save password: отмечаю галочкой
  • Auto login: отмечаю галочкой

и подключаюсь нажатием кнопки Login. И вот я подключен

Первым доменный пользователь авторизован в OpenFireЕсли выйти из клиента и запустить его снова, то благодаря параметру Auto Login авторизация клиента происходит само. Работает все что выше проверено. На этом у меня всё, до новых заметок, с уважением автор блога Олло Александр aka ekzorchik.