Basic Configuration | ejabberd Docs

Basic Configuration | ejabberd Docs Сертификаты

Access rights

The access_rules
option is used to allow or deny access to different services. The syntax
is:

access_rules: { AccessName: { – allow|deny: ACLRule|ACLDefinition } }

Each definition may contain arbitrary number of – allow or – deny
sections, and each section can contain any number of acl rules
(as defined in previous section, it recognizes
one additional rule acl: RuleName that matches when acl rule
named RuleName matches). If no rule or definition is defined, the
rule all is applied.

Access rules

This section describes new ACL syntax introduced in ejabberd
16.06. For old access rule and ACL syntax documentation, please refer
to
configuration document archive

Acme implementation details

In nutshell, certification requests are performed in two phases. Firstly, ejabberd
creates an account at the ACME server. That is an EC private key. Secondly,
a certificate is requested. In the case of a revocation, no account is
used – only a certificate in question is needed.

$ tree /var/lib/ejabberd
/var/lib/ejabberd
├── acme
│   ├── account.key
│   └── live
│       ├── 251ce180d964e98a2f18b65504df2ab7c55943e2
│       └── 93816a8429ebbaa75574eb3f59d4a806b67d6917
...

Here, account.key is the EC private key used to identify the ACME account.
You can inspect its content using openssl command:

$ openssl ec -text -noout -in /var/lib/ejabberd/acme/account.key

Obtained certificates are stored under acme/live directory.
You can inspect any of the certificates using openssl command as well:

$ openssl x509 -text -noout -in /var/lib/ejabberd/acme/live/251ce180d964e98a2f18b65504df2ab7c55943e2

In the case of errors, you can delete the whole acme directory – ejabberd
will recreate its content on next certification request. However, don’t delete it
too frequently – usually there is a rate limit on the number of accounts and
certificates an ACME server creates. In particular, for Let’s Encrypt
the limits are described here.

Default language

The language option
defines the default language of server strings
that can be seen by XMPP clients. If a XMPP client does not support
xml:lang, ejabberd uses the language specified in this option.

The option syntax is:

language: Language: The default value is en. In order to take effect there must be a
translation file Language.msg in ejabberd’s msgs directory.

For example, to set Russian as default language:

language: ru

The page Internationalization and Localization
provides more details.

Ejabberd ad shared roster

Доброго времени суток.

Для начала что мы имеем: небольшую сеть на ~150 машин, в основном с ОС Windows XP, домен, поднятый естественно на Windows 2k3 и нормальную машинку(или сервер) на которой установлен gentoo linux (опционально MySQL).

Задача: Установить jabber сервер, сделать общий ростер, с группами из AD, прикрепить к нему icq гейт и поставить jabber клиенты на рабочие машины.

Установка ejabberd

Прежде чем начать ставить ejabberd надо удостовериться, что у нас есть все то ему может потребоваться него, а именно:

Сам ejabberd мы будем собирать из svn, так как в стабильной версии поставить shared roster у меня не получилось. Для этого делаем:

user$ svn checkout svn.process-one.net/ejabberd

Собираем его, только не забываем включить в параметр сборки –enable-odbc

user$ cd ejabberd/trunk/src/
user$ ./configure --enable-odbc
user$ make
user$ sudo make install

Если не каких ошибок не по выскакивало идем дальше, следующим шагом мы наверное соберем модуль для shared roster. Сами исходники модуля лежат пока здесь mod_shared_roster_ldap.erl

user$ wget -c www.ejabberd.im/files/contributions/mod_shared_roster_ldap.erl
user$ erlc -I ejabberd/trunk/src/ mod_shared_roster_ldap.erl

Если выпадут подобные сообщения, можно не беспокоиться

./mod_shared_roster_ldap.erl:19: Warning: behaviour gen_mod undefined
./mod_shared_roster_ldap.erl:289: Warning: variable 'User' is unused

Ну и копируем новый модуль в кучу к остальным

user$ sudo cp mod_shared_roster_ldap.beam /lib/ejabberd/ebin/

Настройка ejabberd

«Переходим» в рута (sudo -i || su) и лезем в /etc/ejabberd/, там нас интересует файл под названием ejabberd.cfg, открываем его своим любимым редактором и начинаем править. Привожу свой конфиг, с небольшими комментариями, которые будут экранированы %%:

override_global.
override_local.
override_acls.

{loglevel, 4}.

%% Вставляем логин админа, которому будут приходить все системные
сообщения, не забываем указывать логин в формате admin@domain %%
{watchdog_admins, [“admin@domain”]}.
%% Имя хоста, на котором поднят ejabberd, в моем случае я его обозвал
cartman. Для тех кто не знает как посмотреть имя своего хоста hostname %%
{hosts, [“cartman”]}.
{listen,
[
%% Порт на который будут подключаться клиенты %%
{5222, ejabberd_c2s, [
{access, c2s},
{shaper, c2s_shaper},
{max_stanza_size, 65536}
]},
%% Порт на который будут подключаться клиенты, но весь трфик будет шифроваться. SSL %%
{5223, ejabberd_c2s, [
{access, c2s},
{shaper, c2s_shaper},
%% Путь к нашему сертификату, который мы создадим позже %%
{certfile, “/etc/ejabberd/cert/ejabberd.pem”}, tls,
{max_stanza_size, 65536}
]},
%% Для обмена информацией с другими jabber серверами %%
{5269, ejabberd_s2s_in, [
{shaper, s2s_shaper},
{max_stanza_size, 131072}
]},
%% Порт к которому будут прикручены различные гейты, в моем случае это pyucq-t %%
{8888, ejabberd_service, [
{access, all},
{shaper_rule, fast},
{ip, {127, 0, 0, 1}},
%% Добовляем имя к хосту %%
{hosts, [“icq.cartman”],
%% Пароль, такой же какой и указан в конфиге pyicq-t %%
[{password, “123456”}]}
]},

%% Веб морда к ejabberd, хотя она мне что то не понравилась %%
{5280, ejabberd_http, [
http_poll,
web_admin
]}

]}.

%% Выбираем метод авторизации ldap %%
{auth_method, ldap}.
%% Имя домена, в моем случаем это domain.local %%
{ldap_servers, [“domain.local”]}.
{ldap_uids, [{“sAMAccountName”}]}.
{ldap_base, “dc=domain,dc=local”}.
%% Прописываем путь к пользователю с администраторскими правами, в моем случае это пользователь root, который “лежит” в “папке” Users, по средствам ldap синтаксиса(или как это называется?) %%
{ldap_rootdn, “cn=root,cn=Users,dc=domain,dc=local”}.
%% Его пароль %%
{ldap_password, “123456”}.
%% Шайпер для левого трафика, который идет с других jabber сервером(как я понял) %%
{shaper, normal, {maxrate, 10000}}.
{shaper, fast, {maxrate, 500000}}.
%% Добавляем админа, в моем случае это admin %%
{acl, admin, {user, “admin”, “cartman”}}.
%% И еще одно, коллеге например %%
{acl, admin, {user, “admin2”, “cartman”}}.
{acl, local, {user_regexp, “”}}.
{access, max_user_sessions, [{10, all}]}.
{access, local, [{allow, local}]}.
%% Так как джаббер сервер внутрисетевой, и пока находиться только в тестовом режиме, мы запрещаем общение с другими jabber серверами %%
{access, c2s, [{deny, blocked},
{allow, all}]}.
{access, c2s_shaper, [{none, admin},
{normal, all}]}.
{access, s2s_shaper, [{fast, all}]}.
{access, announce, [{allow, admin}]}.
{access, configure, [{allow, admin}]}.
{access, muc_admin, [{allow, admin}]}.
{access, muc, [{allow, all}]}.
{access, pubsub_createnode, [{allow, all}]}.
%% Запрещаем регистрацию, так как регистрация происходить по средствам AD %%
{access, register, [{deny, all}]}.

Про сертификаты:  Mini-MBA «Управление малым бизнесом» — программы и курсы МБА-образования

{language, “ru”}.

{modules,
[
{mod_adhoc, []},
{mod_announce, [{access, announce}]}, % recommends mod_adhoc
{mod_caps, []},
{mod_configure,[]}, % requires mod_adhoc
{mod_disco, []},
{mod_echo, [{host, “echo.localhost”}]},
{mod_last, []},
{mod_muc, [
{access, muc},
{access_create, muc},
{access_persistent, muc},
{access_admin, muc_admin}
]},
%% Точно не помню, если этот модуль в обычной сборки, но если что, его можно выключить. %%
{mod_muc_log, [
{access, muc},
{access_create, muc},
{access_admin, muc_admin},
{access_log, muc},
{outdir, “/var/log/muc_log”},
{top_link, {“http://cartman/”, “JABBER SERVER”}}
]},
{mod_offline, []},
{mod_privacy, []},
{mod_private, []},
{mod_pubsub, [ % requires mod_caps
{access_createnode, pubsub_createnode},
{plugins, [“default”, “pep”]}
]},
{mod_register, [
{welcome_message, {“Welcome”,
“Hi! Welcome to this Jabber server.”}},
%% В принципе, так как мы закрыли регистрацию, это не нужно, но все же, в этой опции указывается пользователь, которому будут приходить извещения о новых зарегистрированных пользователей. %%
{registration_watchers, [“admin@cartman”]},
{access, register}
]},
{mod_roster, []},
{mod_stats, []},
{mod_time, []},
%% Типо поиск по vcard в AD, но у меня он чего то не заработал %%
{mod_vcard_ldap,
[{host, “users.cartman”},
{ldap_vcard_map,
[{“NICKNAME”, “%u”, []},
{“GIVEN”, “%s”, [“givenName”]},
{“MIDDLE”, “%s”, [“initials”]},
{“FAMILY”, “%s”, [“sn”]},
{“FN”, “%s”, [“displayName”]},
{“EMAIL”, “%s”, [“mail”]},
{“ORGNAME”, “%s”, [“company”]},
{“ORGUNIT”, “%s”, [“department”]},
{“CTRY”, “%s”, [“c”]},
{“LOCALITY”, “%s”, [“l”]},
{“STREET”, “%s”, [“streetAddress”]},
{“REGION”, “%s”, [“st”]},
{“PCODE”, “%s”, [“postalCode”]},
{“TITLE”, “%s”, [“title”]},
{“URL”, “%s”, [“wWWHomePage”]},
{“DESC”, “%s”, [“description”]},
{“TEL”, “%s”, [“telephoneNumber”]}]},
{ldap_search_fields,
[{“User”, “%u”},
{“Name”, “givenName”},
{“Family Name”, “sn”},
{“Email”, “mail”},
{“Phone”, “telephoneNumber”}
]},
{ldap_search_reported,
[{“Full Name”, “FN”},
{“Nickname”, “NICKNAME”},
{“Email”, “EMAIL”}]}
]},
%% Сам shared_roster. В общем группы он будет создавать по department, в профилях пользователя в AD %%
{mod_shared_roster_ldap,
[{ldap_groupattr,”department”},
{ldap_groupdesc,”department”},
%% Так как джаббер работает только в тестовом режиме, да и не всем пользователям нужен джаббер, мы создали в AD группу JabberUsers, которая находить в “папке” Users. И тех кому джаббер нужен, просто добавили их в группу JabberUsers %%
{ldap_rfilter, “(&(memberOf=CN=JabberUsers,CN=Users,DC=klondike,DC=local) (|(userAccountControl=66050)(userAccountControl=66048)))”},
{ldap_memberattr,”sAMAccountName”},
{ldap_userdesc,”cn”}
]
},
{mod_version, []}
]}.

В прицепи все готово, только давайте еще добавим ssl сертификаты(бац пригодиться)

mkdir /etc/ejabberd/cert
cd /etc/ejabberd/cert
openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout privkey.pem -out server.pem
openssl rsa -in privkey.pem -out privkey.pem
cat privkey.pem >> ejabberd.pem
rm privkey.pem

Установка и настройка pyicq-t

Его из snv||svc||git мы собирать не будем, так как в gentoo он есть в поратах, и довольно рабочий (главное не забыть включить USE=«webinterface», хотя кому как нравиться) просто делаем:

user$ sudo emerge net-im/pyicq-t

Все просто далее правим его(ее) конгфиг который у меня расположился в **/etc/jabber/pyicq-t.xml Вот как выглядит мой:

<pyicqt>
<jid>icq.cartman</jid>
<spooldir>/var/spool/jabber</spooldir>
<pid>/var/run/jabber/pyicq-t.pid</pid>
<mainServer>127.0.0.1</mainServer>
<mainServerJID>cartman</mainServerJID>
<website>http://cartman/</website>
<supportJid>admin@cartman</supportJid>
<port>8888</port>
<webport>12345</webport>
<secret>123456</secret>
<lang>ru</lang>
<encoding>cp-1251</encoding>
<icqServer>login.icq.com</icqServer>
<icqPort>5190</icqPort>
<usemd5auth/>
<sessionGreeting>Welcome to icq gate of Cartman server</sessionGreeting>
<enableShutdownMessage/>
<customShutdownMessage>Sorry but icq gete will be shutdown.</customShutdownMessage>
<registerMessage>You have succsefull registed</registerMessage>
<crossChat/>
<enableAutoInvite/>
<xstatusessupport/>
<detectunicode>1</detectunicode>
<admins>
<jid>admin@cartman</jid>
</admins>
<reactor>epoll</reactor>
<!--<xdbDriver>xmlfiles</xdbDriver>-->
<xdbDriver>mysql</xdbDriver>
<xdbDriver_mysql>
<username>pyicqt</username>
<password>12345678</password>
<database>pyicqt</database>
<server>localhost</server>
<format>encrypted</format>
</xdbDriver_mysql>
<avatarsOnlyOnChat/>
</pyicqt>

Комментировать его наверное не буду, в самом конфиге комментарии и так очень
хорошие, единственное, что замечу это, 8888 — это
порт по которому он прикручивается к джаберу, мы кстати его в
конфиге джаббера прописали, 123456 — это пароль для доступа гейта к джабберу, — мы убераем сохранение инфы из *.xml файлов и переносим ее в MySQL, ниже покажу как.

Как ставить MySQL и запускать его я рассказывать не буду, да и как создать пользователя и бд тоже. В общем, у нас уже есть рабочая MySQL с базой pyicqt, с полными правами у пользователя pyicqt, который логиниться по средствам пароля 12345678. Дальше, для гентуводов, лезем в папку /usr/lib/python2.5/site-packages/pyicq-t/tools/ и делаем слудующие

user$ mysql -u pyicqt -D pyicqt -p
mysql> . db-setup.mysql

Ну что, попробуем запустить все это? Запускам сначала ejabberd, мы будем это делать через ejabberdctl и сразу запусткаем pyicq-t

user$ sudo ejabberdctl start
user$ sudo /etc/init.d/pyicq-t start

И начинаем смотреть логи джаббера:

user$ sudo tail -F /var/log/ejabberd/ejabberd.log

Если не каких ужасных ерроров не возникает — все гуд. Начинаем настраивать клиенты.

Настройка и установка клиентов

В принципе пощупал много гуишных клиентов(сам та давно пользуюсь mcabber’ом), и
решил, что на клиентовские машины, которые оборудованные ОС Windows XP буду
ставить либо PSI или Spark, так как PSI более развивающийся и это только
джаббер клиент а Spark единственный клиент, который имет MSI пакет. Какой
будете ставить вы, решайте сами, я лично покажу как я их ставил, естественно через политики в АД.

PSI

Что в принципе не есть хорошо, я воспользовался Python что бы перебить конфиги
на клиентовских машинах, так что он должен быть установлен у каждого
(делается это легко — MSI пакет он имеет, и ставить на ура, через AD). Далее просто ставим себе PSI, добавляем свою учетку, проверяем как все работает, как группы появились, в которых оффлайн пользователи висят, настраиваем PSI. Когда все сделаете, просто закройте его. Теперь лезем в *C:Documents and Settings%USERNAME%PsiDataprofilesdefaultaccounts.xml и правим его, ищем строку admin@cartman (где то в коце) (admin — это учетка под который ты вошел в джаббер, и твоя учетка в AD) и заменяем admin на QWERTYUIOP, сохраняем, и переименовываем его в accounts_old. Следующим шагом создаем шару, с правами на чтение у всех, у меня допустим она будет \server4psi_install и туда скидываем C:Documents and Settings%USERNAME%PsiData и C:Program FilesPsi (права на чтение должны быть у всех). Лезем в \server4psi_installPsiDataprofilesdefault и копируем туда питоновский скрипт с именем psi_settings.py, а вот и он:

Про сертификаты:  Маркировка стали: расшифровка с таблицей, классификация, от чего зависит, как маркируются конструкционные металлы, сплавы, обозначения, примеры онлайн

  1. #!/usr/env/bin python
  2. # -*- coding: utf-8 -*-
  3. import os
  4. import re
  5. import sys
  6. username = os.getenv('USERNAME')
  7. find_accountname = re.compile('^s{0,3}<jid type="QString" >(. )@cartman</jid>$')
  8. change_username = re.compile('QWERTYUIOP')
  9. fr = open('accounts_old', 'r')
  10. fw = open('accounts.xml', 'w ')
  11. for i in fr.readlines():
  12.   if find_accountname.search(i):
  13.     i = change_username.sub(username, i)
  14.   fw.write(i)
  15. fr.close()
  16. fw.close()

скрипт убогий, писал на скорую руку

Так, как большинство наших юзверей работают с ограниченными правами, решил что запускать PSI они будут из своей директории которая C:Documents and Settings%USERNAME%*. Лезем в оснастку в Group Policy -> Конфигурация Пользователя -> Конфигурация Windows -> Сценарии (вход/выход из системы) и выбираем Вход в Систему. Нажимаем показать файлы и создаем файлик с названием *copy_psi.cmd и изменяем его, содержимое:

@Echo off
IF EXIST "C:Python25python.exe" (
IF NOT EXIST "C:Documents and Settings%USERNAME%Psipsi.exe" (
xcopy dcSoftezotrankpsi_ad* "C:Documents and Settings%USERNAME%" /E /C
cd "C:Documents and Settings%USERNAME%PsiDataprofilesdefault"
python psi_settings.py
reg add HKCUSoftwareMicrosoftWindowsCurrentVersionRun /v psi_run /d "C:Documents and Settings%USERNAME%Psipsi.exe"
)
)

Ну вроде и все, закрываем, добавляем в GP и идем курить.

Spark.

Что сразу не понравилось, так это то что он написан на Java, которая очень любит ОЗУ, зато очень нацелен на корпоративный сегмент рынка, и наверное очень хорошо работает с OpenFire(в принципе и то и то детище одних людей), особенно с платной версией. Что мне больше всего понравилась так это встроенная фича со скриншотом. Ставить ее вообще легко качаем с spark и по средствам AD ставим.

Некторые примечания:

Веб морда у Ежа будет располагаться по адресу cartman:5280/admin логин
и пароль — это admin которого мы прописали в ejabberd.cfg тоесть admin@cartman

Веб морда pyicq-t cartman:12345

Host names

ejabberd supports managing several independent XMPP domains on a
single ejabberd instance, using a feature called virtual hosting.

The option hosts
defines a list containing one or more domains that
ejabberd will serve.

Of course, the hosts list can contain just one domain if you do not
want to host multiple XMPP domains on the same instance.

Examples:

Logging

ejabberd configuration can help a lot by having the right amount of logging set up.

There are several toplevel options to configure logging:

The values in default configuration file are:

log_rotate_size: 10485760
log_rotate_count: 1

For example:

hide_sensitive_log_data: false

Setting up acme

In ejabberd, ACME is configured using the
acme
top-level option, check there the available options and example configuration.

Several connections to a remote xmpp server with acl

The special access max_s2s_connections specifies how many simultaneous
S2S connections can be established to a specific remote XMPP server. The
default value is 1. There’s also available the access
max_s2s_connections_per_node.

The syntax is:

{ max_s2s_connections: { ACLName: MaxNumber } }

Examples:

  • Allow up to 3 connections with each remote server:

    shaper_rules:
      max_s2s_connections: 3
    

Shapers

Shapers enable you to limit connection traffic. The basic syntax is:

shaper: { ShaperName: Rate }

where Rate stands for the maximum allowed incoming rate in bytes per
second. When a connection exceeds this limit, ejabberd stops reading
from the socket until the average rate is again below the allowed
maximum.

This example defines a shaper with name normal that limits traffic speed to
1,000bytes/second, and another shaper with name fast that limits traffic
speed to 50,000bytes/second:

shaper:
  normal: 1000
  fast: 50000

You can use the full syntax to set the BurstSize too:

shaper: { ShaperName: { rate: Rate, burst_size: BurstSize}}

With BurstSize you can allow client to send more data, but its amount can be
clamped reasonably. Each connection is allowed to send BurstSize of data
before processing is delayed, and that amount is replenished by Rate each
second, but never more than what BurstSize allows.

In this example, the normal shaper has Rate set to 1000
and the BurstSize takes that same value.
The not_normal shaper has the same Rate that before,
and sets a higher BurstSize:

shaper:
  normal: 1000
  not_normal:
    rate: 1000
    burst_size: 20000

Virtual hosting

When managing several XMPP domains in a single instance, those domains
are truly independent. It means they can even have different
configuration parameters.

Options can be defined separately for every virtual host using the
host_config option.

Examples:

To define specific ejabberd modules in a virtual host, you can define
the global modules option with the common modules, and later add
specific modules to certain virtual hosts. To accomplish that, instead
of defining each option in host_config
use append_host_config
with the same syntax.

In this example three virtual hosts have some similar modules, but there
are also other different modules for some specific virtual hosts:

## This ejabberd server has three vhosts:
hosts:
  - one.example.org
  - two.example.org
  - three.example.org

## Configuration of modules that are common to all vhosts
modules:
  mod_roster:    {}
  mod_configure: {}
  mod_disco:     {}
  mod_private:   {}
  mod_time:      {}
  mod_last:      {}
  mod_version:   {}

append_host_config:
  ## Add some modules to vhost one:
  one.example.org:
    modules:
      mod_muc:
        host: conference.one.example.org
      mod_ping: {}
  ## Add a module just to vhost two:
  two.example.org:
    modules:
      mod_muc:
        host: conference.two.example.org

Бесплатные ssl сертификаты и их установка в nginx postfix dovecot и ejabberd | linux для человеков!

Сейчас SSL сертификаты можно получить бесплатно и те кому интересна данная тема без труда найдут информацию о получении бесплатных сертификатов StartSSL. Есть хорошая статья по этому поводу на Хабре, поэтому я не буду останавливаться подробно на процессе получения самих ключей и сертификатов, а перейду сразу к процессингу настройки почтового сервера,веб сервера… для работы с SSL.

Итак. Подразумевается, что уже имеете секретный ключ и сертификат подписанный StartSSL. Сразу хочу сказать, что все ключи и сертификат нужно надежно сохранить как минимум до момента, когда вы убедились, что все сертификаты корректно работают на сервере, а лучше всего до окончания срока их действия (1 год).

Введу некоторые обозначения:

Скачать недостающие сертификаты можно здесь
Начнем с самого простого

Nginx

Сначала создадим файл сертификата который будет понимать nginx:

cat ssl.crt sub.class1.server.ca.pem ca.pem > /etc/ssl/nginx/nginx.crt
cp ssl_enc.key /etc/ssl/nginx/nginx.key

Далее очень рекомендую изучить мою небольшую заметку по сертификатам, потому как если не следовать инструкции описаной в ней – работать ничего не будет. Данное правило справедливо для всех сертификатов (dovecot,postfix,nginx,ejabberd)

Установим нужного владельца и права на ключи и сертификаты

chown -R root:root && chmod -R 400 /etc/ssl/nginx/nginx.*

Теперь настроим сам nginx путем добавления некоторых строк в конфиг. Добавлять нужно в директиву server

server {
                ssl on;
                ssl_certificate /etc/ssl/nginx/nginx.crt;
                ssl_certificate_key /etc/ssl/nginx/nginx.key;
                ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
                listen 443 ssl;

Показал только строки которые нужно добавить.
Проверяем валидность конфига:

nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

И стартуем сервер.
Теперь проверим работу всего этого:

openssl s_client -connect -CApath /etc/ssl/certs/ yourdomain.ru:443

Видим примерно такой листинг:

CONNECTED(00000003)
depth=2 C = IL, O = StartCom Ltd., 
OU = Secure Digital Certificate Signing, CN = StartCom Certification Authority
verify return:1
depth=1 C = IL, O = StartCom Ltd., 
OU = Secure Digital Certificate Signing, CN = StartCom Class 1 Primary Intermediate Server CA
verify return:1
depth=0 C = RU, CN = host.yourdomain.ru,
emailAddress = postmaster@yourdomain.ru
verify return:1

Если ошибок нет, то значит все работает как надо

Postfix

Создадим нужные файлы и для постфикса.

cp ssl.crt /etc/ssl/postfix/postfix.crt
cp ssl_enc.key /etc/ssl/postfix/postfix.key
cp ca.pem /etc/ssl/postfix

Сменим права и владельца файлов:

chown -R root:postfix /etc/ssl/postfix/*
chmod -R 400 /etc/ssl/postfix/*

Открываем конфиг постфикса

 nano -w /etc/postfix/main.cf

И добавляем в него следующее если еще не включено:

smtpd_tls_CAfile = /etc/ssl/postfix/ca.pem
smtpd_tls_cert_file = /etc/ssl/postfix/postfix.crt
smtpd_tls_key_file = /etc/ssl/postfix/postfix.key
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_tls_session_cache
smtpd_use_tls = yes
smtpd_tls_security_level = may
smtpd_tls_received_header = yes
smtpd_tls_loglevel = 0
smtpd_tls_auth_only = yes
smtp_tls_CAfile = /etc/ssl/postfix/ca.pem
smtp_tls_cert_file = /etc/ssl/postfix/postfix.crt
smtp_tls_key_file = /etc/ssl/postfix/postfix.key
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_tls_session_cache
smtp_use_tls = yes

Закрываем конфиг и переходим к Dovecot

Dovecot

Все делаем по аналогии:

cat ssl.crt sub.class1.server.ca.pem > /etc/ssl/dovecot/dovecot.crt
cp ssl_enc.key /etc/ssl/dovecot/dovecot.key

Установим права:

chown -R root:root /etc/ssl/dovecot/dovecot.*
chmod -R 400 /etc/ssl/dovecot/dovecot.*

Теперь откроем конфиг ssl dovecot

nano -w /etc/dovecot/conf.d/10-ssl.conf
ssl = yes
ssl_cert = /etc/ssl/dovecot/dovecot.crt
ssl_key = /etc/ssl/dovecot/dovecot.key
ssl_ca = /etc/ssl/dovecot/ca-bundle.pem

Рестартим постфикс и довкот, а потом проверяем работу сертификатов:

openssl s_client -CApath /etc/ssl/certs/ -connect hostname.domain.ru:25 -starttls smtp
openssl s_client -CApath /etc/ssl/certs/ -connect hostname.domain.ru:993

Опять же если ошибок нет – то все работает как надо.

Ejabberd

cat ssl.crt sub.class1.server.ca.pem ca.pem ssl_enc.key > /etc/ssl/ejabberd/jabber.crt

Сменим права и пользователя:

chown -R ejabberd:ejabberd /etc/ssl/ejabberd/jabber.crt
chmod 400 /etc/ssl/ejabberd/jabber.crt

Само собой chown делаем на того пользователя и группу от которого запускается Ejabberd. В моем случае (Debian 7) это ejabberd.
Теперь открываем конфиг и включаем tls на сервере ejabberd:

{certfile, "/etc/ssl/ejabberd/jabber.crt"}, starttls,
{s2s_use_starttls, optional}.
{s2s_certfile, "/etc/ssl/ejabberd/jabber.crt"}.

Не советую копировать отсюда куски конфига ejabberd – могут быть тяжелые последствия. Ищем соответствующие переменные в существующем конфиге.

На этом все, предложения и замечания в коментариях.

Ejabber и сертификат | памятка на будущее

В связи с внедрением шифрования в xmpp , я озаботился поменять шифровальную пару, сертификат и проверить свой сервак на соответствие “текущему моменту” так сказать.

Важно: в поле Subject DN значение CN должно равняться домену, а не имени сервака. Что принципиально отличается от https,  например. Этот так, на память.

Забавно, но у меня создалось впечатление, что возможная суть происходящего:

  • заставить людей покупать сертификаты. Не, конечно, пока можно удовольствоваться бесплатным, но принуждение завязываться на чью-то сертификацию… Чего-то попахивает кидаловом.
  • получить возможность отключить любой кусок xmpp пространства. У кого CA, тот ведь может и отозвать сертификат. И временно заблокировать. Счета ведь блокируют, а почему бы не отключить тех кто не согласен с единственно верными, скажем, демократическими ценностями.

Что меня смущает:

  • IM Observatory спокойно относится к алгоритмам шифрования, длине ключа. А вот за самоподписанный сертификат сразу следует “кидок” с “A” на “F” по их шкале европейских ценностей: “Certificate is not trusted, grade capped to F. Ignoring trust: A.” На алгоритмы наплевать, а вот пользоваться “правильным” CA это суперважно, да, да.
  • принуждение пользоваться сервисом (в данном случае – сертификацией) от “правильных” CA напрягает.
  •  хорошо, сейчас “зачистят” xmpp-пространство от “неправильных” сертификатов. Кто мешает потом также зачистить и от бесплатных? Или по какому ещё признаку. Какого … кучка коммерсантов решает, кто может передавать xmpp сообщения, а кто нет. Почту тоже отдадим “эффективным” менеджерам?
  • спешка. Ну, куда гнать?
  • зачем отключать тех, кто не перешел на шифрование? Ну, сделайте пометку на сообщения, которые проходили нешифрованным каналом.
  • сервера не готовы, клиенты не готовы, инструкций “кот наплакал”.
  • Нафига всё это? Не, модно, все дела. А кроме “пальцев”?
  • представьте – завтра запретили http. Остался только https…

Конспирология какая-то. Но, скажем, в ssmtp обошлись ведь без диктата производителей сертификатов. Что, теперь, вместо твиттерных, будут делать джабберные революции? В общем, что-то мне не нравится этот процесс…

jabber-grade

Прикольно, да?…

Acl definition

Access control in ejabberd is performed via Access Control Lists
(ACLs), using the acl option.
The declarations of ACLs in the configuration file have the
following syntax:

acl: { ACLName: { ACLType: ACLValue } }

ACLType: ACLValue can be one of the following:

all: Matches all JIDs. Example:

    acl:
      world: all

Оцените статью
Мой сертификат
Добавить комментарий