12 января 2017 г.

Jabber server с прозрачной авторизацией в Active Directory (Openfire + AD + Pandion)

Нереально пересчитать, сколько мануалов в интернете я перечитал, но ни один из них мне так и не помог, собственно вот моя попытка хоть как-то привести все к единому знаменателю...


Дано:
Контроллер домена: Win 2008 server R2 Standart
ad.domain.name; 192.168.1.70 + поднят DNS

Сервер куда ставим сам жаббер: Win 2008 server R2 Standart
xmpp.domain.name; 192.168.1.71
Версия openfire:openfire-3-7-1-es-en-br-fr-de-cn-win.exe -- почему старая версия, когда есть уже 4.Х? -- да потому, что лично у меня патч прозрачной авторизации не взлетел на более новых версиях.
Патч для прозрачной авторизации опенфаера: openfire-sasl-sspi.v7.2.zip
И я захотел, чтоб все это дело вертелось в базе данных SQL Server 2012 -- но это, думаю не принципиально, выбирайте каждый сам, где удобней хранить юзверей. Выполнялось все от ЛОКАЛЬНОГО Администратора, openfire почему-то стабильно глючил при запуске от AD Administrator.
Итак-с, приступим:
1. Заранее настраиваем наш ДНС (этот кусок честно слизан отсюда):
Создаем записи типа SRV на DNS-сервере для автоматического нахождения TCP/IP параметров сервера с доменом xmpp.domain.name в текущем домене Active Directory:

SRV recond 1:

service: _xmpp
protocol: _tcp
priority: 0
weigth: 100
port: 5269
hostname: xmpp.domain.name.

SRV recond 2:

service: _xmpp-server
protocol: _tcp
priority: 0
weigth: 100
port: 5269
hostname: xmpp.domain.name.

SRV recond 3:

service: _xmpp-client
protocol: _tcp
priority: 0
weigth: 100
port: 5222
hostname: xmpp.domain.name.

2. Я надеюсь вы уже определились где будут лежать ваши юзвери и заранее создали пустую базу (в моем случае -- локальная база MS SQL "xmpp"), тогда приступаем к установке самого оперфаера, далее буду писать меньше и в основном показывать скринами:
Устанавливаем сам опенфаер, запускаем и идем в браузере по адресу
xmpp.domain.name:9090 Далее по скринам:



Поправочка, нужно вписать просто "domain"




Где: localhost -- путь к серверу, где лежит база скуля, xmpp -- имя ранее созданной базы, sa -- логин/пароль пользователя к БАЗЕ ДАННЫХ

 

Где: ad.domain.name -- полное имя/ip контроллера домена 
DC=domain,DC=name -- имя домена, где будут браться юзвери (здесь можно было бы еще указать конкретную группу, вида: CN=Users, но я этого делать не стал, ибо позднее будет фильтр которым можно всех отфильтровать)
Administrator DN, где CN -- юзверь "as", который лежит в группе "Users", домена... и его пароль, доменный.
Далее жмем Test settings и на выходе ложно быть так:
Жмем сейв.. И получаем страницу с фильтрами для юзверей, тут я вписал:
(&(objectCategory=person)(objectClass=user))

 Жмем тест и видим несколько рандомных пользователей из АДа)



Далее есть фильтры для групп, там я ничего не менял:
 Добавляем админа для опенфаера и с установкой покончено:




3. Патчим openfire для прозрачной авторизации (частично взято отсюда)

Останавливаем openfire и погнали:
Для начала выкачиваем сам патч прозрачной авторизации, либо с сайта разработчика либо с зеркала. распаковываем, далее все по пунктам: 
3.1 Скопировать файл SaslSspi.dll из папки install/bin/ и положить его в папку openfire/bin/ 
3.2. Скопировать файл sasl-sspi.jar из папки install/lib/ и положить его в папку openfire/lib/ 
3.3 Скопировать файл saslmechanisms.jar из папки install/plugins/ и положить его в папку openfire/plugins/ 
3.4. Скопировать содержимое файла openfire-patch.xml из папки install/conf/ в файл openfire.xml в папке openfire/conf/ (обратите внимание, что скопировав содержимое его нужно подправить, кроме того, копируем все кроме тегов "<jive></jive>" и вставляем в конфиг именно между ними, иначе получим сброшенные настройки опенфаера и вам придется вновь выполнять пункт 2), а именно:  
<sasl>
<mechs>ANONYMOUS,PLAIN,DIGEST-MD5,CRAM-MD5,NTLM</mechs>
<!-- если у вас один домен отредактируйте и оставьте только следующую строку, у меня почему-то взлетело исключительно с DOMAIN, если добавить .NAME -- прозрачной авторизации НЕ будет -->
<realm>DOMAIN</realm>
<!-- или если у вас их несколько -- редактируем следующую а предыдущую удаляем -->
<approvedRealms>MYNTDOMAIN1,MYNTDOMAIN2</approvedRealms>
</sasl>
<provider>
<!--
If you're using an external authentication provider like LDAP, or Custom Database,
then you will already have a <provider> section. Make sure this is added to it.
Do not remove the existing <auth> section as that is still required.
-->
<authorization>
<classList>org.jivesoftware.openfire.sasl.StrictAuthorizationPolicy org.jivesoftware.openfire.sasl.DefaultAuthorizationPolicy</classList>
<!-- other options: null, LdapAuthorizationProvider, UnixK5LoginProvider, Strict and Lazy-->
</authorization>
</provider>

В итоге, мой файл openfire.xml выглядит так, правда после первого запуска он часть конфигов подтирает, не пугайтесь:

<?xml version="1.0" encoding="UTF-8"?>

<!--
This file stores bootstrap properties needed by Openfire.
Property names must be in the format: "prop.name.is.blah=value"
That will be stored as:
<prop>
<name>
<is>
<blah>value</blah>
</is>
</name>
</prop>

Most properties are stored in the Openfire database. A
property viewer and editor is included in the admin console.
-->
<!-- root element, all properties must be under this element -->
<jive>
<sasl>
<mechs>ANONYMOUS,PLAIN,DIGEST-MD5,CRAM-MD5,NTLM</mechs>
<realm>DOMAIN</realm>
</sasl>
<provider>
<!--
If you're using an external authentication provider like LDAP, or Custom Database,
then you will already have a <provider> section. Make sure this is added to it.
Do not remove the existing <auth> section as that is still required.
-->
<authorization>
<classList>org.jivesoftware.openfire.sasl.StrictAuthorizationPolicy org.jivesoftware.openfire.sasl.DefaultAuthorizationPolicy</classList>
<!-- other options: null, LdapAuthorizationProvider, UnixK5LoginProvider, Strict and Lazy-->
</authorization>
</provider>
<adminConsole>
<!-- Disable either port by setting the value to -1 -->
<port>9090</port>
<securePort>9091</securePort>
</adminConsole>
<locale>en</locale>
<!-- Network settings. By default, Openfire will bind to all network interfaces.
Alternatively, you can specify a specific network interfaces that the server
will listen on. For example, 127.0.0.1. This setting is generally only useful
on multi-homed servers. -->
<!--
<network>
<interface></interface>
</network>
-->
<connectionProvider>
<className>org.jivesoftware.database.DefaultConnectionProvider</className>
</connectionProvider>
<database>
<defaultProvider>
<driver>net.sourceforge.jtds.jdbc.Driver</driver>
<serverURL>jdbc:jtds:sqlserver://localhost/xmpp;appName=jive</serverURL>
<username>sa</username>
<password>password</password>
<testSQL>select 1</testSQL>
<testBeforeUse>true</testBeforeUse>
<testAfterUse>true</testAfterUse>
<minConnections>5</minConnections>
<maxConnections>25</maxConnections>
<connectionTimeout>1.0</connectionTimeout>
</defaultProvider>
</database>
<setup>true</setup>
</jive>
  

3.5 В файле openfire\jre\lib\security\java.security После примерно 54 строки:
security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=com.sun.net.ssl.internal.ssl.Provider
security.provider.4=com.sun.crypto.provider.SunJCE
security.provider.5=sun.security.jgss.SunProvider
security.provider.6=com.sun.security.sasl.Provider
security.provider.7=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.8=sun.security.smartcardio.SunPCSC
security.provider.9=sun.security.mscapi.SunMSCAPI

Дописываем:

security.provider.10=net.za.darkskies.security.sasl.SSPIProvider

Сохраняем, запускаем опенфаер, устанавливаем на юзверьскую машину пандион, в конфиге набиваем:




И вуаля, текущий юзверь из АДа успешно логинится в наш жаббер.

4. Если все взлетело, все свистит и пердит, родстеры видны, юзвери довольны -- облегчаем себе жизнь, и устанавливаем openfire как сервис винды:
Win+R, cmd
cd "C:\Program Files (x86)\Openfire\bin"
openfire-service.exe /install

5. Довльный админ идет к шефу показывать новые ништяки и вымогать премию.

Еще раз, зеркало с архивом openfire + патч для прозрачной авторизации: жмяк.





Комментариев нет:

Отправить комментарий