|
|
(не показано 26 промежуточных версий этого же участника) |
Строка 1: |
Строка 1: |
| | <center><small>'''Для просмотра содержимого Wiki с мобильного телефона Вы можете воспользоваться [[Карта Wiki|картой Wiki]] или [{{fullurl:{{FULLPAGENAME}}|mobileaction=toggle_view_mobile}} мобильной версией сайта]'''</small><br></center> |
| | __NOTOC__ |
| | {| class="standart" border=0 align=center width=100% |
| | |style="border:1px dashed #ddddf7; moz-border-radius:10px; border-radius:10px; webkit-border-radius:10px" colspan=6 bgcolor=#F7FBFF align=left|Современная структура общения в Internet очень развита и многогранна. Пользователю доступно множество видов общения, таких как чаты, почта, аудио и видео конференции, форумы, социальные сети и т.д. |
|
| |
|
| В этой статье приводится пример конфигурирования ejabberd с поддержкой актуальных и популярных функций. В качестве основы взят конфиг-файл с работающего сервера версии 21.12, а в качестве сертификатов используется Let's Encrypt - и все это установлено на Debian GNU/Linux. | | В нашем случае речь пойдет о Jabber - популярном свободном и открытом протоколе для общения посредством мгновенной отправки и получения текстовых сообщений в сети. |
|
| |
|
| Рассмотрим особенности данной конфигурации.
| | Так исторически сложилось, что приличное количество людей на территории ex-СССР осталось пользоваться ICQ, несмотря на то, что это устаревшая сеть с закрытым протоколом, владельцы которой ущемляют пользователей в правах посредством своих лицензионных соглашений. |
| | <center> |
| | Цель данного проекта - помощь как в переходе пользователей с ICQ на Jabber,<br> так и помощь новичкам в освоении Jabber.</center> |
| | |- |
| | |} |
|
| |
|
| == [[ru_wikipedia:DNS|DNS-записи]] == | | {|border=0 align=center width=100% |
| | | <!-- автор - nib952051, см. "Песочницу" за 2010-06-18 | http://chatlogs.linuxoid.in/linuxoid@conference.linuxoid.in/2010/06/18.html --> |
|
| |
|
| Хотя для базового варианта своего jabber-сервера вполне достаточно [[Регистрация доменного имени|бесплатного DynDNS-домена]], для полноценной конфигурации все же нужно обзавестись собственным доменом, где можно будет добавить все необходимые DNS-записи и сделать субдомены для сервисов. Выбор регистратора и покупка домена остается за рамками данной статьи, тут только приводятся шаги, которые надо сделать после покупки домена в его админке.
| | {| border=0 width=30% style="float:left" |
| | | |
| | {|border=0 class="line-height-bigger" style="width:100%; text-align:left; margin-bottom: 50px;" |
| | |colspan=2 align=center|<h3>Что это такое?</h3> |
| | |- |
| | |[[Изображение:Kfm home.png|100px|Введение|link=Краткое введение в Jabber]] |
| | |width=60%| |
| | '''[[Краткое введение в Jabber|Введение]]''' <br /> |
| | '''[[Адресация в Jabber|Адресация]]''' <br /> |
| | '''[[Недостатки Jabber|Недостатки]]''' |
| | |- |
| | |} |
|
| |
|
| Всего понадобится около 15 записей в DNS:
| | {|border=0 class="line-height-bigger" style="width:100%; text-align:left; margin-bottom: 50px;" |
| | |colspan=2 align=center|<h3>Как им пользоваться?</h3> |
| | |- |
| | |[[Изображение:Adv jabber 001.png|100px|Как им пользоваться?|link=Регистрация в Jabber]] |
| | |width=60%| |
| | '''[[Регистрация в Jabber|Регистрация]]''' <br /> |
| | '''[[Клиенты Jabber|Популярные клиенты]]''' <br /> |
| | '''[[Публичные серверы Jabber|Публичные серверы]]''' |
| | |- |
| | |} |
|
| |
|
| # Для удобства, чтобы в случае миграции сервера с одного IP на другой не приходилось переписывать все записи, стоит завести для него субдомен, который будет ссылаться на нужный IP с помощью А-записи (или 2 таких субдомена в случае использования IPv4+IPv6 - один с A-записью, а второй с AAAA), а все остальные записи сделать CNAME-алиасами для него. Например, для данного сервера ('''jabberworld.info''') сделаны 2 субдомена '''xmpp.jabberworld.info''', ссылающиеся на IPv4 и IPv6-адреса.
| | {|border=0 class="line-height-bigger" style="width:100%; text-align:left; margin-bottom: 20px;" |
| # Создаем субдомены для необходимых сервисов сервера - '''conference''' (для [[Конференции|конференций]]), '''proxy''' (прокси для прямой [[Передача файлов|передачи файлов]]), '''pubsub''' (сервисы типа "Публикация/подписка", где может сохраняться самая разная информация) и '''upload''' (сервис для [[Передача файлов|передачи файлов]] через HTTP Upload). Все эти записи создаем как CNAME на наш субдомен из 1-го пункта.
| | |colspan=2 align=center|<h3>Полезная информация</h3> |
| # Создаем ряд SRV-записей для нашего основного домена - они показывают, где именно какой сервис находится. Конечно, если у вас все на одном адресе, то будет работать и так, но мы ведь решили все делать правильно, верно? Итак, нужны такие SRV-записи:
| | |- |
| | |[[Изображение:Documentinfo 01.png|100px|Полезная информация|link=Карта Wiki]] |
| | |width=60%| |
| | '''[[Карта Wiki]]''' <br /> |
| | '''[[:Category:Термины|Терминология]]''' <br /> |
| | '''[[Jabber FAQ: Ответы на вопросы|Ответы на вопросы]]''' <br /> |
| | |- |
| | |} |
| | |- |
| | |} |
|
| |
|
| :: '''_xmpp-client._tcp.EXAMPLE.COM''' (порт '''5222''') - чтобы указать, куда подключаться [[Клиенты Jabber|jabber-клиенту]] | | {|border=0 class="line-height-bigger" style="float:left; width:40%; text-align: center; margin-top: 30px;" |
| :: '''_xmpps-client._tcp.EXAMPLE.COM''' (порт '''5223''') - аналогичная запись для TLS-подключений клиентов
| | |<br /><h3>Мир безграничных возможностей</h3> |
| :: '''_xmpp-server._tcp.EXAMPLE.COM''' (порт '''5269''') - чтобы указать, куда подключаться [[Публичные серверы Jabber|jabber-серверу]]
| | '''[[Транспорт|Транспорты]]''' <br /> |
| :: '''_xmpps-server._tcp.EXAMPLE.COM''' (порт '''5270''') - аналогичная запись для TLS-подключений серверов.
| | '''[[Конференции]]''' <br /> |
| | '''[[JID полезных Jabber-ботов|Полезные боты]]''' <br /> |
| | '''[[Уведомление о почте]]''' <br /> |
| | '''[[Пользовательские статусы|Разнообразные статусы]]''' <br /> |
| | '''[[Сетевые соединения в Jabber|Работа в любых условиях]]''' <br /> |
| | '''[[Способы обмена сообщениями в Jabber|Различные способы общения]]''' <br /> |
| | '''[[Использование нескольких клиентов одновременно|Использование нескольких]]<br />[[Использование нескольких клиентов одновременно|клиентов одновременно]]''' <br /> |
| | '''[[Уведомления о печати]]''' <br /> |
| | '''[[Передача файлов]]''' <br /> |
| | '''[[Метаконтакты]]''' <br /> |
| | '''[[Закладки на конференции|Закладки]]''' <br /> |
| | '''[[Возможности Jabber|... и многое другое!]]''' <br /> |
| | |- |
| | |} |
|
| |
|
| :: Записи ниже служат для работы сервиса аудио/видеозвонков через jabber: | | {|border=0 width=30% style="float:right" |
| | | |
| | {|border=0 class="line-height-bigger" style="width:100%; text-align:right; margin-bottom: 50px;" |
| | |colspan=2 align=center|<h3>Чем он лучше?</h3> |
| | |- |
| | |width=60%| |
| | '''[[Преимущества Jabber]]''' <br /> |
| | '''[[Недостатки ICQ]]''' <br /> |
| | '''[[Сравнение Jabber и ICQ|Сравнение Jabber и ICQ]]''' <br /> |
| | |[[Изображение:Vesy 001.png|100px|Сравнение сетей|link=Преимущества Jabber]] |
| | |- |
| | |} |
|
| |
|
| :: '''_stun._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:STUN|STUN]] через [[ru_wikipedia:TCP|TCP]] | | {|border=0 class="line-height-bigger" style="width:100%; text-align:right; margin-bottom: 50px;" |
| :: '''_stun._udp.EXAMPLE.COM''' (порт '''3478''') - STUN через UDP
| | |colspan=2 align=center|<h3>Продвинутым о Jabber</h3> |
| :: '''_stuns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный STUN через TCP
| | |- |
| :: '''_turn._tcp.EXAMPLE.COM''' (порт '''3478''') - [[ru_wikipedia:Traversal Using Relay NAT|TURN]] через [[ru_wikipedia:TCP|TCP]]
| | |width=60%| |
| :: '''_turn._udp.EXAMPLE.COM''' (порт '''3478''') - TURN через UDP
| | '''[[Устройство сети Jabber|Устройство сети]]''' <br /> |
| :: '''_turns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный TURN через TCP
| | '''[[Сетевые соединения в Jabber|Сетевые соединения]]''' <br /> |
| | '''[[Шифрование в Jabber|Шифрование]]''' <br /> |
| | |[[Изображение:System 001.png|100px|Для продвинутых|link=Устройство сети Jabber]] |
| | |- |
| | |} |
|
| |
|
| :: Во всех случаях target'ом для записей служит наш алиас из первого пункта. | | {|border=0 class="line-height-bigger" style="width:100%; text-align:right; margin-bottom: 20px;" |
| | |colspan=2 align=center|<h3>Свой сервер</h3> |
| | |- |
| | |width=60%| |
| | '''[[Ставим свой сервер|Основы]]''' <br /> |
| | '''[[Установка и настройка Jabber-сервера|Установка и настройка]]''' <br /> |
| | '''[[Полезные советы при создании своего сервера|Полезные советы]]''' <br /> |
| | |[[Изображение:Server 001.png|100px|Строим свой сервер|link=Ставим свой сервер]] |
| | |- |
| | |} |
| | |- |
| | |} |
|
| |
|
| Вот как выглядят записи для данного сервера в админке бесплатного DNS-провайдера [https://dns.he.net Hurricane Electric]:
| | |} |
| | |
| <center>[[Файл:Jabber srv.png]]</center>
| |
| | |
| == Сертификаты ==
| |
| | |
| В современном мире стандартной практикой является шифрование соединений, а для этого, в свою очередь, требуются [[ru_wikipedia:Цифровой сертификат|сертификаты]] от доверенных центров сертификации. Можно, конечно, использовать самоподписанный сертификат, но, во-первых, не все серверы будут их принимать - а значит, к ним не получится подключиться и общаться с их пользователями, а во-вторых, в подключающихся клиентах будут появляться сообщения о недоверенном сертификате, что тоже будет доставлять определенные неудобства. Поэтому стоит воспользоваться услугами одного из популярных бесплатных центров сертификации - [https://letsencrypt.org Let's Encrypt].
| |
| | |
| Для работы с сертификатами от Let's Encrypt в Debian есть специальный пакет - '''certbot''', поэтому установите его следующей командой:
| |
| | |
| sudo apt-get install certbot
| |
| | |
| Сертификаты от Let's Encrypt выдаются сроком на 3 месяца, поэтому в конце этого срока их нужно обновлять. Для подтверждения владения доменом, а также для автоматизации обновления сертификатов в дальнейшем со стороны Let's Encrypt делается запрос на веб-сервер для указанного домена, поэтому для полноценной работы стоит установить какой-нибудь популярный вариант и прописать там виртуальные хосты для нашего jabber-сервера, а также сервисов на нем (сертификаты будут делаться в том числе для сервисов). Пример конфигурации веб-сервера Apache для данного сервера:
| |
| | |
| {{Hider hiding
| |
| |title=apache_to_jabber_service_domains.conf
| |
| |content=<pre>
| |
| <VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80>
| |
| ServerAdmin webmaster@jabberworld.info
| |
| DocumentRoot /var/www/jabberworld.info/htdocs
| |
| ServerName jabberworld.info
| |
| </VirtualHost>
| |
| | |
| <VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80>
| |
| ServerAdmin webmaster@upload.jabberworld.info
| |
| DocumentRoot /var/www/upload.jabberworld.info/htdocs
| |
| ServerName upload.jabberworld.info
| |
| </VirtualHost>
| |
| | |
| <VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80>
| |
| ServerAdmin webmaster@pubsub.jabberworld.info
| |
| DocumentRoot /var/www/pubsub.jabberworld.info/htdocs
| |
| ServerName pubsub.jabberworld.info
| |
| </VirtualHost>
| |
| | |
| <VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80>
| |
| ServerAdmin webmaster@conference.jabberworld.info
| |
| DocumentRoot /var/www/conference.jabberworld.info/htdocs
| |
| ServerName conference.jabberworld.info
| |
| </VirtualHost>
| |
| | |
| <VirtualHost 185.161.208.229:80 [2a07:c801:0:5::]:80>
| |
| ServerAdmin webmaster@proxy.jabberworld.info
| |
| DocumentRoot /var/www/proxy.jabberworld.info/htdocs
| |
| ServerName proxy.jabberworld.info
| |
| </VirtualHost>
| |
| </pre>
| |
| }}
| |
| | |
| В каталогах сервера не обязательно должен быть какой-то контент, хотя, например, на основном домене можно разместить какую-то страничку, посвященную jabber-серверу, а на поддомене '''conference''' разместить чат-логи [[Конференции|конференций]]. Субдомен '''upload''' можно приспособить под загружаемые через HTTP Upload файлы, чтобы в дальнейшем их раздавал веб-сервер.
| |
| | |
| После всех приготовлений создайте все необходимые сертификаты. Для этого воспользуйтесь следующими командами (выполнять надо от пользователя '''root'''):
| |
| | |
| certbot certonly --webroot --webroot-path /var/www/EXAMPLE.COM/htdocs/ -d EXAMPLE.COM
| |
| certbot certonly --webroot --webroot-path /var/www/conference.EXAMPLE.COM/htdocs/ -d conference.EXAMPLE.COM
| |
| certbot certonly --webroot --webroot-path /var/www/upload.EXAMPLE.COM/htdocs/ -d upload.EXAMPLE.COM
| |
| certbot certonly --webroot --webroot-path /var/www/pubsub.EXAMPLE.COM/htdocs/ -d pubsub.EXAMPLE.COM
| |
| certbot certonly --webroot --webroot-path /var/www/proxy.EXAMPLE.COM/htdocs/ -d proxy.EXAMPLE.COM
| |
| | |
| В параметрах после '''--webroot-path''' указывается каталог веб-сервера для данного домена, а после '''-d''' - сам домен.
| |
| | |
| После успешного выполнения команд будет выдана информация о созданном сертификате, в том числе 2 файла - цепочка ключей и приватный ключ - сохраните эти пути для дальнейшего использования, они нам еще пригодятся. Всего получится 10 файлов. certbot обновляет сертификаты автоматически, если срок их истечения составляет менее 30 дней - т.е., обновление происходит раз в 2 месяца.
| |
| | |
| Так как ejabberd работает от своего пользователя и не имеет доступа к сертификатам, созданным certbot от рута, то надо каким-то образом предоставить доступ ejabberd'у к сертификатам. Делать это можно по-разному - кто-то, например, меняет права на созданные сертификаты и добавляет возможность ejabberd'у получать доступ к нужным файлам - правда, эти права сбрасываются после каждого обновления сертификатов. В моем случае я создал для ejabberd отдельный каталог - '''/etc/ejabberd/certs''', куда копируются по cron'у созданные сертификаты и уже там даются права для jabber-сервера.
| |
| | |
| == Настройка ejabberd ==
| |
| | |
| Все подготовительные процедуры завершены, теперь можно приступать непосредственно к установке и настройке своего jabber-сервера. В Debian установить ejabberd можно командой
| |
| | |
| sudo apt-get install ejabberd
| |
| | |
| Зачастую самая свежая версия может находиться в backports, поэтому при необходимости можно указать конкретный репозиторий из вашего /etc/apt/sources.list с помощью ключа '''-t''' - например, '''-t bullseye-backports'''. Кроме того, с недавних пор у ejabberd появился официальный DEB и RPM-репозиторий - подробнее об этом можно почитать по [https://www.process-one.net/blog/announcing-ejabberd-deb-and-rpm-repositories/ этой ссылке].
| |
| | |
| Штатно ejabberd использует собственную базу данных - Mnesia. Ее объем ограничен 2 ГБ, поэтому если планируется большое количество пользователей, большие объемы сообщений или просто хочется использовать удобные популярные инструменты для работы с привычной вам базой - я бы рекомендовал использовать внешнюю базу данных - например, MySQL или MariaDB. Я так и поступил, тем более сделать это весьма просто - кроме ejabberd просто установите еще пакет '''erlang-p1-mysql''' командой
| |
| | |
| sudo apt-get install erlang-p1-mysql
| |
| | |
| Создайте базу для jabber-сервера, после чего импортируйте туда схему базы из '''/usr/share/ejabberd/sql/mysql.sql'''.
| |
| | |
| Ниже приводится пример конфигурации jabber-сервера. Рассмотрим его подробнее.
| |
| | |
| {{Hider hiding
| |
| |title=ejabberd.yml
| |
| |content=<pre>
| |
| ###
| |
| ### ejabberd configuration file
| |
| ###
| |
| ### The parameters used in this configuration file are explained at
| |
| ###
| |
| ### https://docs.ejabberd.im/admin/configuration
| |
| ###
| |
| ### The configuration file is written in YAML.
| |
| ### *******************************************************
| |
| ### ******* !!! WARNING !!! *******
| |
| ### ******* YAML IS INDENTATION SENSITIVE *******
| |
| ### ******* MAKE SURE YOU INDENT SECTIONS CORRECTLY *******
| |
| ### *******************************************************
| |
| ### Refer to http://en.wikipedia.org/wiki/YAML for the brief description.
| |
| ### However, ejabberd treats different literals as different types:
| |
| ###
| |
| ### - unquoted or single-quoted strings. They are called "atoms".
| |
| ### Example: dog, 'Jupiter', '3.14159', YELLOW
| |
| ###
| |
| ### - numeric literals. Example: 3, -45.0, .0
| |
| ###
| |
| ### - quoted or folded strings.
| |
| ### Examples of quoted string: "Lizzard", "orange".
| |
| ### Example of folded string:
| |
| ### > Art thou not Romeo,
| |
| ### and a Montague?
| |
| ###
| |
| #
| |
| ---
| |
| ## loglevel: Verbosity of log files generated by ejabberd
| |
| ## 0: No ejabberd log at all (not recommended)
| |
| ## 1: Critical
| |
| ## 2: Error
| |
| ## 3: Warning
| |
| ## 4: Info
| |
| ## 5: Debug
| |
| loglevel: 4
| |
| | |
| ## rotation: Disable ejabberd's internal log rotation, as the Debian package
| |
| ## uses logrotate(8).
| |
| log_rotate_count: 0
| |
| #log_rotate_date: ""
| |
| | |
| ## hosts: Domains served by ejabberd.
| |
| ## You can define one or several, for example:
| |
| ## hosts:
| |
| ## - "example.net"
| |
| ## - "example.com"
| |
| ## - "example.org"
| |
| hosts:
| |
| - "EXAMPLE.COM"
| |
| | |
| certfiles:
| |
| - "/etc/ejabberd/certs/conference.EXAMPLE.COM.fullchain.pem"
| |
| - "/etc/ejabberd/certs/conference.EXAMPLE.COM.privkey.pem"
| |
| - "/etc/ejabberd/certs/EXAMPLE.COM.fullchain.pem"
| |
| - "/etc/ejabberd/certs/EXAMPLE.COM.privkey.pem"
| |
| - "/etc/ejabberd/certs/pubsub.EXAMPLE.COM.fullchain.pem"
| |
| - "/etc/ejabberd/certs/pubsub.EXAMPLE.COM.privkey.pem"
| |
| - "/etc/ejabberd/certs/upload.EXAMPLE.COM.fullchain.pem"
| |
| - "/etc/ejabberd/certs/upload.EXAMPLE.COM.privkey.pem"
| |
| - "/etc/ejabberd/certs/proxy.EXAMPLE.COM.fullchain.pem"
| |
| - "/etc/ejabberd/certs/proxy.EXAMPLE.COM.privkey.pem"
| |
| | |
| | |
| ## TLS configuration
| |
| define_macro:
| |
| 'TLS_CIPHERS': "HIGH:!aNULL:!eNULL:!3DES:@STRENGTH"
| |
| 'TLS_OPTIONS':
| |
| - "no_sslv3"
| |
| # - "no_tlsv1"
| |
| # - "no_tlsv1_1"
| |
| - "cipher_server_preference"
| |
| - "no_compression"
| |
| ## generated with: openssl dhparam -out dhparams.pem 2048
| |
| | |
| c2s_ciphers: 'TLS_CIPHERS'
| |
| s2s_ciphers: 'TLS_CIPHERS'
| |
| c2s_protocol_options: 'TLS_OPTIONS'
| |
| s2s_protocol_options: 'TLS_OPTIONS'
| |
| ## c2s_dhfile: 'DH_FILE'
| |
| s2s_dhfile: "/etc/ejabberd/dhparams.pem"
| |
| | |
| listen:
| |
| -
| |
| port: 3478
| |
| ip: "::"
| |
| transport: udp
| |
| module: ejabberd_stun
| |
| auth_realm: "@HOST@"
| |
| use_turn: true
| |
| ## The server's public IPv4 address:
| |
| turn_ipv4_address: "123.123.123.123"
| |
| ## The server's public IPv6 address:
| |
| turn_ipv6_address: "2a01:0123:0123:0123::"
| |
| -
| |
| port: 3478
| |
| ip: "::"
| |
| transport: tcp
| |
| module: ejabberd_stun
| |
| auth_realm: "@HOST@"
| |
| use_turn: true
| |
| ## The server's public IPv4 address:
| |
| turn_ipv4_address: "123.123.123.123"
| |
| ## The server's public IPv6 address:
| |
| turn_ipv6_address: "2a01:0123:0123:0123::"
| |
| -
| |
| port: 5349
| |
| transport: tcp
| |
| module: ejabberd_stun
| |
| use_turn: true
| |
| tls: true
| |
| ip: "::"
| |
| ## The server's public IPv4 address:
| |
| turn_ipv4_address: "123.123.123.123"
| |
| ## The server's public IPv6 address:
| |
| turn_ipv6_address: "2a01:0123:0123:0123::"
| |
| -
| |
| port: 5000
| |
| ip: "::"
| |
| module: ejabberd_http
| |
| tls: true
| |
| request_handlers:
| |
| /conversejs: mod_conversejs
| |
| /: mod_http_fileserver
| |
| -
| |
| port: 5222
| |
| ip: "::"
| |
| module: ejabberd_c2s
| |
| max_stanza_size: 262144
| |
| shaper: c2s_shaper
| |
| access: c2s
| |
| zlib: true
| |
| starttls_required: true
| |
| protocol_options: 'TLS_OPTIONS'
| |
| -
| |
| port: 5223
| |
| ip: "::"
| |
| module: ejabberd_c2s
| |
| max_stanza_size: 262144
| |
| shaper: c2s_shaper
| |
| access: c2s
| |
| tls: true
| |
| zlib: true
| |
| starttls_required: true
| |
| protocol_options: 'TLS_OPTIONS'
| |
| -
| |
| port: 5269
| |
| ip: "::"
| |
| module: ejabberd_s2s_in
| |
| max_stanza_size: 524288
| |
| -
| |
| port: 5270
| |
| ip: "::"
| |
| tls: true
| |
| module: ejabberd_s2s_in
| |
| max_stanza_size: 524288
| |
| -
| |
| port: 5280
| |
| ip: "::"
| |
| module: ejabberd_http
| |
| request_handlers:
| |
| "/captcha": ejabberd_captcha
| |
| tls: true
| |
| -
| |
| port: 5281
| |
| ip: "::"
| |
| module: ejabberd_http
| |
| request_handlers:
| |
| "/admin": ejabberd_web_admin
| |
| tls: true
| |
| -
| |
| port: 5282
| |
| ip: "::"
| |
| module: ejabberd_http
| |
| request_handlers:
| |
| "/captcha": ejabberd_captcha
| |
| "/register": mod_register_web
| |
| tls: true
| |
| -
| |
| port: 5283
| |
| ip: "::"
| |
| module: ejabberd_http
| |
| request_handlers:
| |
| "/api": mod_http_api
| |
| "/bosh": mod_bosh
| |
| "/upload": mod_http_upload
| |
| "/ws": ejabberd_http_ws
| |
| "/captcha": ejabberd_captcha
| |
| tls: true
| |
| | |
| ## Disabling digest-md5 SASL authentication. digest-md5 requires plain-text
| |
| ## password storage (see auth_password_format option).
| |
| disable_sasl_mechanisms:
| |
| - "digest-md5"
| |
| - "X-OAUTH2"
| |
| | |
| s2s_use_starttls: required
| |
| | |
| ## Store the plain passwords or hashed for SCRAM:
| |
| auth_password_format: scram
| |
| | |
| ## Full path to a script that generates the image.
| |
| captcha_cmd: "/usr/share/ejabberd/captcha.sh"
| |
| #captcha_url: "https://xmpp.EXAMPLE.COM:5282"
| |
| captcha_host: "https://EXAMPLE.COM:5282"
| |
| | |
| acl:
| |
| admin:
| |
| user:
| |
| - "ADMIN": "EXAMPLE.COM"
| |
| | |
| local:
| |
| user_regexp: ""
| |
| loopback:
| |
| ip:
| |
| - "127.0.0.0/8"
| |
| - "::1/128"
| |
| - "::FFFF:127.0.0.1/128"
| |
| | |
| access_rules:
| |
| local:
| |
| - allow: local
| |
| c2s:
| |
| - deny: blocked
| |
| - allow
| |
| announce:
| |
| - allow: admin
| |
| configure:
| |
| - allow: admin
| |
| muc_create:
| |
| - allow: local
| |
| muc:
| |
| - allow
| |
| pubsub_createnode:
| |
| - allow: local
| |
| register:
| |
| - allow
| |
| trusted_network:
| |
| - allow: loopback
| |
| #webadmin_view:
| |
| # - viewers: allow
| |
| | |
| api_permissions:
| |
| "console commands":
| |
| from:
| |
| - ejabberd_ctl
| |
| who: all
| |
| what: "*"
| |
| "admin access":
| |
| who:
| |
| - access:
| |
| - allow:
| |
| - acl: loopback
| |
| - acl: admin
| |
| - oauth:
| |
| - scope: "ejabberd:admin"
| |
| - access:
| |
| - allow:
| |
| - acl: loopback
| |
| - acl: admin
| |
| what:
| |
| - "*"
| |
| - "!stop"
| |
| - "!start"
| |
| "public commands":
| |
| who:
| |
| - ip: "127.0.0.1/8"
| |
| what:
| |
| - "status"
| |
| - "connected_users_number"
| |
| | |
| shaper:
| |
| normal: 2500
| |
| fast: 50000
| |
| | |
| shaper_rules:
| |
| max_user_sessions: 25
| |
| max_user_offline_messages:
| |
| - 5000: admin
| |
| - 200
| |
| c2s_shaper:
| |
| - none: admin
| |
| - normal
| |
| s2s_shaper: fast
| |
| | |
| modules:
| |
| mod_adhoc: {}
| |
| mod_admin_extra: {}
| |
| mod_announce:
| |
| access: announce
| |
| mod_avatar: {}
| |
| mod_blocking: {}
| |
| mod_bosh: {}
| |
| mod_caps: {}
| |
| mod_carboncopy: {}
| |
| mod_client_state: {}
| |
| mod_configure: {}
| |
| ## mod_delegation: {} # for xep0356
| |
| mod_disco:
| |
| server_info:
| |
| -
| |
| modules: all
| |
| name: "abuse-addresses"
| |
| urls:
| |
| - "xmpp:ADMIN@EXAMPLE.COM"
| |
| - "mailto:ADMIN@EXAMPLE.COM"
| |
| -
| |
| modules: [mod_muc]
| |
| name: "Web chatroom logs"
| |
| urls: ["https://chatlogs.EXAMPLE.COM"]
| |
| -
| |
| modules: all
| |
| name: "support-addresses"
| |
| urls:
| |
| - "xmpp:ADMIN@EXAMPLE.COM"
| |
| - "xmpp:support@conference.EXAMPLE.COM?join"
| |
| - "https://my.cool.site"
| |
| mod_fail2ban: {}
| |
| mod_http_api: {}
| |
| mod_http_upload:
| |
| put_url: "https://@HOST@:5283/upload"
| |
| thumbnail: false
| |
| jid_in_url: sha1
| |
| custom_headers:
| |
| "Access-Control-Allow-Origin": "*"
| |
| "Access-Control-Allow-Methods": "GET,HEAD,PUT,OPTIONS"
| |
| "Access-Control-Allow-Headers": "Content-Type"
| |
| mod_http_upload_quota:
| |
| max_days: 180
| |
| mod_mam:
| |
| ## ## Mnesia is limited to 2GB, better to use an SQL backend
| |
| ## ## For small servers SQLite is a good fit and is very easy
| |
| ## ## to configure. Uncomment this when you have SQL configured:
| |
| db_type: sql
| |
| assume_mam_usage: true
| |
| default: roster
| |
| compress_xml: true
| |
| use_cache: true
| |
| cache_life_time: 86400
| |
| mod_muc:
| |
| access:
| |
| - allow
| |
| access_admin:
| |
| - allow: admin
| |
| access_create: muc_create
| |
| access_persistent: muc_create
| |
| default_room_options:
| |
| mam: true
| |
| mod_muc_admin: {}
| |
| mod_offline:
| |
| access_max_user_messages: max_user_offline_messages
| |
| mod_muc_log:
| |
| outdir: "/var/www/chatlogs"
| |
| access_log: muc
| |
| cssfile: /var/www/chatlogs.EXAMPLE.COM/htdocs/muc.css
| |
| #cssfile: http://chatlogs.EXAMPLE.COM/muc.css
| |
| mod_ping: {}
| |
| mod_pres_counter:
| |
| count: 5
| |
| interval: 60
| |
| mod_privacy: {}
| |
| mod_private: {}
| |
| mod_proxy65:
| |
| # remove ip?
| |
| ip: 123.123.123.123
| |
| access: local
| |
| max_connections: 10
| |
| mod_pubsub:
| |
| access_createnode: pubsub_createnode
| |
| plugins:
| |
| - "flat"
| |
| - "pep"
| |
| force_node_config:
| |
| "eu.siacs.conversations.axolotl.*":
| |
| access_model: open
| |
| ## Avoid buggy clients to make their bookmarks public
| |
| "storage:bookmarks":
| |
| access_model: whitelist
| |
| mod_push: {}
| |
| mod_push_keepalive: {}
| |
| mod_register:
| |
| ## Only accept registration requests from the "trusted"
| |
| ## network (see access_rules section above).
| |
| ## Think twice before enabling registration from any
| |
| ## address. See the Jabber SPAM Manifesto for details:
| |
| ## https://github.com/ge0rg/jabber-spam-fighting-manifesto
| |
| #ip_access: trusted_network
| |
| ip_access: all
| |
| captcha_protected: true
| |
| registration_watchers:
| |
| - "ADMIN@EXAMPLE.COM"
| |
| welcome_message:
| |
| subject: "Добро пожаловать на Jabber-сервер!"
| |
| body: "Приветствую. Ведите себя хорошо. Доступен веб-клиент ConverseJS по адресу https://xmpp.EXAMPLE.COM. Лимит на загружаемые файлы - 100 МБ. Срок хранения - 180 дней."
| |
| mod_roster:
| |
| versioning: true
| |
| mod_s2s_dialback: {}
| |
| mod_shared_roster: {}
| |
| mod_sic: {}
| |
| mod_stream_mgmt:
| |
| resend_on_timeout: if_offline
| |
| mod_vcard:
| |
| search: false
| |
| mod_stun_disco:
| |
| services:
| |
| -
| |
| host: 123.123.123.123
| |
| port: 3478
| |
| type: stun
| |
| transport: udp
| |
| restricted: false
| |
| -
| |
| host: 123.123.123.123
| |
| port: 3478
| |
| type: turn
| |
| transport: udp
| |
| restricted: true
| |
| -
| |
| host: 123.123.123.123
| |
| port: 3478
| |
| type: stun
| |
| transport: tcp
| |
| restricted: false
| |
| -
| |
| host: 123.123.123.123
| |
| port: 3478
| |
| type: turn
| |
| transport: tcp
| |
| restricted: true
| |
| -
| |
| host: "2a01:0123:0123:0123::"
| |
| port: 3478
| |
| type: stun
| |
| transport: udp
| |
| restricted: false
| |
| -
| |
| host: "2a01:0123:0123:0123::"
| |
| port: 3478
| |
| type: turn
| |
| transport: udp
| |
| restricted: true
| |
| -
| |
| host: "2a01:0123:0123:0123::"
| |
| port: 3478
| |
| type: stun
| |
| transport: tcp
| |
| restricted: false
| |
| -
| |
| host: "2a01:0123:0123:0123::"
| |
| port: 3478
| |
| type: turn
| |
| transport: tcp
| |
| restricted: true
| |
| -
| |
| host: EXAMPLE.COM
| |
| port: 5349
| |
| type: stuns
| |
| transport: tcp
| |
| restricted: false
| |
| -
| |
| host: EXAMPLE.COM
| |
| port: 5349
| |
| type: turns
| |
| transport: tcp
| |
| restricted: true
| |
| mod_vcard_xupdate: {}
| |
| mod_version:
| |
| show_os: false
| |
| mod_stats: {}
| |
| mod_last: {}
| |
| # mod_time: {}
| |
| mod_conversejs:
| |
| websocket_url: "wss://EXAMPLE.COM:5283/ws"
| |
| conversejs_script: "https://EXAMPLE.COM:5000/converse.min.js"
| |
| conversejs_css: "https://EXAMPLE.COM:5000/converse.min.css"
| |
| # bosh_service_url: "https://EXAMPLE.COM:5283/bosh"
| |
| default_domain: "EXAMPLE.COM"
| |
| mod_http_fileserver:
| |
| docroot: "/var/www/ejabberd/package/dist"
| |
| accesslog: "/var/log/ejabberd/fileserver-access.log"
| |
| custom_headers:
| |
| "Access-Control-Allow-Origin": "*"
| |
| "Access-Control-Allow-Methods": "GET,HEAD,OPTIONS"
| |
| "Access-Control-Allow-Headers": "Content-Type"
| |
| | |
| default_db: sql
| |
| sql_type: mysql
| |
| sql_server: "localhost"
| |
| | |
| host_config:
| |
| "EXAMPLE.COM":
| |
| sql_database: "JABBERDB"
| |
| | |
| sql_username: "DBUSER"
| |
| sql_password: "SUPERPASSWORD"
| |
| sql_port: 3306
| |
| | |
| language: "ru"
| |
| | |
| ### Local Variables:
| |
| ### mode: yaml
| |
| ### End:
| |
| ### vim: set filetype=yaml tabstop=8
| |
| </pre>
| |
| }}
| |
| | |
| * Первым делом указывается один или несколько хостов, которые будет обслуживать сервер - в конфигурационном файле выше он указан как '''EXAMPLE.COM'''.
| |
| * Далее надо указать перечень файлов сертификатов, которые мы создали раньше.
| |
| * Секция '''Listen''' описывает порты, которые слушает сервер. Тут перечисляются порты для STUN/TURN ('''3478''') и их шифрованных аналогов ('''5349'''); порты для подключения клиентов ('''5222''' и '''5223''') и серверов ('''5269''' и '''5270'''), а также ряд дополнительных портов. К ним относятся порты для админ-панели сервера ('''5281'''), веб-страницы для регистрации пользователей ('''5282'''), а также подключений к серверу через [[ru_wikipedia:WebSocket|Websocket]] или [[wikipedia:BOSH (protocol)|BOSH]] и загрузка файлов через HTTP Upload ('''5283''') - я постарался разнести различные сервисы по разным портам, чтобы в дальнейшем было проще, например, ограничить доступ к админ-панели определенными адресами, не блокируя при этом доступ к остальным функциям. Еще одним полезным сервисом является веб-клиент ConverseJS - под него выделен порт '''5000''' - о нем будет написано чуть ниже. Для некоторых описанных портов необходимо указывать внешний IP-адрес сервера - это нужно, чтобы сервис знал, какой именно адрес отдавать клиентам - это относится к настройкам STUN/TURN и Proxy. В качестве шаблона в показанном конфиге указаны адреса '''123.123.123.123''' для IPv4 и '''2a01:0123:0123:0123::''' для IPv6 - если не используете IPv6, то просто закомментируйте соответствующие строки.
| |
| * Далее необходимо указать хост, с которого будет отдаваться картинка CAPTCHA.
| |
| * Далее указывается один или несколько администраторских аккаунтов - с помощью них можно будет попасть в веб-интерфейс администрирования, зайти в любую [[Конференции|конференцию]], а также в [[Браузер сервисов|браузере сервисов]] будут доступны дополнительные административные пункты.
| |
| * После настроек шейпера идет довольно объемное описание различных модулей. Из интересного:
| |
| ** В '''server-info''' для '''mod_disco''' можно указать контакты администратора сервера, техподдержки или просто дополнительную информацию.
| |
| ** В '''mod_http_upload''' можно указать адрес, с которого будут отдаваться загруженные на сервер через HTTP Upload файлы. При желании можно использовать не встроенный веб-сервер, а тот веб-сервер, что был настроен для получения сертификатов. Чуть ниже этой опции есть настройка времени устаревания файлов - в примере выше это 180 дней. Если у вас мало места на сервере, то можно поставить это значение поменьше.
| |
| ** Аналогичным образом можно поступить с '''mod_muc_log''' - модулем, позволяющим вести логи конференций (при включении соответствующей опции в настройках этой конференции). В примере выше файлы просто складываются в определенный каталог, а дальше их уже раздает веб-сервер.
| |
| ** Для модуля proxy65 не забудьте указать внешний адрес сервера.
| |
| ** Если хотите получать уведомления о новых регистрациях - обратите внимание на параметр '''registration_watchers''' в секции '''mod_register'''. Тут в том числе можно запретить регистрацию пользователей вообще или ограничить ее определенными адресами (например, локальной сетью), а также задать приветственное сообщение, отправляемое каждому новому пользователю.
| |
| ** Ниже идет большой блок параметров STUN/TURN-сервера. Укажите внешние IP-адреса сервера и обслуживаемый домен; если у сервера нет IPv6-адреса - закомментируйте соответствующие блоки.
| |
| **
| |
|
| |
|
| [[Category:Вики]] | | [[Category:Вики]] |