пятница, 29 августа 2014 г.

Установка Openfire сервера с авторизацией в домене Active Directory на CentOS 6.5

Довольно долго вынашивал идею внедрения какого-нибудь корпоративного IM, и вот этот момент настал.
Основных требований к системе было два. Первое - это аутентификация по средствам Active Directory, т.к. администрировать огромное количество учётных записей и объяснять пользователям, на что у них какие пароли, становится просто невозможно. Второе - по возможности бесплатность этой системы. Под эти требования очень хорошо вписался jabber, и в частности "Открытый огонь 3.9.3".

Ниже будет изложена подробная инструкция по развёртыванию сервера Openfire и его интеграция с доменом Microsoft Active Directory.

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

Для инсталляции нам потребуется:
1. Сервер с чистой инсталляцией ОС CentOS.
2. Уже установленный и настроенный сервер Active Directory и DNS.

Описание инфраструктуры

Домен: SEZAR
Имя домена: sezar.local
FQDN сервера AD: serverad.sezar.local
FQDN jabber сервера: openfire.sezar.local
В качестве ОС для jabber-сервера я выбрал CentOS из-за длительности периода её поддержки.
В качестве домен-контроеллера Microsoft Windows Server 2012 R2, установленный в Server Core инсталляции.

Подготовка DNS сервера

Для того, чтобы клиенты смогли найти наш сервер в сети, создадим в прямой зоне DNS A-запись, указывающею на нашу машину, PTR запись в обратной зоне и три служебные SRV записи:
SRV recond 1:
service: _xmpp
protocol: _tcp
priority: 0
weigth: 100
port: 5269
hostname: openfire.sezar.local.
SRV recond 2:
service: _xmpp-server
protocol: _tcp
priority: 0
weigth: 100
port: 5269
hostname: openfire.sezar.local.
SRV recond 3:
service: _xmpp-client
protocol: _tcp
priority: 0
weigth: 100
port: 5222
hostname: openfire.sezar.local.

Предварительная настройка системы на jabber-сервере

Проверяем наличие обновлений в системе
# yum update
Для корректной работы openfire, отключаем SELinux:
# vi /etc/selinux/config
Заменяем строку
SELINUX=enforcing
на
SELINUX=disabled
Временно отключаем или настраиваем iptables:
# service iptables stop
# service ip6tables stop
# chkconfig iptables off
# chkconfig ip6tables off
Настраиваем Kerberos
# vi /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 = SEZAR.LOCAL
 dns_lookup_realm = true
 dns_lookup_kdc = true
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[realms]
 SEZAR.LOCAL = {
  kdc = serverad.sezar.local
  admin_server = serverad.sezar.local
 }

[domain_realm]
 .sezar.local = SEZAR.LOCAL
 sezar.local = SEZAR.LOCAL
Устанавливаем нужные пакеты для работы открытого огня:
# yum install java glibc mysql-server
(для x86_64 системы, нужно устанавливать 32-битную версию glibc, glibc.i686)

Подготавливаем MySQL сервер

Запустим сервер MySQL и добавим его в автозагрузку
# service mysqld start
# chkconfig mysqld on
Выполним предварительную настройку настройку:
# /usr/bin/mysql_secure_installation
Enter current password for root (enter for none):
По умолчанию пароль пустой.
Set root password? [Y/n] y
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y

Для корректного отображения истории и offline сообщений, ставим кодировку utf-8 по-умолчанию, для этого правим файл /etc/my.cnf:
# vi  /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
default-character-set = utf8
character-sets-dir = /usr/share/mysql/charsets


[client]
default-character-set = utf8
character-sets-dir = /usr/share/mysql/charsets


[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Перезапускаем сервис:
# service mysqld restart
Подключаемся к 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

Установка Openfire

Скачиваем последнюю версию OpenFire (на данный момент 3.9.3) и Spark (2.6.3) на машину администратора по ссылке: http://www.igniterealtime.org/downloads/index.jsp
Забрасываем с машины администратора на сервер установочный пакет:
C:\Users\golovlevmv>cd Downloads

C:\Users\golovlevmv\Downloads>pscp openfire-3.9.3-1.i386.rpm root@openfire:/root/
root@openfire's password:
openfire-3.9.3-1.i386.rpm | 68860 kB | 9837.2 kB/s | ETA: 00:00:00 | 100%
Теперь установим пакет openfire-3.9.3-1.i386.rpm на смом сервере:
# yum localinstall /root/openfire-3.9.3-1.i386.rpm
Запустим openfire и добавим его в автозагрузку:
# service openfire start
# chkconfig openfire on
Теперь переходим к настройке самого открытого огня. Заходим в браузере по адресу: http://openfire:9090/
Нас встречает мастер. Выбираем язык.
Выбираем имя домена в котором будет работать наш jabber сервер. В русском варианте установки домен переведено как "область", и в это поле вписан FQDN сервера. Нужно вписать имя домена.
Выбираем тип СУБД для хранения данных на сервере. Можно использовать внешнюю СУБД или внутреннюю HSQLDB. Выбирем "Standard Database Connection".
Выбирем базу MySQL и установим соответствующие параметры, изменив строку Database URL, приведя её вот к такому виду:
jdbc:mysql://localhost:3306/openfire?rewriteBatchedStatements=true
Выберем вариант с подключением к серверу каталогов 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))
Остальные параметры оставляем по-умолчанию.
Далее параметры поиска групп, тоже оставляем всё по-умолчанию.
Добавляем учётные записи администраторов, которые смогут входить в панель управления (учётки из каталога AD):
На этом настройка закончена, и можно переходить в панель управления.

Создание корпоративного контакт-листа

Теперь создадим группу в домене, назовём ей к примеру "Jabber Users", а в панеле управления выберем "Users/Groups", "Groups", в списке групп, найдём нашу группу, и выберем "Enable contact list group sharing", и дадим нашему контакт-листу имя, например название нашей компании.

Теперь настало время опробовать наш Jabber!

Устанавливаем любой понравившийся вам клиент (Spark, Vacuum-IM, Psi-plus, QIP...) и подключаемся к серверу.

В дополнение

Настроить NTLM-аутентификацию, на сервере для прозрачной аутентификации клиента Pandion, которая работает только на Windows машинах у меня так и не получилось.

4 комментария: