Пятница, 11 Май 2012 21:32

Установка и настройка сервера почты, фтп и жаббера, а также почтового шлюза. Этап 4.

Автор
Оцените материал
(7 голосов)

Этап 4. Настройка OpenFire.

Самым-самым первым делом, перед установкой openfire, отключим зимбровский встроенный IM. Делается это так:

su zimbra
zmprov mcf zimbraXMPPEnabled FALSE
exit
service zimbra restart

Ну, а уже дальше, скачаем OpenFire:

wget http://www.igniterealtime.org/downloadServlet?filename=openfire/openfire-3.7.1-1.i386.rpm

и установим его при помощи команды:

rpm -i openfire-3.7.1-1.i386.rpm

В качестве базы данных оупенфаера, мы будем использовать MySQL. Именно его, несмотря на то, что openfire имеет свою встроенную базу данных. Ибо мы ведь хотим чувствовать себя всемогущими Улыбаюсь Позже, сами поймёте, почему именно MySQL.

На самом деле, MySQL на нашем сервере уже стоит тот, что шёл в комплекте с Зимброй, но его мы не будем трогать. Поставим родной MySQL из репозиториев:

yum -y install mysql mysql-server

Перед запуском MySQL-сервера, перенесём его хранилище на наш диск с reiser4. Для этого, создадим папку /opt/mysql и назначим на неё сответствующие права:

mkdir /opt/mysql
chown mysql:mysql /opt/mysql

Затем, надо внести правку в файл /etc/my.cnf. Откроем его для редактирования и найдём в нём вот такую строчку:

datadir=/var/lib/mysql

Отредактируем её в соответствии с нашим новым путём:

datadir=/opt/mysql

Также, на всякий случай, изменим порт подключения к MySQL-серверу. Для этого, в этом же конфиге, прямо под названием секции [mysqld] пропишем строчку с портом 3307:

port=3307

Сохраним конфиг. И вот теперь запустим наш установленный MySQL-сервер:

service mysqld start

и поставим его в автозагрузку с помощью команды ntsysv.

Прежде всего, назначим пароль для мускульного суперпользователя:

mysql -u root
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('ваш_пароль');

И сразу создадим чистую базу для нашего openfire с нужной нам кодировкой:

CREATE DATABASE `openfire` CHARACTER SET utf8 COLLATE utf8_general_ci;

и, ради безопасности, создадим отдельного пользователя для подключения именно к этой базе:

GRANT ALL PRIVILEGES ON openfire.* TO 'openfire'@'localhost'
 IDENTIFIED BY 'my_password' WITH GRANT OPTION;

Выходим из консоли mysql командой quit. Чтобы зайти в вэб-консоль openfire, нужно открыть порт 9090 на фаерволе. Делаем это также, как и во всех предыдущих случаях:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 9090 -j ACCEPT

и, собственно, запустить сам openfire:

service openfire start

А вот здесь внимание! Если бы у нас была система x86, то openfire запустился бы гладко. Но у нас система x86_64, поэтому openfire не запустился и в логах выдал ошибку вот такого вида:

failed to run command `/opt/openfire/jre/bin/java': No such file or directory

Проблема решается установкой пакета zlib.i686:

yum -y install zlib.i686

Вот теперь, OpenFire-сервер запустится и зайти в его вэб-консоль можно по адресу:

http://192.168.199.101:9090

Нам откроется страничка, на которой предложится выбрать язык интерфейса. Выбираем русский и жмём «продолжить». На следующей страничке нам будут показаны установочные параметры сервера, где мы можем изменить порты для входа в вэб-админку и адрес сервера. Я ничего тут менять не стал. Жмём «продолжить». Далее, нам будет предложено выбрать используемую базу данных сервера. Мы выберем первый пункт «Стандартная База данных Связи». И вот тут нам надо будет указать серверу нашу подготовленную MySQL -базу. Смотрим скриншот:

 

Если вы всё правильно заполнили и OpenFire смог подключиться к базе, то после нажатия кнопки «продолжить» откроется следующая страничка, на которой будет предложено выбрать откуда брать пользователей: либо создавать их в своей базе, либо брать из AD/LDAP, либо вообще из Clearspace-сообщества. Я выбрал первый вариант — буду создавать пользователей и группы пользователей сам. И на последнем шаге будет предложено придумать и ввести пароль для администраторской учётки.

Создать пользователей, группы пользователей и прочие вещи, думаю, можно самостоятельно. Главное, не забыть потом открыть к серверу порты 5222, 5223 и остальные, если таковые захотите настроить.

Если вы будете использовать русскоязычные логины пользователей, то столкнётесь с проблемой кодировки. Но это поправимо. Находим файл /opt/openfire/conf/openfire.xml, а в нём находим вот такую строчку:

<serverURL>jdbc:mysql://localhost:3307/openfire</serverURL>

Правим её вот до такого вида:

<serverURL>jdbc:mysql://localhost:3307/openfire?characterEncoding=UTF-8</serverURL>

Затем, находим файлы:

/opt/openfire/plugins/admin/webapp/WEB-INF/admin.tld
/opt/openfire/plugins/admin/webapp/WEB-INF/web.xml
/opt/openfire/plugins/search/web/WEB-INF/web.xml

у них у всех в самом верху есть строчка:

<?xml version="1.0" encoding="ISO-8859-1"?>

Правим её вот до такого вида:

<?xml version="1.0" encoding="UTF-8"?>

во всех этих трёх файлах. После чего рестартуем openfire:

service openfire restart

Ну а теперь, я хочу описать настройку самого вкусного Улыбаюсь А самое вкусное будет заключаться в том, что вся переписка наших пользователей будет сохраняться в удобном читаемом виде на сервере. Более того! Мы установим к нашему серверу плагин, представляющий из себя icq-транспорт. Таким образом, у нас будет сохраняться ещё и вся переписка по аське! Но и это ещё не всё! Улыбаюсь Ведь не зря мы использовали базу MySQL — это нам позволит редактировать всю сохранённую переписку наших пользователей. И именно эта возможность нам и позволит себя чувствовать всемогущими. Ну что, уже потираете руки? Улыбаюсь

Заходим в вэб-консоль openfire и переходим на вкладку «плагины» и в меню слева выбираем «доступные плагины». Появится список доступных плагинов. Из него нам нужен Monitoring Service. Устанавливаем его. Второй нужный нам плагин отсутствует в этом списке. Его мы скачаем и установим вручную. Возьмём его от сюда:

http://sourceforge.net/projects/kraken-gateway/files/kraken-gateway/

Затем, в вэб-консоли, на вкладке «плагины» внизу в поле «Загрузить плагин» выберем наш скачанный плагин и нажмём «загрузить плагин». Таким образом, мы установили два плагина: один для сохранения переписки, а второй — для ICQ-транспорта. Но перед тем, как их настраивать и пользоваться ими, нам снова нужно разобраться с кодировкой.

Находим файлы:

/opt/openfire/plugins/monitoring/web/WEB-INF/web.xml
/opt/openfire/plugins/monitoring/web/WEB-INF/web-custom.xml
/opt/openfire/plugins/kraken/web/WEB-INF/web.xml
/opt/openfire/plugins/kraken/web/WEB-INF/web-custom.xml

В них также правим верхнюю строчку вот до такого вида:

<?xml version="1.0" encoding="UTF-8"?>

После чего не забываем перезапустить openfire.

Теперь, снова идём в консоль, заходим в меню «сервер», переходим на вкладку «Archiving» и уже слева в меню выбираем «Archiving Settings». Здесь ставим галки «Archive one-to-one chats» и «Archive group chats». Так мы настроили, чтоб у нас сохранялась переписка.
Теперь настроим ICQ-транспорт: Снова заходим в меню «сервер» и переходим на вкладку «Gateways». Ставим галку напротив ICQ, и у нас появятся кнопочки Tests, Options, Permissions. Жмём на Options и видим, что нам открылись некоторые настройки:

В поле Encoding записываем Windows-1251
В поле Host записываем login.icq.com

Сохраняем. Жмём на «Test» и на «Test connection». В ответ должны получить Success.

Теперь, надо бы всё это дело проверить. Вначале, проверим, подключаются ли к серверу клиенты. Я опробовал подключение на клиентах jajc и qutim:

 

 

А теперь, давайте посмотрим, как сохранилась история переписки:

 

Удобно, согласитесь? Теперь надо опробовать наш ICQ-транспорт. Рассмотрим настройку на клиенте qip infium. Допустим, у нас есть некий Иванов Иван Иваныч, и у него есть настроенная учётная запись на нашем OpenFire-сервере. Настраиваем подключение XMPP в инфиуме как обычно и выходим в онлайн. Теперь, чтобы наш Иванов И.И. Смог воспользовался ICQ-трансопртом, делаем следующее: Нажмём на кнопку статуса и выберем транспорты сервера.

И в открывшемся окне увидим наш транспорт. Жмём на нём правой клавишей мыши и выбираем регистрацию:

 

Появится окошко, в котором надо ввести учётные данные ICQ — номер и пароль аськи. После того, как это сделаем, у нас выйдет сообщение об успешной регистрации. И в списке контактов появятся группы и пользователи ICQ:

А теперь снова идём в вэб-консоль сервера и смотрим историю:

  

Вот именно таким образом и можно контролировать не только переписку по внутренней системе обмена мгновенными сообщениями, но переписку по ICQ. Но для, этого, конечно же, надо настроить выход в асю через ICQ-транспорт нашего сервера, как показано выше. Ну, а для того, чтоб пользователи не могли выйти в ICQ классическими методами, нужно на фаерволе закрыть порты 5190, 443, 80, 8080 и на прокси-сервере, если таковой имеется, запретить доступ к ICQ-серверам. Часть списка ICQ-серверов можно найти в программе qip:

 

А сейчас, я опишу, как можно, довольно удобным образом, редактировать историю разговора, сохранённого на сервере. А также, сделаем скрипт, который просто будет стирать из базы данных диалоги с участием того или иного пользователя. Например, он пригодится, если админ не хочет, чтоб сохранялась его переписка с пользователями. Но, всё по порядку.

Для удобного редактирования переписки нам нужно установить к себе на рабочий компьютер программу MySQL Workbehch. На своей линукс-машине я её установил из репозиториев. На виндовых рабочих станциях MySQL Workbehch можно установить, скачав его с официального сайта:

http://www.mysql.com/downloads/workbench

Далее, нам надо настроить наш MySQL-сервер, чтоб к нему можно было подключиться удалённо. Для этого, найдём файл /etc/my.cnf и в его конец допишем две строчки:

bind-address=127.0.0.1
bind-address=<ip адрес вашей машины, с которой будете подключаться к базам mysql через Workbehch>

Но это ещё не всё. На сервере, с консоли, зайдём в mysql:

mysql -u root -p

и выполним вот такой запрос:

select host, user from mysql .user;

и увидим вот такую табличку:

+----------------------+----------+
| host                 | user     |
+----------------------+----------+
| 127.0.0.1            | root     |
| localhost            |          |
| localhost            | openfire |
| localhost            | root     |
+----------------------+----------+

В которой видно, что root может подключаться только с локального хоста. Чтобы позволить руту подключаться с любого хоста, выполним команду:

update mysql .user set host='%' where host='127.0.0.1';

После чего, рестартуем mysql и openfire:

service mysqld restart
service openfire restart

Вот теперь открываем наш MySQL Workbehch и коннектимся через него к нашему серверу, не забывая, при этом, открыть нужный порт на iptables:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3307 -j ACCEPT

Подключившись к серверу, мы увидим базы данных test и нашу openfire. В базе данных openfire нам надо найти таблицу под названием ofMessageArchive. Щёлкаем на ней правой клавишей мыши и выбираем «Alter Table...». Затем, в появившемся окне, переходим на вкладку Columns и ставим галочку «PK» для двух полей: conversationId и sendDate:

И нажимаем кнопку «apply». Затем, снова щёлкаем правой клавищей на таблице ofMessageArchive и выбираем «Edit Table Data». И нам откроется табличка с архивом переписки, в которой мы можем отредактировать эту переписку. Например, я у себя заменю фразу «проверка связи» на фразу «это провокация!»:

И нажмём кнопочку с зелёной галочкой под названием «Apply changes to data». А затем, зайдём в нашу вэб-консоль openfire и посмотрим историю переписки:

Вот она! Мечта гадкого тролля! Улыбаюсь

А теперь, напишем скриптик, который будет убивать все записи, содержащие, например, «иванов_и_и». Создадим в любом удобном для нас месте пустой файл и наполним его вот таким содержимым:

#!/bin/bash

mysql openfire -e "delete from ofMessageArchive where (fromJID LIKE '%иванов_и_и%' OR toJID LIKE '%иванов_и_и%');" -u root --password=ваш_парль_root_на_mysql --default-character-set=utf8
mysql openfire -e "delete from ofConParticipant where (bareJID LIKE '%иванов_и_и%');" -u root --password=ваш_парль_root_на_mysql --default-character-set=utf8

Затем, сохраним этот файл (я ему дал имя clear_me) и сделаем его исполняемым:

chmod +x clear_me

Для того, чтобы этот скрипт срабатывал систематично, нужно в каталоге /root создать файлик с именем, например, «cron_clear_me» и заполнить его вот таким содержимым:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

*/5 * * * * /home/clear_me

А затем, надо набрать команду:

crontab /root/cron_clear_me

После этого, в каталоге /var/spool/cron будет создан файл "root" с таким же содержимым, что и файл /root/cron_clear_me. Это означает, что каждые пять минут каждого часа будет запускаться скрипт clear_me и чистить пользователя «иванов_и_и» в архиве переписки.

На этом, настройку первого сервера тоже можно считать завершённой.

Возможно, что в этой статье я где-то допустил мелкие неточности. По мере их выявления, буду вносить правки в статью. А так, всё должно прекрасно работать.

Перейти обратно на:
Этап 1
Этап 2
Этап 3

Прочитано 23727 раз Последнее изменение Воскресенье, 10 Февраль 2013 18:46

You have no rights to post comments

Вы здесь: Home Мои статьи Linux Fedora/CentOS/RedHat Установка и настройка сервера почты, фтп и жаббера, а также почтового шлюза. Этап 4.