Задача: настроить OpenFire на связь с 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.
У меня же так хорошо сделано, что вводить 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!
Нажимаю Login to the admin console и авторизуюсь:
http://IP&DNS:9090/login.jsp
Username: ekzorchik
Password: 712mbddr@ (точно такой же пароль и на доменную учетную запись)
и я успешно авторизовался
После проверяю, а вижу ли я учетные записи Active Directory:
http://IP&DNS:9090/index.jsp — Пользователи/Группы (Users/Groups) — Пользователи (Users) — Все пользователи (User Summary) и вижу все учетные записи моего домена:
Отлично что и задумывалось, а если перейти в группы (Groups) то также вижу, что представлены все доменные группы моего домена:
После делаю некоторые настройки с сервером 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. И вот я подключен
Если выйти из клиента и запустить его снова, то благодаря параметру Auto Login авторизация клиента происходит само. Работает все что выше проверено. На этом у меня всё, до новых заметок, с уважением автор блога Олло Александр aka ekzorchik.