Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение

Настройка своего сервера jabber : Операционные системы и программное обеспечение

23.04.2024 10:08


14.12.2010 17:56
OlegON
 
Для памяти накидаю простенькую памятку.
Ориентируюсь на самостоятельный сервер, смотрящий в интернет.
Во-первых, я выбираю уже достаточно давно ejabberd, потому, что openfire на яве, а я ей для сервисов не доверяю, а jabberd-прародитель давно уже не развивается.
В общем, все достаточно просто, собрать, стартовать:
Цитата:
net-im/ejabberd 2.1.5
captcha mod_irc mod_muc mod_statsdx odbc pam ssl web zlib
до кучи к нему
Цитата:
net-im/pyicq-t 0.8.1.5
транспортом.
Надо сказать, что транспорт сильно подрос, у меня, например, в этот раз не было проблемы с потерей подписей к контактам, что раньше было всегда. На настройке особо останавливаться не буду, потому, что там всего лишь надо читать комментарии и менять значения по умолчанию.
Сращивать жаббер с транспортом лучше локально, от греха...
Необходимо отметить, что жаббер пользуется портами 5222, 5223 и 5269 (для межсерверных соединений s2s), еще варианты вроде веб-интерфейса, но это уже настраивается и в принципе без разницы.
Еще два нюанса.
Первый. Некоторые jabber-серверы (как я понимаю, это только гугл) без tls/ssl соединения вам ничего слать не будут, как и принимать тоже. Возникает вопрос наличия сертификатов для этого соединения. В Gentoo выдается самоподписанный сертификат, которому никто не доверяет. Т.е. он подойдет лишь для тех соединений, где правильность сертификата может быть проигнорирована (гугл этого не делает). Т.е. если не хотите заморачиваться - можете проигнорировать недоступность гугла, но я захотел сделать все правильно, а потому пошел на StartSSL Certificates & Public Key Infrastructure и получил себе сертификат. Чтобы не наступали на грабли, скажу, что сначала необходимо зарегистрироваться, причем указать полностью кучу персональных данных, иначе сертификат не выдадут. По успешному завершению процедуры, в браузер (у меня Firefox) будет импортирован сертификат, который действует вместо логина/пароля. Его лучше сразу забекапить. Далее начинается самое интересное. Надо зайти в контрольную панель и получить сертификат для жаббер-сервера. Все просто. Во-первых, не забудьте указать, что получаете сертификат для XMPP, то бишь жабера. Во вторых внимательно читайте, что вам пишут. В результате должно получиться 4 файла.
* ssl.key
* ssl.crt
* ca.crt
* sub.class1.server.ca.crt (или sub.class1.server.ca.pem, учтите это в строке объединения ниже)
Причем, первые два будут выданы текстом с указанием в какие файлы сохранить, а третий и четвертый - малозаметными ссылками на странице с кнопкой Finish. Сделано явно, чтобы тупые и невнимательные обломались. Честно сознаюсь, я в первый проход пропустил, куда какие текстовики сохранять. Вернуться и прогнать процедуру еще раз не удастся, т.ч. не делайте ошибок и все внимательно читайте. Полученные файлы немедленно забекапьте и обратите внимание, что в конце каждого файла должен быть перевод строки.
С одним из полученных файлов надо будет проделать следующее
Код:
openssl rsa -in ssl.key -out ssl.key
Затем, со всеми остальными:
Код:
cat ssl.crt ssl.key sub.class1.server.ca.pem >ejabberd.pem
Обратите внимание, в каком файле будет искать сертификат ejabberd, файл прописывается в нехитром конфиге в ssl/tls-секции. Соответственно, пользователь, из под которого работает ejabberd (обычно ejabberd) имел право на чтение этого файла.
После запуска ejabber можно проверить, что сертификат установлен:
Код:
openssl s_client -connect your.server.org:5223 -CAfile /path/to/ca.crt
Вот и все по сертификатам :) Все просто, проще, чем кажется.
Чуть позднее напишу про SRV и выставление сервера в инет. Пока не успеваю.
14.12.2010 22:36
OlegON
 
Второй нюанс. В соответствии с общесетевыми законами роутинга, так же, как почту, удаленные домены будут стараться доставить именно на ваш домен. Т.е. если у меня olegon.ru откликается определенным IP, то стучаться все остальные жабберы при пересылке сообщений будут именно на него. Что меня совсем не устраивало, поскольку джаббер у меня стоит на совершенно другом сервере. Я был не одинок, судя по всему, и для перенаправления жаббера на другой сервер (в моем случае это
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 21 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащийся здесь.
придумали несколько SRV-записей в DNS, которые подсказывают, куда надо подключаться на самом деле. Естественно, при подготовке сертификата выше, я указывал olegon.ru и имя этого самого сервера.
Какие записи прописывать я указывал тут: Свой jabber на google -
Т.е. в случае одного жаббера, а не кластера, как у гугла, необходимо добавить по одной записи каждого типа.
Да, соответственно, если сервер джаббера и сервер домена совпадают, то SRV записи не нужны, хотя я бы не стал делать такой гибрид по соображениям безопасности.
04.12.2011 18:48
OlegON
 
Пришло время обновлять сертификаты. Делается просто. Во-первых, за две недели до истечения срока сертификатов приходит уведомление от startssl. Необходимо обновить не только сертификат на jabber-сервер, но и клиентский, на вход в контрольную панель startssl. Я использовал для работы Firefox без прокси. Для начала обязательно подтвердить емейл и домен на третьей закладке (емейл подтверждается высылкой кода на него, я подтверждал olegon@, домен подтверждается высылкой кода на postmaster@). Затем, на второй - необходимо будет сделать себе клиентский сертификат (MIME, High grade), который интегрируется в браузер, откуда надо будет его забекапить и интегрировать, например, в Chrome. Далее, надо для jabber-сервера сгенерировать сертификат, подчеркиваю еще раз, богатство состоит из четырех файлов:
1) RSA private key (на странице Generate Private Key введите пароль)
2) PEM encoded certificate
3) Intermediate certificate
4) Root certificate
последние, как уже писал выше, на страничке с Finish, ссылками в тексте
Цитата:
Save also the intermediate and root CA certificates for the installation at your server (Save As...).
Потом просто, по доке в первом сообщении и полученный ejabberd.pem кинуть туда, где он прописан в конфигурации жабер-сервера.
23.04.2012 11:03
OlegON
 
Наступил на болезненные грабли. Убил уйму времени, чтобы понять, почему со временем отлетали все пользователи на qip и gtalk с сообщением "Received error packet [remote-server-not-found] from $JID".
Упахался перекраивать свою стенку. Думал, что какие-то соединения запретил. Смущало и то, что по непонятным причинам ejabberd иногда не перезапускался, выдавая не очень внятные сообщения про gethostbyname или вроде того. В общем, решение оказалось простое. Ejabberd по умолчанию (файл inetrc конфигурации ejabberd) разрешает имена по файлу /etc/resolv.conf, который стал любезно перезатираться dhcp, включенный для провайдера. Внутри файлика любезно пишется, что надо вписывать свою конфигурацию в /etc/resolv.conf.head, куда я и прописал
Цитата:
nameserver IP_моего_DNS
08.06.2012 12:53
ohaesama
 
А сертификата с startssl вообще достаточно, чтобы с пользователями gmail общаться. А то я его получил, но никаких изменений не заметил. Пока общаться получается только с пользователями jabber_ru. Но это и без сертификата можно было. То есть ничего не изменилось. Сертификат на s2s прикручивал по инструкции (сервер ejabberd). Как вообще определить, что он там работает?
08.06.2012 12:58
OlegON
 
Достаточно, сколько времени уж общаюсь и большинство жаберов в списке именно с гугла. Только они все равно должны подтвердить, что пускают тебя в список. И лучше штатным клиентом им не пользоваться, он теряет кучу служебных сообщений. А проверить просто - выше написано в первом сообщении, читай внимательнее.
Цитата:
После запуска ejabber можно проверить, что сертификат установлен:
Код:
openssl s_client -connect your.server.org:5223 -CAfile /path/to/ca.crt
08.06.2012 13:11
ohaesama
 
Цитата:
OlegON После запуска ejabber можно проверить, что сертификат установлен:
Код:
openssl s_client -connect your.server.org:5223 -CAfile /path/to/ca.crt
Та эта штука то работает. Но это ж проверка только c2s. А вот как понять, что сертификат и на s2s подхватился?
Цитата:
OlegON Только они все равно должны подтвердить, что пускают тебя в список.
Кто должен? gmail? Или пользователь? У меня есть акк на gmail. Добавляю себя в ростер с обоих сторон и разрешаю подписку. Не работает.
08.06.2012 13:22
OlegON
 
Если свой акк есть на двух сторонах, то можно посмотреть еще XMPP-консоль включить, посмотреть, что ходит, если клиент вроде psi-plus. Подтвердить, конечно, должен пользователь. Если нет подписки, он игнорит и ее запросы, если не ошибаюсь. Не помню. В идеале гугловый запрашивает у твоего юзера подписку, а тот уже подтверждает и запрашивает в ответ. Я для тестов использовал [email]ru2en@bot.talk.google.com[/email], хватает. Что касается проверки, то попробуй 5223 на 5269 заменить, суть без разницы, если сертификат в ежике есть, он будет выдаваться и там и там.
А что конкретно не работает? Мож, с хостами напутал? Коннектишься к одному, а засертифил другой? В ежике дебаг, кстати, можно включить. Не erlang-лог, понять что к чему вполне даже можно.
08.06.2012 14:30
ohaesama
 
Как я понял, мой ejabberd по какой-то непонятной причине не может получить srv-записи для gmail_ Хотя nslookup у меня их получает_ О_о
Код:
=INFO REPORT==== 2012-06-08 14:15:12 ===
I(<0_735_0>:ejabberd_s2s_out:1207) : Trying to open s2s connection: acm-server_ru -> gmail_com with TLS=true

=INFO REPORT==== 2012-06-08 14:15:12 ===
D(<0_735_0>:ejabberd_s2s_out:203) : open_socket: {"acm-server_ru","gmail_com", "2970422230",false}

=ERROR REPORT==== 2012-06-08 14:15:12 ===
E(<0_735_0>:ejabberd_s2s_out:1125) : The DNS servers
  []
timed out on request for "gmail_com" IN SRV_ You should check your DNS configuration_

=INFO REPORT==== 2012-06-08 14:15:12 ===
D(<0_735_0>:ejabberd_s2s_out:1071) : srv lookup of 'gmail_com' failed: timeout

=INFO REPORT==== 2012-06-08 14:15:12 ===
D(<0_735_0>:ejabberd_s2s_out:1156) : inet of gmail_com resolved to: [{173,194,32,54},{173,194,32,53}]

=INFO REPORT==== 2012-06-08 14:15:12 ===
D(<0_735_0>:ejabberd_s2s_out:285) : s2s_out: connecting to {173,194,32,54}:5269

=INFO REPORT==== 2012-06-08 14:15:22 ===
D(<0_735_0>:ejabberd_s2s_out:300) : s2s_out: connect return timeout

=INFO REPORT==== 2012-06-08 14:15:22 ===
D(<0_735_0>:ejabberd_s2s_out:285) : s2s_out: connecting to {173,194,32,53}:5269

=INFO REPORT==== 2012-06-08 14:15:32 ===
D(<0_735_0>:ejabberd_s2s_out:300) : s2s_out: connect return timeout

=INFO REPORT==== 2012-06-08 14:15:32 ===
D(<0_735_0>:ejabberd_s2s_out:1159) : inet6 lookup of 'gmail_com' failed: nxdomain

=INFO REPORT==== 2012-06-08 14:15:32 ===
I(<0_735_0>:ejabberd_s2s_out:235) : s2s connection: acm-server_ru -> gmail_com (remote server not found)
08.06.2012 15:16
ohaesama
 
Вот решение моей проблемы: www_ejabberd_im/fix-dns-srv

Добавлено через 3 минуты 50 секунд
Интересно, что это означает?
Код:
=INFO REPORT==== 2012-06-08 15:07:36 ===                                                           
I(<0.883.0>:ejabberd_s2s_out:418) : wait for validation: acm-server_ru -> gmail_com (xmlstreamend) 
                                                                                                   
=INFO REPORT==== 2012-06-08 15:07:36 ===                                                           
D(<0.883.0>:ejabberd_s2s_out:910) : terminated: {normal,wait_for_validation}
Часовой пояс GMT +3, время: 10:08.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.