Рубрика:
Администрирование /
Продукты и решения
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
СЕРГЕЙ ЯРЕМЧУК, фрилансер. Автор более 800 статей и шести книг. С «СА» с первого номера. Интересы: сетевые технологии, защита информации, свободные ОС
Строим Jabber-сервер с OpenFire
Сегодня для более эффективной организации совместной работы сотрудников все чаще используют системы мгновенного обмена сообщениями. Рассмотрим, как установить и настроить Jabber-сервер OpenFire.
Наиболее известным протоколом мгновенного обмена сообщениями (instant messaging, IM) несомненно, является ICQ. В некоторых организациях подключаются к этой сети и используют ее возможности, не прибегая к сторонним продуктам. Но в то же время использование ICQ в корпоративных целях может иметь и отрицательные последствия. Вероятно, из-за обмена сообщениями в реальном времени, когда ведется обычный диалог, пользователи часто доверяют IM-сетям даже больше, чем электронной почте и информации на веб-сайтах. Такие системы всегда привлекали и будут привлекать в будущем большое внимание со стороны хакеров, вирусописателей, неравнодушны к ним и фишеры. Поэтому в любой момент компьютер может быть атакован через ошибки в клиентских программах, ссылка, вставленная в сообщение, может привести на вредоносный ресурс. Не стоит забывать, что ICQ – это закрытый протокол, подверженный частым изменениям. Да и вообще сеть иногда попросту не работает. Итак, назревает вопрос о создании своего сервера.
Если просмотреть доступные бесплатные предложения, то можно обнаружить, что в качестве ICQ-сервера на всех ресурсах рекомендуется только один – IServerd (ICQ server daemon) [1], изначально работающий только под UNIX-совместимыми системами и весьма простой в настройках. Список же Jabber-серверов [2] на порядок больше. Напомню, что в Jabber для обмена сообщениями используют открытый протокол XMPP (eXtensible Messaging and Presence Protocol), базирующийся на XML. Последнее дает большую гибкость и возможность расширения. Так, в принципе любой Jabber-сервер вполне способен поддерживать множество других протоколов – ICQ, IRQ, MSN, RSS, Yahoo и др. В одних это заложено в базовой конструкции, а в других с использованием дополнительных модулей. Также Jabber позволяет организовать и групповые чаты. Поэтому вместо двух серверов (ICQ и IRC) вполне возможно обойтись и одним, что гораздо удобнее для пользователей и администраторов. Сам Jabber отличает продуманная система защиты информации, все реализации серверов поддерживают SSL, а клиенты – шифрование с помощью PGP/GPG, пароли передаются не в открытом виде, а используются md5-хеши. Проблем с кодировкой тоже нет, так как изначально используется Unicode.
Проект OpenFire
После знакомства со списком, приведенным по ссылке [1], особенно со столбцами «Feature Score» и License=Gnu GPL, из всех присутствующих можно отобрать лишь несколько. Особо выделяется проект OpenFire (ранее – Wildfire), который позиционируется как открытая альтернатива проприетарным серверам мгновенных сообщений масштаба предприятия. Написан на Java, по-моему, сегодня использование этого языка уже не должно никого пугать. Но зато его можно установить в любой системе, для которой доступен Java Runtime Environment (AIX, *BSD, HP-UX, Linux, MacOS X, Solaris, Windows). Для сохранения различных настроек и профилей можно использовать как внутреннюю базу данных HSQLDB, так и внешнюю. В качестве последних поддерживаются: MySQL, Postgres, Microsoft SQL Server, Oracle, IBM DB2. Для работы с ними понадобится JDBC-драйвер. OpenFire очень прост в настройке, все операции осуществляются через понятный веб-интерфейс, который хотя и не локализован, но разобраться с ним будет просто. Тем более он предназначен исключительно для административных целей, а любой админ так или иначе должен владеть базовым английским. В установке по умолчанию OpenFire имеет большое количество возможностей, среди которых управление списком пользователей и отображение списка пользователей на клиентах, отправление сообщений пользователям, которые на данный момент отключены, поиск пользователей, а остальное (Asterisk, широковещательные сообщения, IM-шлюз, контент-фильтр и прочее) реализуется посредством плагинов. Поддерживает работу по протоколам SSL/TLS. Опционально сервер способен использовать существующую систему авторизации предприятия на основе LDAP. Как и большинство подобных решений, OpenFire легко интегрируется в сеть серверов Jabber. Сервер выходит под двойной лицензией – Open Source GPL и коммерческий вариант. Все плагины, кроме двух: Spark Fastpath Webchat (веб-чат) и Wildfire Enterprise (графики, контроль версий клиентов, архивирование) доступны под лицензией GPL. Для тестирования коммерческих плагинов необходимо вначале получить тестовый ключ, который даст возможность полноценно погонять его в течение 30 дней.
Устанавливаем OpenFire
Перед началом установки OpenFire следует инсталлировать пакеты sun-java6-jre. И если планируется использовать внешний сервер базы данных, то и его. Тестовая установка производилась на Ubuntu 7.04 в качестве БД – MySQL. Для других дистрибутивов все сказанное, кроме особенностей работы менеджеров пакетов, будет действительно.
$ sudo apt-get update
$ sudp apt-get install sun-java6-jre mysql-server
Теперь распаковываем полученный архив в каталог /opt:
$ cd /opt/
$ sudo tar xzvf /home/source/openfire_3_3_0.tar.gz
В результате в каталоге /opt появился подкаталог openfire, в котором содержатся все библиотеки и исполняемые файлы.
Создаем необходимую для работы базу данных:
$ sudo mysqladmin --user=root --password=db_passwd create jabber
$ cat ./openfire/resources/database/openfire_mysql.sql | mysql --user=root --password=db_passwd --database=jabber
В указанном каталоге находятся файлы и для остальных баз данных, поддерживаемых OpenFire.
Запускаем сервер (привилегий администратора не требуется):
$ cd openfire/bin
$ ./openfire
testing JVM in /usr ...
Usage: ./openfire {start|stop|status}
$ ./openfire start
|
Теперь набираем в браузере http://localhost:9090/ и переходим к этапу настройки.
Рисунок 1. Настройка соединения с базой данных
Рисунок 2. Создание пользователя
Как уже говорилось выше, сервер очень прост в настройке. Необходимо будет последовательно пройти всего 5 этапов. Вначале выбираем язык интерфейса, русского в списке нет, поэтому придется довольствоваться английским. На следующем шаге в строке Domain указываем имя сервера. По умолчанию используется вывод hostname, хотя можно здесь использовать IP-адрес. Впоследствии имя можно изменить, после чего понадобится изменение и сертификатов. Здесь же указываем порт, который будет использоваться при администрировании сервера, обычный и с использованием защищенного соединения (по умолчанию соответственно 9090 и 9091).
Следующий шаг позволяет определить, какую из баз данных мы будем использовать для работы. Самым простым вариантом будет выбор встроенной базы (Embedded DataBase). В этом случае никаких дополнительных настроек далее делать не нужно. Для небольшого количества пользователей ее производительности вполне хватает. Мы же используем MySQL, поэтому отмечаем «Standard Database Connection» и жмем Continue. В следующем окне указываем параметры подключения к базе данных. Для этого в строке Database Driver Presets выбираем тип базы, с которой будем работать, в строке Database URL все слова в квадратных скобках подменяем своими значениями (то есть вместо [host-name] пишем адрес сервера, на котором расположена база MySQL, а вместо [database-name] пишем имя базы, в нашем случае база называется jabber). То есть, если MySQL установлен на том же компьютере, в поле Database URL получается:
jdbc:mysql://localhost:3306/jabber
Далее вводим имя пользователя и пароли и пробуем соединиться с базой данных. Шаг «Profile Settings» позволит выбрать вариант сохранения информации о пользователях. Это может быть внутренняя база данных либо LDAP. В последнем случае настраиваем соединение с сервером, предоставляющим соответствующие услуги.
И последний шаг настройки – установка пароля администратора. Учетная запись в этом поле пишется с добавлением домена – admin@example.com. По окончании настройки система предложит нажатием на кнопку «Login to the admin console» зарегистрироваться в консоли администратора. Конфигурация сохраняется в файле /opt/openfire/conf/openfire.xml, если что-то не получилось можно заменить его, взяв версию из архива, либо удалить из него предпоследнюю строку, начинающуюся с <setup>. После чего повторить установку. Сервер теперь готов принимать клиентов, хотя стоит поначалу все-таки обратиться к некоторым настройкам.
Настройки в консоли администратора
Настроек в OpenFire предостаточно, все их описать невозможно, скажу только о некоторых. На главной странице, которая будет выведена после регистрации в консоли, будет показана статистика сервера и текущие настройки. Чтобы отредактировать имя сервера, порт подключения сервер-сервер, клиент-сервер и консоли администратора, а также включить или выключить поддержку SSL, следует нажать кнопку Edit Properties в самом низу страницы. Далее идем в «Language and Time Settings» в «Choose Time Zone», выбираем свой часовой пояс, если он выставлен неправильно (берется из системных настроек). Перейдя в «Email Settings», указываем SMTP-сервер и учетные данные, необходимые для отправки почтовых сообщений.
Сервер OpenFire может быть настроен как закрытый, так и в качестве открытого ресурса, к которому могут подключаться новые пользователи. По умолчанию он настроен именно так. Если его планируется использовать внутри организации, лучше запретить пользователям самостоятельно создавать учетные записи. Для этого переходим в «Registration & Login» и устанавливаем переключатель в Disabled в поле «Inband Account Registration». Используя переключатель в поле «Anonymous Login», можно разрешить или запретить анонимные подключения к серверу. И, наконец, можно ограничить соединения с сервером только диапазоном определенных адресов, указав их в «Restrict Login» в виде 192.168.1. Переключатель в поле «Change Password» лучше установить в Enabled, тем самым разрешив пользователям самостоятельно изменять свои пароли. Меню «Conflict Policy» позволяет определить действие сервера, если новый пользователь попробует зайти с именем, которое уже задействовано (протокол это допускает).
Теперь можно зазывать пользователей на новый ресурс, но если выбрана политика, запрещающая самостоятельную регистрацию, сначала регистрационные записи нужно будет создать. Для чего переходим в «Users/Groups», выбираем «Create New User» и вводим имя пользователя и пароль. Опционально можно ввести и имя с почтовым адресом. Если создается сразу несколько учетных записей, удобнее после заполнения всех параметров нажимать кнопку «Create & Create Another». В этом случае после создания нового пользовательского бюджета появится снова окно настроек, иначе будет показано окно со свойствами учетной записи. Аналогично создаются и группы.
Параметров, как видите, немного, но если добавить плагин registration, появится новый пункт «Registration Properties», в котором можно активировать соответствующие пункты и затем указать IM контакты и адреса электронной почты, на которые будут отсылаться сообщения о новых пользователях, группу по умолчанию, в которую будет включен пользователь и приветствие после успешной регистрации.
Здесь же можно разрешить регистрацию через веб-форму, для чего пользователь должен будет зайти по адресу http://server:9090/plugins/registration/sign-up.jsp. Модуль userImpo=rtExport позволит экспортировать и импортировать пользователей в XML-файл.
Рисунок 3. Установленные плагины
Рисунок 4. Сертификаты сервера
Установленные плагины можно найти во вкладке «Plugins», где их можно перезапускать, удалять и просматривать информацию о назначении плагина. По умолчанию здесь только один обеспечивающий поиск пользователей, чтобы установить остальные, необходимо скачать их с сайта проекта и скопировать в подкаталог plugins. После чего их список появится в одноименной вкладке.
Многие пользователи уже имеют ICQ UIN, в этом случае необходимо будет настроить транспорт. Устанавливаем плагин gateway, после чего во вкладке Server появится новый пункт «Gateways». Выбираем «Setting» и устанавливаем флажок напротив ICQ. Нажав ссылку «Test» и кнопку «Test Connection», можно протестировать подключение к выбранному серверу ICQ. В «Options -> Encoding» указываем кодировку проходящих сообщений. По умолчанию использовать шлюз могут все, изменить такой порядок можно, выбрав «Permissions», где можно указать пользователей или группы, которым разрешена работа с шлюзом, либо ручная регистрация в подменю «Registrations». Чтобы связаться с корреспондентом через шлюз, достаточно указать его UIN в виде uin@jabber_server.com.
Настройка SSL
После установки сервера OpenFire самостоятельно создаст все необходимые (самоподписанные) сертификаты для используемого домена, их можно просмотреть в Server Certificates. Для организации SSL используется стандартная реализация Java. Ключи и сертификаты сервера сохраняются в стандартном хранилище сертификатов – keystore и используются для подтверждения полномочий. Возможно использование второй пары ключей truststore, с помощью которых проверяется подлинность клиентов. Если планируется работа через SSL, этого мало, необходимо включить соответствующие механизмы сервера. Для чего переходим во вкладку «System Properties» и, используя поле «Add new property», добавляем или включаем следующие параметры:
- xmpp.socket.ssl.active – true;
- xmpp.socket.ssl.port – порт для SSL обычно 5223;
- xmpp.socket.ssl.storeType – необязательное поле, означающее формат, по умолчанию используется jks;
- xmpp.socket.ssl.keystore – местонахождение файла keystore, если оставить пустым, будет использовано значение по умолчанию;
- xmpp.socket.ssl.keypass – пароль к keystore, по умолчанию changeit;
- xmpp.socket.ssl.truststore – расположение файла truststore относительно корневого каталога, если не планируется его использовать, оставьте пустым;
- xmpp.socket.ssl.trustpass – пароль к truststore.
Возможна ситуация, когда придется создавать ключи и сертификаты самому, также необходимо обязательно сменить пароль к keystore с changeit на что-то более безопасное. Это в принципе просто. Переходим в каталог ключей.
$ cd /opt/openfire/resources/security/
Сначала меняем пароль к keystore:
$ sudo keytool -storepasswd -keystore keystore
Вводим пароль changeit и затем новый, повторив его два раза. Удаляем старые сертификаты:
$ sudo keytool -delete -keystore keystore -alias rsa
$ sudo keytool -delete -keystore keystore -alias dsa
При желании это можно сделать и через веб-интерфейс. Теперь создаем новый сертификат:
$ sudo keytool -genkey -keystore keystore -alias grinder.com
Сначала вас спросят новый пароль keystore, а затем потребуется ввести некоторую информацию о сервере (организация, город, страна), как это обычно делается при создании любого сертификата. Перейдя по ссылке в «Signing Request» на странице «Server Certificates», можно занести всю информацию в файл, чтобы затем не вводить ее каждый раз. По окончании будет задан вопрос о пароле для доступа к ключу. Можно ввести другой пароль, нажатием на <Ente> установить такой же пароль, как и keystore.
Если планируется подпись сертификата сервера сторонней организацией, необходимо сгенерировать файл в стандартном формате CSR (Certificate Signing Request):
$ sudo keytool -certreq -keystore keystore -alias grinder.com -file grinder_com.csr
Этот запрос отсылается в любую выбранную службу сертификации. Подписанный сертификат импортируется командой:
$ sudo keytool -import -keystore keystore -alias grinder.com -file signed_ grinder_com.csr
Клиентские сертификаты в truststore импортируются также просто. Сначала меняем пароль (по умолчанию тот же changeit):
$ sudo keytool -storepasswd -keystore truststore
И теперь импортируем сертификат каждого клиента:
$ sudo keytool -import -keystore truststore -alias user1 -file user1_certificate_file
Как видите, OpenFire очень прост в установке и настройке. Привести его в рабочее состояние можно всего за пару часов, после чего вы забудите о многих проблемах, связанных с использованием ICQ или других внешних сервисов мгновенного обмена сообщениями.
Приложение
eJabberd
Еще одним популярным Jabber-сервером является eJabberd (http://www.process-one.net/en/ejabberd). Написан он на языке Erlang (http://erlang.org), который предназначен для создания отказоустойчивых распределенных приложений. Поэтому eJabberd изначально может работать в кластере, когда один домен физически обслуживает сразу несколько компьютеров, синхронизируя информацию через единую базу данных. Откомпилированные приложения выполняются в Erlang (JAM) emulator, в этом он несколько похож на Java. Поддерживаются все популярные сегодня операционные системы. Все настройки осуществляются путем внесения изменений в конфигурационный файл или через веб-интерфейс. Конфигурационный файл весьма понятен по структуре, хотя к его редактированию следует относиться весьма внимательно. Так как любая погрешность приведет к тому, что сервер будет работать не так, как надо. В настройках сервера есть свои особенности. Так, все изменения, произведенные через веб-интерфейс, заносятся сразу в базу данных, в конфигурационном файле они никак не отражаются. При наличии записей override_* они будут действительны до первой перезагрузки. В качестве базы данных используется Mnesia, хотя поддерживаются и некоторые другие – MySQL, PostgreSQL. Большинство возможностей реализовано из коробки. Для создания транспорта ICQ <-> Jabber понадобится PyICQt (http://pyicq-t.blathersource.org).
- Домашняя страница проекта IServerd – http://iserverd.khstu.ru.
- Список Jabber-серверов – http://www.jabber.org/software/servers.shtml.
- Домашняя страница проекта OpenFire – http://www.igniterealtime.org/projects/openfire.
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|