Песочница: различия между версиями

Материал из Мир Jabber
Перейти к навигацииПерейти к поиску
м
 
(не показаны 32 промежуточные версии этого же участника)
Строка 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>
|-
|}


== 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|Популярные&nbsp;клиенты]]''' <br />
'''[[Публичные серверы Jabber|Публичные&nbsp;серверы]]'''
|-
|}


# Для удобства, чтобы в случае миграции сервера с одного 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: Ответы на вопросы|Ответы&nbsp;на&nbsp;вопросы]]''' <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|Сравнение&nbsp;Jabber&nbsp;и&nbsp;ICQ]]''' <br />
|[[Изображение:Vesy 001.png|100px|Сравнение сетей|link=Преимущества Jabber]]
|-
|}


:: '''_stun._tcp.EXAMPLE.COM''' (порт '''3478''') - STUN через 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''') - TURN через TCP
|width=60%|
:: '''_turn._udp.EXAMPLE.COM''' (порт '''3478''') - TURN через UDP
'''[[Устройство сети Jabber|Устройство сети]]''' <br />
:: '''_turns._tcp.EXAMPLE.COM''' (порт '''5349''') - шифрованный TURN через TCP
'''[[Сетевые соединения в Jabber|Сетевые&nbsp;соединения]]''' <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-сервера|Установка&nbsp;и&nbsp;настройка]]''' <br />
'''[[Полезные советы при создании своего сервера|Полезные советы]]''' <br />
|[[Изображение:Server 001.png|100px|Строим свой сервер|link=Ставим свой сервер]]
|-
|}
|-
|}


{{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>
}}


[[Category:Вики]]
[[Category:Вики]]

Текущая версия на 22:34, 29 февраля 2024

Для просмотра содержимого Wiki с мобильного телефона Вы можете воспользоваться картой Wiki или мобильной версией сайта
Современная структура общения в Internet очень развита и многогранна. Пользователю доступно множество видов общения, таких как чаты, почта, аудио и видео конференции, форумы, социальные сети и т.д.

В нашем случае речь пойдет о Jabber - популярном свободном и открытом протоколе для общения посредством мгновенной отправки и получения текстовых сообщений в сети.

Так исторически сложилось, что приличное количество людей на территории ex-СССР осталось пользоваться ICQ, несмотря на то, что это устаревшая сеть с закрытым протоколом, владельцы которой ущемляют пользователей в правах посредством своих лицензионных соглашений.

Цель данного проекта - помощь как в переходе пользователей с ICQ на Jabber,
так и помощь новичкам в освоении Jabber.

Что это такое?

Введение

Введение
Адресация
Недостатки

Как им пользоваться?

Как им пользоваться?

Регистрация
Популярные клиенты
Публичные серверы

Полезная информация

Полезная информация

Карта Wiki
Терминология
Ответы на вопросы


Мир безграничных возможностей

Транспорты
Конференции
Полезные боты
Уведомление о почте
Разнообразные статусы
Работа в любых условиях
Различные способы общения
Использование нескольких
клиентов одновременно

Уведомления о печати
Передача файлов
Метаконтакты
Закладки
... и многое другое!

Чем он лучше?

Преимущества Jabber
Недостатки ICQ
Сравнение Jabber и ICQ

Сравнение сетей

Продвинутым о Jabber

Устройство сети
Сетевые соединения
Шифрование

Для продвинутых

Свой сервер

Основы
Установка и настройка
Полезные советы

Строим свой сервер