OpenFire IM-сервер на CentOS7 с интеграцией MS Active Directory

Здесь будет инструкция по развёртыванию сервера Openfire и его интеграция с доменом Microsoft Active Directory. Это позволит добавлять пользователей в корпоративный чат, просто добавив их в группу Active Directory и удалять, просто отключив учётную запись, а так же будет общий контакт-лист, где будут перечислены все сотрудники предприятия.

Имеем инфраструктуру с Active Directory

Домен: TERRAL
Имя домена: terral.local
FQDN сервера AD: DC1.terral.local
FQDN jabber сервера: openfire.terral.local

Подготовка DNS сервера. Для того, чтобы клиенты смогли найти наш сервер в сети, создадим в прямой зоне DNS A-запись, указывающею на нашу машину, PTR запись в обратной зоне и три служебные SRV записи:

SRV recond 1: 
service: _xmpp
protocol: _tcp
priority: 0
weigth: 100
port: 5269
hostname: openfire.terral.local.
SRV recond 2: 
service: _xmpp-server
protocol: _tcp
priority: 0
weigth: 100
port: 5269
hostname: openfire.terral.local.
SRV recond 3: 
service: _xmpp-client
protocol: _tcp
priority: 0
weigth: 100
port: 5222
hostname: openfire.terral.local.

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

mcedit /etc/krb5.conf

Прописываем в параметры realm название нашего домена, и приводим файл вот к такому виду:

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = TERRAL.LOCAL
 dns_lookup_realm = true
 dns_lookup_kdc = true
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[realms]
 TERRAL.LOCAL = {
 kdc = DC1.terral.local
 admin_server = DC1.terral.local
 }

[domain_realm]
 .terral.local = TERRAL.LOCAL
 terral.local = TERRAL.LOCAL

Качаем openfire и устанавливаем

wget http://download.igniterealtime.org/openfire/openfire-4.1.5-1.i686.rpm
yum install ~/openfire-4.1.5-1.i686.rpm

Ставим mysql

yum install mariadb mariadb-server libldb.i686 krb5-workstation

Устанавливаем нужные пакеты для работы openfire:

yum install java glibc

Добавляем в автозагрузку и запускаем mysql и openfire

systemctl enable mariadb.service
systemctl start mariadb.service
systemctl enable openfire.service
systemctl start openfire.service

Подключаемся к MySQL:

mysql -u root -p

Создаём базу в консоли MySQL и пользователя:

CREATE DATABASE openfire;
INSERT INTO mysql.user (User,Host,Password) VALUES('пользователь','localhost',PASSWORD('пароль'));
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON openfire.* to пользователь@localhost;
FLUSH PRIVILEGES;
exit

Меняем кодировку базы на utf8

mysql -u root -p
use openfire;
alter database character set utf8;
alter database collate utf8_general_ci;

Теперь переходим к настройке самого IM-сервера. Заходим по адресу:

http://openfire.terral.local:9090

При подключении в серверу БД указываем Database URL :

jdbc:mysql://localhost:3306/openfire?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8

Выберем вариант с подключением к серверу каталогов LDAP. Выбираем тип службы каталогов (Server Type), вводим хост, на котором распологается наш контроллер домена и Base DN. Так же, для чтения службы каталогов нам понадобится учётная запись простого пользователя. Можно создать например учётку с именем “openfire” и присвоить ей пароь, этого будет достаточно.

Настройка параметров поиска в каталоге. Для того, чтобы нам не попадались учётки отключенных пользователей нужно изменить условия поиска. Для этого, раскроем “Advanced Settings”, заменим фильтр поиска аккаунтов на другой, в поле “User Filter” вместо:

(objectClass=organizationalPerson)
Заменим на:
(objectClass=user)(objectCategory=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2))

Остальные параметры оставляем по-умолчанию.

Для создания корпоративного контакт-листа, создадим группу в домене, назовём ей к примеру “Spark_Users”, а в панели управления Openfire выберем “Users/Groups”, “Groups”, в списке групп, найдём нашу группу, и выберем “Enable contact list group sharing”, и дадим нашему контакт-листу имя, например название нашей компании.