Доброго времени суток!
В этой статье я хочу описать установку и настройку связки из двух серверов. Первый -- сервер, предоставляющий такие повседневные сервисы, как электронная почта, ФТП и обмен мгновенными сообщениями. Всё это на одном сервере потому, что далеко не все админы имеют великое благо — выделенный сервер для каждого сервиса. Второй сервер будет из себя представлять почтовый шлюз + NAT-сервер для первого сервера. Его функции будут следующие: фильтр электронной почты на глобальном уровне и защита первого сервера от внешней сети. Схема их расположения будет выглядеть примерно так:
В моём случае, в местной локальной сети также присутствуют Windows-серверы, выполняющие роль Active Directory и DNS-серверов. На схеме я их не стал указывать.
Для того, чтобы одна только Zimbra работала без тормозов, понадобится довольно неплохое железо, это написано на оф.сайте Зимбры:
http://files.zimbra.com/website/docs/7.0/zcs-system-requirements-7.1.2.pdf
Ну, а поскольку, здесь же, у нас на первом сервере будут ещё ФТП-сервер и OpenFire-сервер, то требования к железу должны быть ещё выше. А вот для второго сервера нам нужно будет совсем немного. Для настройки первого сервера лучше использовать два жёстких диска. Один под систему, а второй, непосредственно, для наших предоставляемых сервисов. Операционная система, для всего этого, будет использоваться Fedora 13 x86_64.
Этап 1. Общая подготовка сервера.
При установке самой системы будем выбирать почти самый минимум компонентов:
Базовая система:
- Основные
- Поддержка оборудования
- Системные средства. Но зайдём внутрь и оставим галки лишь на тех компонентах, которые нам могут понадобиться:
- mc
- ntp
- samba-client
- yum-utils
Больше нам пока ничего не понадобится. Тем не менее, если на этом этапе мы что-то упустили, то это можно будет поправить позже. Устанавливаем.
После того, как система установилась, надо установить самые свежие обновления. Для этого нам нужно, чтобы наш сервер имел доступ в интернет. Сначала настроим сетевой интерфейс. Логинимся под root и набираем команду:
mc
Запустится консольный файловый менеджер. Находим файл /etc/sysconfig/network-scripts/ifcfg-eth0, ставим на него курсор и жмём F4 — откроется содержимое этого файла с возможностью редактирования. Приводим содержимое этого файла примерно вот к такому виду:
DEVICE=eth0
HWADDR=08:00:27:05:1E:FB # mac-адрес сетевого интерфейса
ONBOOT=yes
IPADDR=192.168.199.101 # ваш ip-адрес
NETMASK=255.255.255.0 # ваша маска сети
GATEWAY=192.168.199.2 # ваш шлюз
DNS1=192.168.199.202 # ваш DNS-сервер
DNS2=192.168.199.199 # ваш альтернативный DNS-сервер
SEARCH="mydomain.domain" # ваш локальный домен Active Directory, если есть
DOMAIN="mydomain.domain" # ваш локальный домен Active Directory, если есть.
Сохраняем и перезагружаем систему командой reboot. После загрузки проверяем, что сеть работает:
ping 192.168.199.2
Если пинг пошёл, значит всё хорошо.
Если у вас в сети есть прокси-сервер, и доступ в интернет осуществляется через него, а не напрямую через 80-ый порт, то необходимо в файле /etc/yum.conf дописать следующее:
proxy=http://192.168.199.2:3128 # в таком виде надо прописывать адрес прокси и его порт
proxy_username=myuser # В случае, если необходима авторизация, то прописываем логин
proxy_password=mypass # и пароль
Всё, теперь пробуем обновиться. Важно! Сначала надо обновить сам менеджер пакетов yum! На практике встречалось, что обновление может не пойти, пока не обновишь сам yum. Итак, делаем:
yum -y update yum
И вот только после этого запускаем обновление всей системы:
yum -y update
После успешного обновления надо перезагрузить систему.
Теперь, пришло время немного подстраховаться на некоторые случаи жизни. Желательно запретить заходить на сервер под суперпользователем через ssh. Откроем файл /etc/ssh/sshd_config, в нём раскомментируем и отредактируем строчку:
PermitRootLogin no
Сохраним файл. Теперь, через ssh мы на сервер сможем зайти только под любым обычным пользователем. Кстати, давайте его и создадим:
useradd admin
passwd admin
Мы добавили пользователя admin и назначили ему пароль.Не забудем перезапустить демон sshd:
service sshd restrat
Вторая подстраховка, которую необходимо сделать — это посадить сервер на ИБП и настроить его автовыключение при низком заряде батареи. Для этого мы возьмём ИБП APC Back-UPS ES 525 и программу Apcupsd. Будем считать, что вы уже подключили ИБП к серверу через USB-интерфейс. Теперь, устанавливаем Apcupsd:
yum -y install apcupsd
Для настройки Apcupsd я воспользовался вот этой статьёй. Итак, после установки программы, отрываем файл /etc/apcupsd/apcupsd.conf и правим там лишь некоторые строчки:
BATTERYLEVEL 10
# уровень заряда батареи, при котором сервер начнёт выключаться
MINUTES 8
# оставшееся время работы батареи, меньше которого сервер начнёт выключаться
NISIP 127.0.0.1
Наберём команду ntsysv и отметим в меню apcupsd, чтоб этот сервис запускался при запуске сервера. После этого, можно продолжать, не опасаясь проблем с электричеством.
Чтобы у нас во время установки и настройки не возникло каких-либо непонятных проблем, нужно перевести в разрешающий режим систему принудительного контроля доступа SELinux. Находим файл /etc/selinux/config , находим в нём строчку SELINUX=enforcing и меняем её на SELINUX=permissive.
Далее, пригодится и синхронизация времени с контроллерами домена. Найдём файл /etc/ntp.conf, а в нём найдём строки:
server 0.fedora.pool.ntp.org
server 1.fedora.pool.ntp.org
server 2.fedora.pool.ntp.org
и заменим их на строчки, в которых серверами NTP будут указаны контроллеры домена:
server 192.168.199.202
server 192.168.199.199
Сохраняем и включаем демон ntpd в автозагрузку:
chkconfig ntpd on
И сейчас надо перезагрузить систему.
Для того, чтобы производительность наших сервисов была выше, я решил использовать файловую систему Reiser4 на втором жёстком диске. Но для того, чтобы её можно было создать и использовать в нашей операционной системе, нам нужно будет собрать ядро с поддержкой Reiser4 и установить библиотеки с утилитой для Reiser4.
Начнём с того, что соберём ядро с поддержкой Reiser4. О том, как пересобрать ядро, мне пришлось почитать wiki вот тут, а также обратиться за помощью на юниксфорум. Сейчас я пошагово распишу, как собрать ядро с поддержкой Reiser4 для Fedora 13. Для начала, установим пару пакетов:
yum -y install rpmdevtools yum-utils
Дальнейшие действия надо производить не от суперпользователя, а от обычного пользователя. Для этого, залогинимся под недавно созданным пользователем admin и скачаем src.rpm-ку текущего ядра системы:
yumdownloader --source kernel
Скачается файл kernel-2.6.34.9-69.fc13.src.rpm. Затем, выполняем последовательность команд:
rpmdev-setuptree
su -c 'yum-builddep kernel-2.6.34.9-69.fc13.src.rpm' # вводим пароль от root после этой команды
rpm -Uvh kernel-2.6.34.9-69.fc13.src.rpm
cd ~/rpmbuild/SPECS
rpmbuild -bp --target=$(uname -m) kernel.spec
Затем, нам надо перейти в каталог ~/rpmbuild/SOURCES и скачать туда патч для ядра, который обеспечит поддержку файловой системы reiser4:
cd ~/rpmbuild/SOURCES
wget http://mirror.yandex.ru/kernel.org/linux/kernel/people/edward/reiser4/reiser4-for-2.6/reiser4-for-2.6.34.patch.bz2
Далее, в этом же каталоге надо найти файл config-generic и открыть его для правки. Нам нужно найти строчку CONFIG_REISERFS_FS=m. Перед ней добавим две вот такие строчки:
CONFIG_REISER4_FS=m
# CONFIG_REISER4_DEBUG is not set
Теперь нам надо перейти в каталог ~/rpmbuild/SPECS и открыть для редактирования файл kernel.spec. В нём находим строчку:
# % define buildid .local
и правим её вот до такого вида:
%define buildid .reiser4
Далее, нам надо найти блок кода, который содержит множество строчек, начинающихся как: PatchXX: PatchXXX: PatchXXXX: , где иксы — это цифры, идущие по возрастанию. В том месте, где эти строчки заканчиваются, мы добавим свои аналогичные строчки:
# reiser4
Patch999: reiser4-for-2.6.34.patch.bz2
Затем, находим ещё один блок строчек, начинающихся c ApplyPatch. И также добавим свои аналогичные строчки в том месте, где те заканчиваются:
# 999
ApplyPatch reiser4-for-2.6.34.patch.bz2
Сохраняем наше редактирование. Осталось запустить сборку. Находясь прямо в этом же каталоге ~/rpmbuild/SPECS, выполняем команду:
rpmbuild -bb --without debuginfo --target=`uname -m` kernel.spec
Дожидаемся окончания сборки — она будет идти долго. На моём не самом мощном компьютере это длилось почти весь день. Но когда сборка, всё же таки, закончится, то в каталоге ~/rpmbuild/RPMS/x86_64 появятся готовые rpm-пакеты для установки. Установить наше свежесобранное ядро нужно вот такой последовательностью команд:
su -c "rpm -Uvh kernel-headers-2.6.34.9-69.reiser4.fc13.x86_64.rpm"
su -c "rpm -ivh kernel-2.6.34.9-69.reiser4.fc13.x86_64.rpm kernel-devel-2.6.34.9-69.reiser4.fc13.x86_64.rpm"
После чего, перезагрузим систему. Когда сервер загрузится, то нам надо убедиться, что система работает уже на нашем новом ядре и что модуль поддержки Reiaer4 в нём действительно есть. Сделаем это по порядку. Сначала убедимся, что ядро наше. Введём:
uname -r
Если вывод будет такой: 2.6.34.9-69.reiser4.fc13.x86_64 , то система загрузилась с нашим ядром. Теперь убедимся, что модуль reiser4 присутствует:
modinfo reiser4
Если вывод такой:
filename: /lib/modules/2.6.34.9-69.reiser4.fc13.x86_64/kernel/fs/reiser4/reiser4.ko
license: GPL
author: Hans Reiser <Reiser@Namesys.COM>
description: Reiser4 filesystem
srcversion: 09AFD392BB13E78F9568A62
depends: zlib_deflate,lzo_compress
vermagic: 2.6.34.9-69.reiser4.fc13.x86_64 SMP mod_unload
то модуль reiser4 есть. Теперь попробуем его включить командой:
modprobe -v reiser4
и должны увидеть вот это:
insmod /lib/modules/2.6.34.9-69.reiser4.fc13.x86_64/kernel/lib/zlib_deflate/zlib_deflate.ko
insmod /lib/modules/2.6.34.9-69.reiser4.fc13.x86_64/kernel/lib/lzo/lzo_compress.ko
insmod /lib/modules/2.6.34.9-69.reiser4.fc13.x86_64/kernel/fs/reiser4/reiser4.ko
Похоже, что с ядром всё в порядке. Теперь настало время собрать и установить библиотеки и утилиту для Reiser4. Перейдём в удобный для нас каталог и скачаем:
wget http://mirror.yandex.ru/kernel.org/linux/utils/fs/reiser4/libaal/libaal-1.0.5.tar.bz2
Эта специальная библиотека, которая нужна для работы утилиты reiser4progs. Итак, мы скачали исходники библиотеки libaal. Перед тем, как её собирать и устанавливать, нам надо установить некоторые пакеты, иначе сборка не пойдёт. Выполним:
yum -y install gcc-c++ glibc-static
Теперь соберём и установим libaal:
tar xvf libaal-1.0.5.tar.bz2
cd libaal-1.0.5
./configure
make
make install
После успешной установки библиотеки libaal, точно также скачаем, соберём и установим утилиту для создания файловой системы reiser4:
wget http://mirror.yandex.ru/kernel.org/linux/utils/fs/reiser4/reiser4progs/reiser4progs-1.0.7.tar.bz2
tar xvf reiser4progs-1.0.7.tar.bz2
cd reiser4progs-1.0.7
./configure
make
make install
Теперь, настало время создать на втором жёстком диске раздел с файловой системой reiser4 и примонтировать его в нужное место. Для начала, нам нужно выяснить, под какой буквой наш второй жёсткий диск числится в системе. Обычно, это можно сделать с помощью команды:
dmesg | grep sd
В моём случае, второй жёсткий диск в системе получил название /dev/sda. И в моём случае, этот жёсткий диск не пустой — на нём имеется раздел ntfs, который мне не нужен и который я собираюсь удалить смело. Выполняю команду:
cfdisk /dev/sda
Откроется консольная утилита с довольно понятным интерфейсом, при помощи которой я удалю все существующие разделы на втором жёстком диске. А дальше, уже как будет вам удобнее. Можно на диске создать новый раздел, чтоб потом отформатировать его в reiser4, а можно и не создавать никаких разделов и сразу весь жёсткий диск отформатировать под reiser4. Я, всё-таки, создам раздел sda1, опять же, при помощи cfdisk. Теперь, отформатируем наш раздел в reiser4, включив опцию прозрачного сжатия lzo на файловой системе:
mkfs.reiser4 -o create=ccreg40,compress=lzo1 /dev/sda1
Теперь, осталось только настроить монтирование нашего раздела с Reiser4 к папке /opt. Потому что, именно в эту папку будет устанавливаться zimbra, openfire, и именно в этой папке мы разместим наше будущее фтп-хранилище. Находим файл /etc/fstab и в конце добавим вот такую строчку:
/dev/sda1 /opt reiser4 defaults 0 2
Для чистоты эксперимента, сначала примонтируем этот раздел вручную:
mount /dev/sda1 /opt
и создадим в папке /opt какой-нибудь файл с любым содержимым, например файл «234» с какой-нибудь билибирдой. Теперь, перезагрузим систему. А после загрузки, снова зайдём в каталог /opt и посмотрим, есть ли там наш файл «234». Если есть, то всё отлично :) Ну, и, на всякий случай, выполним команду:
mount
Эта команда покажет, что, в текущий момент, и куда примонтировано. И где-то в серединке, ближе к концу, этого списка как раз и должен быть наш:
/dev/sda1 on /opt type reiser4 (rw)
Если так оно и есть, то можно приступать к следующему глобальному шагу. А именно, к установке и настройке Zimbra.
Этап 2. Установка и настройка Zimbra и почтового шлюза.
Непосредственно, перед самой установкой, нам нужно убедиться, что для зимбры есть MX-запись на местном DNS-сервере. Как я уже сказал вначале, зимбра у меня находится в местной локальной сети, в которой присутствуют виндовые DNS-серверы. На них я и создал узел superserv.mydomain.domain и MX-запись для этого узла. На самом же нашем сервере нужно проверить, чтобы в файле /etc/sysconfig/network была запись:
HOSTNAME=superserv.mydomain.domain
А в файле /etc/hosts были записи вот такие:
127.0.0.1 localhost
192.168.199.101 superserv.mydomain.domain superserv
А в файле /etc/resolv.conf были записи:
search mydomain.domain
nameserver 192.168.199.202
nameserver 192.168.199.199
где 192.168.199.202 и 192.168.199.199 — ДНС-серверы, на которых и созданы вышеописанные записи.
Если всё в порядке, то копируем дистрибутив зимбры с официального сайта на наш сервер. В моём случае, это была версия zcs-7.1.2_GA_3268.F13_64. Распаковываем архив в удобное место, заходим в распакованный каталог и вводим команду:
./install.sh
Запустится установщик. На первый вопрос, принимаем ли мы условия лицензии, ответим положительно:
Do you agree with the terms of the software license agreement? [N] y
Далее, установочный скрипт спросит, какие компоненты устанавливать. Я выбрал все, кроме zimbra-proxy:
Select the packages to install
Install zimbra-ldap [Y] y
Install zimbra-logger [Y] y
Install zimbra-mta [Y] y
Install zimbra-snmp [Y] y
Install zimbra-store [Y] y
Install zimbra-apache [Y] y
Install zimbra-spell [Y] y
Install zimbra-memcached [N] y
Install zimbra-proxy [N] n
Далее, скрипт просит подтверждения на установку выбранных компонентов:
The system will be modified. Continue? [N] y
После чего, начнут устанавливаться зимбровские пакеты. Ждём окончания этого процесса. В процессе установки скрипт может пожаловаться на отсутствие MX записи:
DNS ERROR resolving MX for superserv.mydomain.domain
It is suggested that the domain name have an MX record configured in DNS
Change domain name? [Yes]
Поскольку MX запись у меня создана для mydomain.domain и указывает на superserv.mydomain.domain – соглашаемся на изменение домена и указываем правильное доменное имя
Create domain: [superserv.mydomain.domain] mydomain.domain
Дальше скрипт выведет длинный список меню:
Main menu
1) Common Configuration:
2) zimbra-ldap: Enabled
3) zimbra-store: Enabled
+Create Admin User: yes
+Admin user to create: admin@mydomain.domain
******* +Admin Password UNSET
+Anti-virus quarantine user: virus-quarantine.mttmfn6gpb@mydomain.domain
+Enable automated spam training: yes
+Spam training user: spam.8tky4grlm0@mydomain.domain
+Non-spam(Ham) training user: ham.sgd5cmme6x@mydomain.domain
+SMTP host: superserv.mydomain.domain
+Web server HTTP port: 80
+Web server HTTPS port: 443
+Web server mode: http
+IMAP server port: 143
+IMAP server SSL port: 993
+POP server port: 110
+POP server SSL port: 995
+Use spell check server: yes
+Spell server URL: http://superserv.mydomain.domain:7780/aspell.php
+Configure for use with mail proxy: FALSE
+Configure for use with web proxy: FALSE
+Enable version update checks: TRUE
+Enable version update notifications: TRUE
+Version update notification email: admin@mydomain.domain
+Version update source email: admin@mydomain.domain
4) zimbra-mta: Enabled
5) zimbra-snmp: Enabled
6) zimbra-logger: Enabled
7) zimbra-spell: Enabled
8) Default Class of Service Configuration:
r) Start servers after configuration yes
s) Save config to file
x) Expand menu
q) Quit
Здесь, в первую очередь, надо изменить пароль админской учётки. Выбираем цифру 3, затем 4 и вводим админский пароль. Затем, в целях безопасности, я выбрал цифру 12 и указал режим веб-сервера: redirect. Это означает, что если пользователь зашёл через http://, то он будет переключён на https:// до конца сессии. Затем, выбираем r, а после неё — a. И, кстати сказать, нужно запомнить порты, по которым мы будем подключаться к зимбре. Их потом надо будет открыть на iptables.
На последующие вопросы установочного скрипта отвечаем положительно:
Save configuration data to a file? [Yes] y
Save config in file: [/opt/zimbra/config.11806] y
The system will be modified - continue? [No] y
И ждём, пока скрипт закончит конфигурировать зимбру. В конце скрипт спросит, желаете ли вы уведомить компанию Zimbra о инсталяции их продукта на вашем сервере. Я отказался:
Notify Zimbra of your installation? [Yes] n
После этого, скрипт стартует зимбровские сервисы, устанавливает зимлеты и выполняет прочие действия. По окончании всего, мы получим уведомление:
Configuration complete - press return to exit
После установки, откроем нужные порты на iptables, чтобы к нашей зимбре можно было подключаться. Найдём файл /etc/sysconfig/iptables, найдём в нём строчку:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
и над ней, либо под ней введём вот такие строчки:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 143 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 993 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 110 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 995 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7071 -j ACCEPT
Затем, перезапустим фаервол командой:
service iptables restart
Чтобы зайти в административную консоль Zimbra, нужно в браузере ввести адрес:
https://192.168.199.101:7071/zimbraAdmin
Остальные настройки Зимбры пока не будем рассматривать. Отложим её до тех пор, пока не настроим второй сервер. Вот тогда уже будем настраивать почтовую систему целиком.
Приступим к настройке второго сервера — почтового шлюза.
Для второго сервера, я использовал старенький, но добрый компьютер, который некогда покупался за весьма приличные деньги:
Intel Pentium 4 2000Mhz
Asus P4T-E
RAM 256Mb RIMM
GeForce 4 MX440 (Хотя, видеокарта тут не играет никакой роли)
+ установил новый жёсткий диск, новый блок питания и две сетевые карты.
При установке Fedora 13 i386 на этот комп у меня даже не запустилась привычная anaconda (графический интерфейс установки Fedora). Поэтому, вся установка была выполнена в консольном режиме. При этом, выбор устанавливаемых пакетов предоставлен не был. Из-за этого, установленная система состояла из самого-самого минимума. Тем не менее, обе сетевые карты благополучно распознались и заработали.
Итак, давайте сразу определимся, что сетевуха eth0 подключена к интернету и имеет белый адрес. На этот белый адрес у нас уже зарегистрирован домен второго или третьего уровня и к нему имеются MX- и PTR-записи. И пусть он называется test.mydomain.ru. Ну, а сетевая карта eth1 подключена к локальной сети и пусть имеет адрес 192.168.199.150.
На этом сервере, также, как и на первом, стоит выполнить те же самые операции, касающиеся обновлений, Selinux, ssh, apcupsd и ntp. Нужно это всё настроить также, как и на первом сервере.
После чего, установим postfix и webmin заодним:
yum -y install postfix
wget http://prdownloads.sourceforge.net/webadmin/webmin-1.560-1.noarch.rpm
rpm -i webmin-1.560-1.noarch.rpm
и откроем порты 25 и 10000, добавив в конфиг файервола строчки:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10000 -j ACCEPT
Не забываем перезапустить iptables. После чего, найдём файл /etc/postfix/main.cf и приведём его вот к такому виду:
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
# имя хоста почтового шлюза. Это имя будет использоваться в течении сессии ehlo/helo smtp:
myhostname = test.mydomain.ru
# наш домен
mydomain = mydomain.ru
# подставляется к адресу отправителя или получателя если он указан не полностью.
myorigin = $myhostname
# сетевые интерфейсы, с которыми может работать postfix
inet_interfaces = all
# протоколы IPv4 и, если возможно, IPv6
inet_protocols = all
# Задаём имена доменов, для которых мы будем принимать почту
mydestination = $myhostname, localhost
# Так как на шлюзе требуется только пересылка почты, отключаем локальную доставку сообщений
local_recipient_maps =
# когда получатель почты неизвестен серверу, то шлём ответ "отклонить"
unknown_local_recipient_reject_code = 550
# сети, которым разрешено выполнять пересылку через данный сервер. Обычно сюда включают только внутреннюю локальную сеть, или вообще только IP внутреннего почтового сервера.
mynetworks = 192.168.199.101, 127.0.0.1
# в данной директиве определяем домены, для которых необходимо принимать почту.
relay_domains = $mydestination
# в этом файле мы укажем, на какой хост доставлять сообщения для домена test.mydomain.ru
transport_maps = hash:/etc/postfix/transport
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mail_spool_directory = /var/spool/mail
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.7.4/samples
readme_directory = /usr/share/doc/postfix-2.7.4/README_FILES
# В этом файле мы укажем, что нужно префикс @mydomain.domain менять на @test.mydomain.ru
smtp_generic_maps = hash:/etc/postfix/generic
Сохраняем этот конфиг. Затем, нам надо внести правки ещё в пару файлов. Найдём файл /etc/postfix/generic и в самый его конец добавим вот такую строчку:
@mydomain.domain @test.mydomain.ru
Сохраним и выполним вот такую команду:
postmap hash:/etc/postfix/generic
Нечто похожее проделаем с файлом /etc/postfix/transport. В его конец мы добавим строчку вот такую:
test.mydomain.ru smtp:[192.168.199.101]
Сохраним и выполним команду:
postmap hash:/etc/postfix/transport
Кое-что ещё: перед запуском postfix, сначала остановим демон sendmail:
service sendmail stop
Также, введём команду ntsysv и уберём sendmail из автозагрузки, а postfix же, наоборот, поставим в автозагрузку. Вот после этого, постфикс можно запустить:
service postfix start
Теперь, что касается настроек зимбры. В настройках первого сервера делаем также, как на этом скриншоте:
Только в список доверенных сетей агента передачи данных добавим ещё и наш почтовый шлюз. Вот такой этот список должен быть:
127.0.0.1/8 192.168.199.101/32 192.168.199.150/32
Кое-что нам нужно будет добавить в конфиг зимбровского postfix. Этот конфиг находится вот тут: /opt/zimbra/postfix-2.7.4.2z/conf/main.cf. В его конец мы добавим строчку:
smtp_generic_maps = hash:/opt/zimbra/postfix-2.7.4.2z/conf/generic
Это нужно для преобразования адресов @test.mydomain.ru в @mydomain.domain. Ну а в файл /opt/zimbra/postfix-2.7.4.2z/conf/generic пропишем:
@test.mydomain.ru @mydomain.domain
Затем, выполним команду:
/opt/zimbra/postfix-2.7.4.2z/sbin/postmap hash:/opt/zimbra/postfix-2.7.4.2z/conf/generic
После чего, перезапустим зимбру командой:
service zimbra restart
Надо сказать, что, после перезапуска зимбры, не все её процессы потом запускаются снова. Поэтому, для подстраховки, я всегда проверяю их вот таким методом:
su zimbra
zmcontrol status
И если в ответ вижу что-то типа:
antispam Running
antivirus Stopped
zmclamdctl is not running
ldap Running
logger Running
mailbox Running
memcached Running
mta Running
snmp Running
spell Running
stats Running
zmconfigd Running
то выполняю команду:
zmcontrol start
Как правило, после этого все незапустившиеся процессы стартуют, и можно продолжать работать. Только не забываем, после этого, выходить из сеанса пользователя zimbra командой exit.
Вот таким образом у нас будет работать зимбра через почтовый шлюз. Но это ещё далеко не всё, что нам надо. Следующим шагом мы настроим наш второй сервер так, чтоб он NATил трафик для первого сервера.
Первым делом, на втором сервере нам надо включить форвардинг и некоторые модули для iptables. Находим файл /etc/sysctrl.conf и поправим там одну строчку:
net.ipv4.ip_forward = 1
Также, сделаем вот такую команду:
echo "1" > /proc/sys/net/ipv4/ip_forward
Таким образом мы включили forwarding пакетов в iptables. Теперь, найдём файл /etc/sysconfig/iptables-config. В нём тоже приведём соответствующую строчку вот в такой вид:
IPTABLES_MODULES="nf_conntrack_ftp ip_nat_ftp"
Эти модули нам будут нужны для корректной работы с ФТП, который мы ещё не настроили пока. Сейчас же можно приступать к настройке Iptables. Приведём файл /etc/sysconfig/iptables вот к такому виду:
*nat
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# это правило позволяет первому серверу выходить наружу по определённым портам.
-A POSTROUTING -p tcp -m tcp -m multiport -s 192.168.199.101 -o eth0 -j SNAT --to-source <ваш.белый.ip.адрес> --dports 80,8080,21
# а правила ниже позволяют извне заходить на наш первый сервер. (тоже, лишь по определённым портам)
-A PREROUTING -p tcp -m tcp -d <ваш.белый.ip.адрес> --dport 21 -j DNAT --to-destination 192.168.199.101:21
-A PREROUTING -p tcp -m tcp -d <ваш.белый.ip.адрес> --dport 49152:65534 -j DNAT --to-destination 192.168.199.101:49152-65534
-A PREROUTING -p tcp -m tcp -d <ваш.белый.ip.адрес> --dport 80 -j DNAT --to-destination 192.168.199.101:80
-A PREROUTING -p tcp -m tcp -d <ваш.белый.ip.адрес> --dport 443 -j DNAT --to-destination 192.168.199.101:443
COMMIT
*filter
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
-A FORWARD -i lo -j ACCEPT
# правило ниже позволяет пропускать форвардируемый трафик из локалки во внеху.
-A FORWARD -i eth1 -j ACCEPT
# два правила ниже позволяют пропускать форвардируемый извне трафик через наш фаервол (по определённым портам)
-A FORWARD -p tcp -m tcp -m multiport -m state -i eth0 --state NEW,ESTABLISHED,RELATED -j ACCEPT --dports 21,80,8080,443
-A FORWARD -p tcp -m tcp -m state -i eth0 --dport 49152:65534 --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -m state --state ESTABLISHED -j ACCEPT
# не забываем открыть 25 порт, чтоб извне почта доходила до нашего почтового шлюза.
-A INPUT -p tcp -m tcp -i eth0 --dport 25 -j ACCEPT
-A INPUT -m state --state ESTABLISHED -j ACCEPT
-A FORWARD -m state -s 127.0.0.1 --state RELATED -j ACCEPT
-A INPUT -m state -s 127.0.0.1 --state RELATED -j ACCEPT
-A INPUT -j DROP
-A FORWARD -j DROP
COMMIT
*mangle
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
Сохраним и перезапустим iptables. После чего, у нас должен появиться проброс портов извне. Иными словами, если бы зайдём по адресу ftp://<ваш.белый.ip.адрес>, то попадём на наш фтп-сервис, который потом настроим на первом сервере. Аналогично и если мы зайдём по адресу http://<ваш.белый.ip.адрес> — мы попадём в вэб-интерфейс зимбры.
Последнее, что нам нужно от второго сервера — это глобальный почтовый фильтр. И будем мы это делать с помощью недавно установленного вебмина. Но перед этим, на всякий случай, проверьте, установлен ли у вас пакет procmail. Если не установлен, то установим командой:
yum -y install procmail
Теперь, заходим в вэбмин. Слева в меню выбираем servers, а в нём -- Procmail Mail Filter. И там сразу видим вот такое предупреждение: Warning - any rules defined below will not be used : Procmail is not enabled in your Postfix configuration. The configuration file /etc/postfix/main.cf must have the mailbox_command option set to /usr/bin/procmail. Это означает, что наш postfix не настроен на работу с procmail. Для того, чтобы это исправить, найдём в файле /etc/postfix/main.cf строчку:
# mailbox_command = /some/where/procmail
И справим её на:
mailbox_command = /usr/bin/procmail
Затем, найдём строчку:
# mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp
И исправим её на:
mailbox_transport = procmail
и прямо под ней добавим ещё одну строчку:
procmail_destination_recipient_limit = 1
Сохраняем и идём редактировать следующий файл /etc/postfix/master.cf. В нём в самом начале находим строчку:
smtp inet n - n - - smtpd
и прямо под ней добавляем новую строчку (впереди строчки три пробела):
-o content_filter=procmail:
и в самый конец файла добавляем строчку:
procmail unix - n n - - pipe flags=Rq user=mail argv=/usr/bin/procmail -f SENDER=${sender} -t RECIPIENT=${recipient} -m /etc/procmailrc
Сохраняем. Вкратце, мы всем этим сделали следующее: указали постфиксу на почтовый фильтр procmail, указали что procmail будет использоваться в качестве транспорта и в файле master.cf этот самый транспорт и прописали. Когда я это всё делал, то у меня возникли естественные вопросы по поводу всех флагов в транспорте procmail. Пришлось обратиться к документации postfix и вот к этой статье.
Итак, флаги R и q:
R — Добавить обратный путь: в заголовок сообщения добавляется адрес отправителя конверта.
q — Заключить в кавычки, если в командной строке $sender, $original_recipient и $recipient имеется пробел и другие специальные символы (имеется ввиду текст налево от самого правого символа @ ) согласно 8-разрядной прозрачной версии RFC 822. Это рекомендуется для поставки через UUCP или BSMTP.
Ключи -f, -t, -m означают следующее:
-f от_кого — Заставляет procmail подменять в поле "From" значение от_кого как отправителя (вместо -f может быть использовано устаревшее -p). Если от_кого содержит только -, как единственное значение, в этом случае procmail лишь обновит временной штамп поля "From" (если таковой имеется, если нет, то он будет создан).
-t — Смягчает последствия ошибок при доставке почты. То есть, если procmail не в состоянии доставить посту по назначению, почта не отбрасывается, а возвращается в очередь отправки. Через некоторое время будет предпринята другая попытка доставить почту.
-m — Переводит procmail в режим работы почтового фильтра общего назначения. В этом режиме в командной строке должен быть указан один файл конфигурации. После него может быть указано неограниченное количество аргументов. Если файл конфигурации является абсолютным путём, начинающимся с /etc/procmailrc без ссылок на вышестоящие каталоги (то есть, не может быть упомянут каталог уровнем выше), в этом случае procmail, при отсутствии нарушений безопасности, принимает тождество владельца файла конфигурации (или символической ссылки).
После того как мы «подружили» postfix и procmail нам надо удалить пакет sendmail, иначе procmail будет пытаться дальше передать почту через sendmail. Ну а нам этого не нужно. У нас для этого уже есть настроенный postfix.
yum -y remove sendmail
Теперь перезапускаем постфикс:
service postfix restart
Но не спешим проверять работоспособность. Сначала нам надо прописать правила в самом procmail, чтобы письма доходили до сервера с зимброй. В /etc/postfix создаём папку procmail и назначаем её владельцем пользователя mail. Владеющая группа тоже пусть будет mail:
chown mail:mail /etc/postfix/procmail
Затем, находим файл /etc/procmailrc и наполняем его вот таким содержимым:
MAILDIR=/etc/postfix/procmail
LOGFILE=$MAILDIR/procmail.log
LOCKFILE=$MAILDIR/procmail.lock
SHELL=/bin/bash
# тремя строчками выше мы задали необходимые переменные
# а ниже мы прописали два правила, которые позволят пропускать почту, адресуемую на @test.mydomain.ru и почту, исходящую с первого сервера.
:0H
* ^To.*@test.mydomain.ru
! $RECIPIENT
:0H
* ^From.*@mydomain.domain
! $RECIPIENT
# последнее правило будет уничтожать всё остальное.
:0
/dev/null
Сохраним внесённые изменения. Вот теперь можно попробовать поотправлять почту с зимбры на какой-нибудь публичный почтовый сервер, например mail.ru. Само собой, что правила в procmailrc вы будете писать свои, которые вам нужны, и их, кстати, можно будет создавать при помощи webmin.
Этап 3. Настройка ФТП-сервера.
Продолжим настраивать первый сервер. Наступил этап установки ФТП-сервера. Как уже упоминалось в самом начале, фтп-сервис будет предоставляться посредством программного обеспечения ProFTPd. Установим его:
yum -y install proftpd
Затем, для последующего удобства администрирования, установим очень полезную программку webmin:
wget http://prdownloads.sourceforge.net/webadmin/webmin-1.560-1.noarch.rpm
rpm -i webmin-1.560-1.noarch.rpm
Кстати, сразу не забываем открыть порт 10000 на фаерволе. К вышеописанным правилам добавим ещё одно:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10000 -j ACCEPT
и не забываем перезапустить iptables. После чего, webmin будет доступен по адресу:
http://192.168.199.101:10000
Для настройки ФТП-сервера мы будем пользоваться вебмином. И в конфиг /etc/proftpd.conf залезем лишь один раз, чтобы сделать пару небольших правок. Чтобы настройка была более наглядная, я буду настраивать ФТП-сервер в соответствии вот с этой схемой:
Давайте сразу создадим это дерево каталогов в папке /opt/ftp. Как видите, фтп-хранилище я разместил на втором жёстком диске с файловой системой reiser4. После этого, назначим владельца и владеющую группу для всего этого дерева, а также права:
chown -R ftp:ftp /opt/ftp
chmod -R 770 /opt/ftp
Дерево создано. Переходим к настройке ProFTPd. Итак, для начала, давайте сразу залезем в конфиг /etc/proftpd.conf. Примерно, в самом начале конфига, например, после строчки «DefaultServer on», вставим вот такую конструкцию:
LangDefault en_US
LangEngine on
LangPath /usr/share/locale
UseEncoding UTF-8 WINDOWS-1251
Эта конструкция нам нужна для корректного отображения русских символов. Затем, найдём там вот такую строчку:
Umask 022
и поправим её вот так:
Umask 007
Опустимся в нижнюю часть конфигурационного файла и найдём кусок кода, начинающийся тегом <IfDefine ANONYMOUS_FTP> и заканчивающийся тегом </IfDefine>. Вот этот кусок кода удалим совсем.
А всё остальное доделаем через webmin. Заходим в него по вышеуказанному адресу и логинимся под рутом. Слева находим пункт Webmin, а в нём — Webmin Configuration. Для большего удобства, переключим язык интерфейса на русский. Кликаем на значок Language и в поле Display in language выбираем Russian UTF-8 (RU.UTF-8). Жмём Change Language. Чтобы увидеть применённые изменения, обновим страничку вэбмина в браузере. Интерфейс станет русским.
Нам надо зайти в Службы и выбрать Сервер ProFTP. Здесь, давайте пройдёмся по всем значкам общих настроек. Для простоты, я буду приводить скриншоты с настройками каждого пункта. Сразу отмечу, что эти пункты не будут относиться к настройкам, касаемых папки «Гостевая», поскольку она назначена для анонимного доступа. Доступ для анонимуса мы будем настраивать отдельно в самом конце.
Итак, параметры сети:
Здесь я поставил максимальное количество одновременных подключений равное 30, разрешил повторную загрузку на сервер и повторную загрузку с сервера. Если вы обратили внимание, то на скриншоте есть два параметра называемых «разрешить повторную загрузку?». Если же смотреть английский вариант, то эти две настройки будут звучать как: «Allow restarted downloads?» и «Allow restarted uploads?», что и означает повторную загрузку с сервера и на сервер. Также, здесь я выставил тип сервера как отдельный демон и явно указал диапазон портов для пассивного режима. Остальное не трогал. Сохраняем и переходим дальше.
Параметры ведения журнала:
Не менял ничего, поэтому и скриншот не буду приводить.
Файлы и каталоги:
Здесь я задал начальный каталог регистрации, ограничил всех пользователей в домашних каталогах, настроил, чтобы отменённые загрузки удалялись и чтобы владельцы и владеющие группы в создаваемых файлах и каталогах подделывались на пользователя ftp и группу ftp соответственно. Когда мы будем создавать пользователей, то домашний каталог будем ему указывать тот, в котором мы его хотим запереть — смотрим схему. Подделку владельца и владеющей группы я сделал для того, чтобы не возникло путаницы с правами на уровне файловой системы.
Управление доступом:
Не менял ничего.
Разное:
Не менял ничего.
Теперь мы дошли до значка «Аутентификация». Но перед тем, как производить эти настройки, нам надо создать учётные записи в системе, которые будут использоваться для фтп-доступа. А для этого, перейдём в вебмине в пункт «Система» и выберем подпункт «Пользователи и группы». Здесь мы создадим учётные записи. Жмём на надпись «создать нового пользователя» и создаём пользователя gorod1:
Заполняем поля «Имя», «Настоящее имя» (хотя оно и не обязательно), вводим путь к домашнему каталогу. Поскольку, мы хотим, чтоб этот пользователь был заперт в папке «города», то эту папку и указываем домашним каталогом. Оболочку пользователю ставим /bin/bash. «Вход запрещён» означает, что этот пользователь не сможет войти в саму операционную систему, как, например пользователь admin. Вносим пользователя в группу ftp и отказываемся от создания домашнего каталога и от копирования туда файлов. Жмём кнопку «создать».
Аналогичным образом создаём пользователя gorod2 и 1c. А вот что касается пользователя admin, то здесь можно пойти двумя путями: использовать уже существующую в системе учётную запись admin или вместо админа создать другую учётную запись аналогично как мы это сделали выше. Я же решил использовать уже существующую учётную запись admin. Найдём его в списке пользователей и кое-что подправим:
Здесь я изменил домашний каталог на корень фтп-шного дерева, заменил основную группу на ftp и дополнительно внёс его обратно в группу admin, которая была основной.
Вот теперь, пора вернуться к настройкам ProFTPd и кликнуть на значок Аутентификация:
Здесь мы запрещаем регистрацию для рута и запрещаем регистрацию пользователям из списка /etc/ftpusers. И самое главное: мы именно здесь добавили наши, только что созданные, учётные записи для доступа к ФТП-серверу. И здесь же, мы назначаем каждой учётной записи пароль доступа к нашему ФТП. Идём далее.
Файл опций для каждого каталога:
Вот здесь мы выбираем каталог, для которого хотим ограничить доступ и нажимаем кнопку «Создание файла параметров». После чего увидим следующее:
Здесь нас интересует только значок «user permissions», однако если же прогуляться по остальным настройкам, то мы увидим, что тут, конкретно для этого каталога, можно задавать свои параметры «Разрешить повторную загрузку?», «Удалять отмененные загрузки?», «Устанавливаемая группа для закачанных файлов» и прочие, которые мы уже видели в глобальных настройках ProFTPd. Если здесь эти настройки не трогать, то они останутся унаследованы от глобальных параметров ProFTPd.
Итак, заходим в интересующий нас «user permissions»:
и выставляем права тем пользователям, которые будут сюда иметь доступ: admin и gorod1. Для остальных фтп-пользователей эта папка даже видна не будет. Да и остальные, кроме gorod2, сюда и попадут вовсе, т.к. будут ограничены в своих каталогах. Сохраняем и аналогичным образом назначаем доступ остальным папкам в соответствии со схемой.
Вернёмся снова к глобальным настройкам. Там нас интересует последний значок под названием «Запрещенные пользователи FTP»:
Выберем ограничение каталога, в котором запрём анонимуса и нажмём кнопку «создать». После этого нам снова откроется страничка с привычными значками, но называться она уже будет «Параметры анонимного FTP». Здесь мы тоже пройдёмся по некоторым из них.
Параметры сети:
Здесь я задал максимальное количество анонимных подключений всего и максимальное количество подключений с одного узла. А также, сообщения выдаваемые при превышении этих подключений.
Аутентификация:
Здесь я запретил регистрацию для root, разрешил регистрацию пользователям только с псевдоименами (а у нас это только anonymous). Поставил крыж, чтобы не требовать пароль для анонимной регистрации и разрешил регистрацию пользователям с оболочкой /sbin/nologin.
Теперь, нажмём на надпись «вернуться в основное меню» и кликнем на значок «Файл опций для каждого каталога». Здесь зададим права на нашу гостевую папку:
Здесь нам надо сделать так, чтоб полный доступ имел только админ. Для этого, админу даём все права с помощью вэб-интерфейса, а в теле самого файла кое-что прописываем вручную. То, что прописать вручную, я обвёл красным. Таким образом, всем будет только чтение, а админу — полный доступ.
Помимо всех этих настроек в вэбмине, нужно выполнить ещё один момент: найдём файл /etc/sysconfig/proftpd, найдём в нём строчку:
PROFTPD_OPTIONS=""
И преобразуем её вот в такой вид:
PROFTPD_OPTIONS="-DANONYMOUS_FTP"
Сохраним изменения. Настройка ProFTPd закончена. Можно запускать этот сервис либо из-под вебмина, либо введя команду:
service proftpd start
Однако, попробовав зайти на фтп-сервер по адресу ftp://192.168.199.101 мы получим ошибку доступа. Это связано с тем, что в iptables нужно, во-первых, открыть порт 21, а во-вторых, надо активировать модуль nf_conntrack_ftp. Чтобы это сделать, надо в файле /etc/sysconfig/iptables прописать правило:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
а в файле /etc/sysconfig/iptables-config найти строчку:
IPTABLES_MODULES=""
и привести её вот к такому виду:
IPTABLES_MODULES="nf_conntrack_ftp"
После чего, перезапускаем iptables. Теперь, можно заходить на наш фтп и проверять, всё ли правильно настроено.
Не забудем включить наш ProFTPd в автозагрузку. Введём команду ntsysv и в меню отметим его звёздочкой.
После того, как мы убедились, что ФТП-сервер и доступ к нему работают как надо, приступим к установке OpenFire.
Этап 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 и чистить пользователя «иванов_и_и» в архиве переписки.
На этом, настройку первого сервера тоже можно считать завершённой.
Возможно, что в этой статье я где-то допустил мелкие неточности. По мере их выявления, буду вносить правки в статью. А так, всё должно прекрасно работать.
#Reiser4 #Zimbra #Postfix #Procmail #Iptables #Webmin #ProFTPd #OpenFire #MySQL #настройка