[ОТВЕТИТЬ]
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}
08.06.2012 16:00
OlegON
 
Ты написал, что решение твоей проблемы в нескольких вариантах, но так и не пояснил, что именно тебе помогло. Поставь какой-нибудь dnsmasq, добейся, чтобы в resolv.conf была запись (я выше уже писал о косяке), будет нормально разрешать имена... Стенку на время экспериментов сними...
08.06.2012 16:07
OlegON
 
Цитата:
=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
Inet6-то убери?
08.06.2012 17:57
ohaesama
 
У меня ejabberd не ресолвил srv-записи. Это проблема самого ejabberd, и она описана по ссылке, которую я запостил выше. Для меня решением проблемы было отредактировать файл conf\inetrc:
Код:
{nameserver, {192,168,1,1}}.
{registry, win32}.
Да, у меня винда. Да, мне стыдно. :-[

Так как на jabber_ru сервер доступен непосредственно по адресу jabber_ru, то он работал и без srv.

Добавлено через 7 минут 36 секунд
После вышеуказанных настроек заработало всё, кроме gmail. В логах нашёл вот что:
Код:
D(<0.884.0>:ejabberd_receiver:320) : Received XML on stream = "<stream:error><undefined-condition x
mlns=\"urn:ietf:params:xml:ns:xmpp-streams\"/><str:text xmlns:str=\"urn:ietf:params:xml:ns:xmpp-str
eams\">acm-server_ru is a Google Apps Domain with Talk service enabled.</str:text></stream:error></
stream:stream>"
Да, мой домен привязан к google apps. Я там пользуюсь почтой. Перерыл весь инет и нашёл решение:
  1. Заходим на страницу www_google_com/a/cpanel/you_doumain
  2. Жмём вкладку "Настройка".
  3. Внизу тыкаем на Google Talk.
  4. Скроллим вниз и тыкаем "Удалить сервис Google Talk"
08.06.2012 17:59
OlegON
 
на самом деле все это описано тут :) просто покопать надо было. но за ответ спасибо, кто-нибудь еще подберет...
04.10.2013 16:16
Occul
 
Можно еще добавить, что срок действия сертификата можно проверить следующей командой:
Код:
openssl s_client -connect хост:5223 2>/dev/null | openssl x509 -noout -dates
18.11.2013 21:58
OlegON
 
Обновил сертификаты, все, как тут: Настройка своего сервера jabber в силе. Даже перезагрузка ejabberd не требуется, просто кинул файлик...
Опции темы


Часовой пояс GMT +3, время: 03:30.

 

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