freebsd 12 ejabberd 19 с авторизацией в Active Directory

Установка

Стандартно, из портов. Возможно во время  установки зависимостей, какие-то пакеты(например llvm80) ругнутся на отсутствие Python 3.6(хотя он и стоит, но по-умолчанию видит версию 2.7),  тогда помогло установка этих пакетов отдельно(также из портов).

SSL-сертификат для ejabberd

ВведениеДля получения SSL-сертификата для сервера ejabberd нужно несколько вещей:

  • Создать запрос на подпись сертификата — Certificate Signing Request (CSR) и приватный ключ,
  • Передать запрос на подпись сертификата в удостоверяющий центр, дать ему подписать его и забрать оттуда готовый сертификат.
  • Объединить сертификат, приватный ключ (и цепочку сертификатов) в PEM-файл, совместимый с ejabberd,
  • Установить сертификат в ejabberd.

При помощи сертификата можно защитить XMPP-подключения и содержимое переговоров. Таким образом другим становится значительно сложнее прослушивать переговоры. В сочетании с включенным протоколом OTR это позволит создать сверхзащищённый канал для переговоров.

Создание запроса на подпись сертификата

ВАРИАНТ 1. Платный

Создадим каталог для хранения всех необходимых файлов и перейдём в него:

mkdir -p ~/Certificates/xmpp
cd ~/Certificates/xmpp

Теперь воспользуемся OpenSSL для создания приватного ключа и запроса на подпись сертификата — CSR. При помощи первой команды это можно сделать интерактивно, а при помощи второй — не интерактивно. Убедитесь, что задали правильное значение в поле Общее имя — Common Name (CN). В нём должен быть указан URL XMPP-сервера:

Интерактивная команда:

openssl req -nodes -newkey rsa:2048 -keyout private.key -out CSR.csr

Не интерактивная команда:

openssl req -nodes -newkey rsa:2048 -keyout private.key -out CSR.csr -subj "/C=NL/ST=State/L=City/O=Company Name/OU=Department/CN=chat.example.org"

В результате работы команды появятся два файла: CSR.csr и private.key. Теперь нужно передать запрос на подпись сертификата — CSR в удостоверяющий центр. Это может быть любой удостоверяющий центр. У меня есть успешный опыт использования Xolphin, но это могут быть другие удостоверяющие центры, например, Digicert и Verisign.

Как только вы передадите запрос на подпись сертификата и получите сертификат, можно продолжать дальше.

Вариант II. Самоподписаный

Создаем наше CA.
Создаём корневой ключ
openssl genrsa -out myCA.key 2048

Создаём корневой сертификат.
openssl req -x509 -new -key myCA.key -days 10000 -out myCA.crt

Здесь попросит заполнить несколько полей. Отвечать на вопросы тут можно как душе угодно. Главное поле — <<Common Name>> — вводим имя(FQDN)  нашего домена(сервера). Оно используется для сопоставления сервера. Помещение в это поле чего-либо кроме этого имени приведет к созданию бесполезного сертификата. 10000 дней — срок его годности.

Все! Теперь мы можем создавать сертификаты для наших серверов и устанавливать корневой сертификат на наши клиентские машины.

Создаем сертификат подписаный нашим СА

Генерируем ключ.
openssl genrsa -out im.key 2048

Создаем запрос на сертификат.
openssl req -new -key im.key -out im.csr

* Тут также важно правильно указать имя сервера в поле Common Name

Подписываем запрос на сертификат нашим корневым сертификатом.
openssl x509 -req -in im.csr -CA myCA.crt -CAkey myCA.key -CAcreateserial -out im.crt -days 5000

Теперь на клиенты нужно установить корневой сертификат myCA.crt.

myCA.crt — можно давать друзьям, устанавливать, копировать не сервера, выкладывать в публичный доступ
rootCA.key — следует держать в тайне. доллжны быть помещены в каталог, доступный для чтения только root, желательно внутри /etc. Права на каталог можно изменить chmod с параметрами 0700.

Создание сертификата для ejabberd

Создаем папку для хранения сертификатов джаббера

mkdir /usr/local/etc/ejabberd/certs

cd /usr/local/etc/ejabberd/certs

Кладем сюда наш приватный ключ(im.key) и сертификат(im.crt). Теперь нужно объединить эти файлы в один файл .pem, который уже можно «скормить» ejabberd

cat im.key >> im.pem

cat im.crt >> im.pem

Если не самоподписаный сертификат, то добавим ключи сначала наши и туда же Цепочку сертификатов

cat private.key >> im.pem
cat certificate.pem >> im.pem
cat chain-1.pem >> im.pem
cat chain-2.pem >> im.pem

Настройка

Обращайте внимание на отступы в файле yml играют роль. Табуляцией не пользоваться.

В файле конфигурации yml в секции сертификата, прописываем наш:

certfiles:
  - "/usr/local/etc/ejabberd/certs/im.pem"

Метод аутентификации пользователей

В том же файле конфигурации с расширением “.yml” или “.yaml” прописываем метод проверки пользователей. Примеры:

  • Домен example.net использует внутреннюю аутетентификацию, while домен example.com использует LDAP сервер localhost для проверки пользователей:
    host_config:
      "example.net":
        auth_method: internal
      "example.com":
        auth_method: ldap
        ldap_servers:
          - "localhost"
        ldap_uids:
          - "uid"
        ldap_rootdn: "dc=localdomain"
        ldap_rootdn: "dc=example,dc=com"
        ldap_password: ""
    
  • конфигурация посложнее, — SQL для внутренней(example.net) авторизации и несколько LDAP серверов, один localhost и второй otherhost:
  • host_config:
      "example.net":
        auth_method: sql
        sql_type: odbc
        sql_server: "DSN=ejabberd;UID=ejabberd;PWD=ejabberd"
      "example.com":
        auth_method: ldap
        ldap_servers:
          - "localhost"
          - "otherhost"
        ldap_uids:
          - "uid"
        ldap_rootdn: "dc=localdomain"
        ldap_rootdn: "dc=example,dc=com"
        ldap_password: ""
    

Что такое CN, OU, DC?

Из RFC2253 (UTF-8 строковое представление отличительных имен):

String  X.500 AttributeType
------------------------------
CN      commonName
L       localityName
ST      stateOrProvinceName
O       organizationName
OU      organizationalUnitName
C       countryName
STREET  streetAddress
DC      domainComponent
UID     userid

Также необходимо создать учетку в AD которая имеет права на чтение LDAP базы домена my.domain.local, в моем случае это — CN=for_jabber,OU=it,DC=my,DC=domain,DC=local

Интерактивный запуск ejabberd, для отладки(показывает ошибки):

ejabberdctl live

 

 

Источники:

Настройка интеграции ejabberd 18.12.1 с Active Directory на Debian 9. Настройка SSO (Single Sign On) авторизации.


https://habr.com/ru/post/192446/
https://www.freebsd.org/doc/ru/books/handbook/openssl.html
https://docs.ejabberd.im/admin/configuration/?kp=1&k1=-1
http://vladimir-stupin.blogspot.com/2017/09/ssl-ejabberd.html

Ejabberd на FreeBSD с авторизацией в Active Directory

OpenVPN 2.4.5 Easy-RSA FreeBSD 11.1

Памятка

  1. Используй в первую очередь руководства разработчиков, даже если они отпугивают своей скромностью оформления. Это сбережет тебе много времени.
  2. Используй за основу файлы конфигурации по-умолчанию из установленных пакетов, благо они идут с пакетами в комплекте. Даже, если придется потратить время на осознание их назначений — «Лучше пару часов потерять, потом за пять минут долететь».

Установка OpenVPN на FreeBSD

Читать далее «OpenVPN 2.4.5 Easy-RSA FreeBSD 11.1»

OpenSSL дополнительные настройки

После установки OpenSSL, перед скачиванием пакетов выдается сообщение(предупреждение):

/!\ WARNING /!\

You have security/openssl installed but do not have
DEFAULT_VERSIONS+=ssl=openssl set in your make.conf

Для исправления добавляем нужную запись в make.conf командой:

echo 'DEFAULT_VERSIONS+=ssl=openssl' >> /etc/make.conf

Читать далее «OpenSSL дополнительные настройки»