Zarafa

Материал из ALT Linux Wiki
50px-Gnome globe current event.png
Данная статья периодически обновляется.
Последнее обновление
11:01 31 мая 2019


Логотип Википедии
В Википедии есть обзорная статья по теме «en:Zarafa_(software)».

Инструкция по установке Zarafa Collaboration Platform

Для ALT Linux собирается Open Source & Community Version Zarafa с версии 7.0.0 rc1.
Git-репозиторий: http://git.altlinux.org/gears/z/zarafa.git

Эта инструкция предназначена для описания настройки Zarafa-Server и сопутствующих служб почтового сервера и органайзера Zarafa. В качестве MTA (агента по передаче писем) принят postfix. Использование других MTA возможно, они будут протестированы в дальнейшем. Zarafa предполагается использовать как замена Microsoft Exchange. Дистрибутив Linux — ALT Linux 6.0 Centaurus. Эта инструкция является максимально всеобъемлющей и универсальной. В своем роде она может заменить официальную документацию и в некоторых аспектах дополнить её.

Примечание: я как автор этой инструкции не могу дать 100 % гарантии, что всё нижесказанное будет работать так, как я описал. Если вы нашли ошибку или недоработку, или считаете, что статью нужно дополнить, прошу оповестить меня об этом. Я с радостью приму Вашу помощь.

Примечание 1.5. Большинство операции выполняются из-под root.

Примечание 2. Если что-то не сработало, не паникуйте, перепроверьте все набранные данные, так же не будет лишним проверить багтрекер. В моей практике происходили самые разнообразные проблемы и, слава науке, все они успешно разрешились. Поэтому ваша проблема тоже, скорее всего, решаема. Еще один совет — всегда старайтесь использовать последние версии всех сервисов.

Итак, начнём менять жизнь к лучшему.

Предварительная настройка

Установка необходимых пакетов

Допускаем, что был установлен дистрибутив Alt Linux p6 любой редакции. Рекомендую перед установкой предлагаемых пакетов полностью обновить ОС.

Для последующей настройки нам необходимы следующие пакеты (некоторые пакеты опциональны, например, для TLS):

Apache, php5 и ssl-модули к нему:

apt-get install apache2 apache2-mod_php5 apache2-mod_ssl

Postfix с поддержкой LDAP и TLS:

apt-get install postfix postfix-ldap postfix-tls

Если предполагается интеграция postfix и mysql, установите postfix-mysql. Однако я не рекомендую использовать mysql в качестве хранилища пользователей.

MySQL

apt-get install mysql

LDAP

apt-get install 389-ds-console 389-ds 389-adminutil 389-admin

Zarafa

apt-get install zarafa

Zarafa Webaccess и WebApp

apt-get install zarafa-webaccess zarafa-webapp

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

Примечание. Если установить только Zarafa без веб-интерфейса к нему (в частности, zarafa-webaccess) почти все службы Zarafa не заработают. Проблема возникает из-за того, что системные службы используют tzdata, а он не устанавливается по зависимостям в случае отказа от установки веб-интерфейса. Проблема зафиксирована только в одной редакции дистрибутива — Server Light. Для решения проблемы установите tzdata вручную: apt-get install tzdata. После еще раз запустите службы Zarafa. Естественно, перед запуском сервер и службы необходимо как следует настроить, об этом далее.

Теперь расскажу о пакетах zarafa отдельно, которые установятся по зависимостям мета-пакетом zarafa.

1. zarafa-dagent — служба доставки писем. Используется собственно для принятия входящей почты с postfix и помещение их в хранилище пользователя. Обязателен к установке в случае необходимости функции принятия почты.

2. zarafa-gateway — служба поддержки IMAP и POP3-протоколов. Предоставляет возможность использования почтой Zarafa клиентами, поддерживающие указанные протоколы. Эта служба работает по аналогии с Exchange, транслируя запросы между протоколом MAPI и указанными протоколами почты. Мы рекомендуем использовать IMAP-клиенты. Обязателен в случае использования соответствующих клиентов.

3. zarafa-ical — служба поддержки календарей. Поддерживается как iCal, так и CalDAV.

4. zarafa-indexer — служба индексации почты. Необходим для повышения скорости поиска в почте. Суть в том, что некоторая почта хранится прямиком в файловой системе и при поиске делается меньше SQL-запросов в базу данных, тем самым разгружая ресурсы компьютера. Крайне рекомендуем к установке.

5. zarafa-monitor — служба отслеживания квот, предоставляемых хранилищам пользователя.

6. zarafa-server — ядро всей почтовой инфраструктуры, обеспечивающий поддержку MAPI и обрабатывающий все проходящую корреспонденцию.

7. zarafa-spooler — служба очереди исходящей почты. Обязателен к установке, если нужна функция отправки почты.

Теперь немного о веб-интерфейсах.

1. Zarafa Webaccess — это классический веб-интерфейс Zarafa. Очень похож на Outlook 2003. На данный момент он уже устарел по технологиям построения интерактивных веб-интерфейсов (по сути, webaccess практически не интерактивен), но несмотря на это является довольно мощной и функциональной «мордой» для почты.

2. Zarafa WebApp. Предполагаемая замена Webaccess. Использует последние достижения в Web, такие как JS, продвинутый CSS и прочие навороты. На данный момент пока является недоработанным, но развивается очень быстро. Главная его цель — догнать и перегнать по функциям Webaccess и предложить удобный интерфейс. Пока получается хорошо, разработчикам — успехов. На состояние 12 августа 2012 произошел релиз версии 1.2, несмотря на это, webapp до сих пор толком не стабилизировался.

О установке остальных пакетов и их настройке будет сказано по мере повествования.

Настройка системы и служб

Теперь перейдем к настройке сервисов, которые пока прямо не относятся к почте.

Первый шаг — добавьте пользователя и группу zarafa командой useradd -r zarafa. Эта команда создаст пользователя, который не сможет войти в ОС (уточню, что доступ к /bin/bash у пользователя будет, но login не пускает пользователей с пустыми паролями). Эту операцию необходимо проделать по соображениям безопасности.

Второй шаг — в /etc/sysconfig/zarafa убедитесь, что во всех переменных указана системная локаль (обычно ru_RU.UTF-8), иначе имена каталогов почты будут на английском языке. Конфиг. файл будет действовать только в том случае, если эта локаль существует в ОС, так что перед этим не забудьте его добавить, так же необходимо наличие файла с форматом mo для zarafa client, содержащие переводы каталогов. Этот файл должен находится в /usr/share/locale/ru/LC_MESSAGES/zarafa.mo. В пакетах Альта он имеется.

Третий шаг — укажите, чтобы postfix работал в режиме сервера:

control postfix server

Четвёртый шаг — включите сетевой режим mysql. Для этого закомментируйте след. строчку в файле /var/lib/mysql/my.cnf

#skip-networking

Пятый шаг — zarafa будет работать под пользователем zarafa, поэтому для служб zarafa не будет доступен каталог /var/log/zarafa, так как пользователем каталога изначально является root. Для исправления (рекурсивное выполнение осуществляется для случаев наличия файлов внутри каталога):

chown zarafa:zarafa /var/log/zarafa

Последним шагом станет указание пароля root для mysql. Для этого можно выполнить след. последовательность шагов:

/etc/init.d/mysqld start
/usr/bin/mysql_secure_installation

Командой mysql -u root -p и далее набором пароля проверьте параметры входа. Вошли — значит, предварительная настройка завершена до конца и успешно.

Дополнение по базе данных. В Альте по умолчанию запрещено входить в базу в качестве root, используя удалённый вход. О том, что делать в этом случае — смотрите в начале практической настройки.

Если вы хотите заняться оптимизацией mysql, zarafa и других служб а также ОС, сделайте это заранее, до запуска соответствующих служб. Сами оптимизации описаны в конце статьи.

Также не забудьте добавить необходимые службы в автозапуск (просто выделите всю строку и разом выполните):

chkconfig mysqld on; chkconfig httpd2 on; chkconfig postfix on; chkconfig zarafa-server on;chkconfig zarafa-dagent on
chkconfig zarafa-gateway on; chkconfig zarafa-ical on; chkconfig zarafa-indexer on || chkconfig zarafa-search on; chkconfig zarafa-monitor on
chkconfig zarafa-spooler on

Практическая часть настройки

Для того, чтобы не использовать root удалённо (обычно такой вход запрещён), с самого начала создадим необходимого пользователя с именем zarafa в mysql и дадим ему необходимые права:

[root@zarafa client] mysql -u root -p
mysql> create user zarafa identified by 'ваш_пароль';
mysql> grant all privileges on zarafa.* to 'zarafa'@'%' identified by 'ваш_пароль' with grant option;
mysql> flush privileges;

Не удивляйтесь, если на самом сервере вы не сможете войти под созданным именем, указывая правильный пароль. Дело в том, что указанный пароль для пользователя работает только для удалённых клиентов. В самом сервере вы можете войти без набора пароля. Еще одно замечание. Вышепредставленная команда разрешит вход под именем zarafa для всех узлов, на что указывает знак процента после @'. Если необходимо дать доступ только одному IP, понятное дело, указываем сам IP вместо процента. Если же необходимо открыть подсеть, то знаком % заменяется та часть IP, которая входить в маску подсети, например:

192.168.1.% - для /24
10.% - для /8
И т.д.

Настройка postfix. (/etc/postfix/)

Предусмотрено два сценария настройки postfix.

Если пользователи будут обитать в mysql

В файл main.cf добавьте этот кусок конфигурации (для того, чтобы узнать доменное имя, наберите команду host inet-ip или hostname -f):

# Указываем домен, который будет использован в адресе эл. почты
mydomain = example.com

# Указываем полное имя машины (либо по hostname, либо по DNS)
myhostname = zarafa.example.com

# Указываем домен, который будет добавлен к адресу отправителя или получателя, если он не указан. Обычно равен домену эл. почты.
myorigin = $mydomain

# Указываем команду для работы postfix с почтовым ящиком пользователя (используется zarafa-dagent)
mailbox_command = /usr/bin/zarafa-dagent "$USER"

# Указываем настройки транспорта почты
mailbox_transport = zarafa: zarafa_destination_recipient_limit = 1

# Указываем приветствие для smtp 
smtp_helo_name = smtp.example.com

# Определяем, на какие домены postfix может ретранслировать почту. Обычно достаточно указания локального адреса, но при работе с zarafa postfix
# фактически является мостом для между Интернетом и службами zarafa, поэтому указываем домен и имя узла.
mydestination = localhost, $mydomain, $myhostname

# Указываем файл/БД с псевдонимами для postfix
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases

# Указываем файл/БД с виртуальными псевдонимами, находящиеся в БД
virtual_alias_maps = mysql:/etc/postfix/mysql-aliases.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-aliases.cf

# Указываем, какие сети для postfix считать локальными. Этот параметр управляет удаленными соединениями к почтовому серверу, иными словами, разрешает
# relay для указанных сетей.
mynetworks = 127.0.0.0/8

# Указываем разрешенные интерфейсы
inet_interfaces = all

# Отключаемый встроенную программу оповещения входящих писем
biff = no

# Указываем, что письма должны прямиком идти через Интернет.
relayhost = 

# Указываем знак разделения получателей
recipient_delimiter = + 
# Определяем максимальный размер сообщения
message_size_limit = 33554432

# Указываем текст сообщения, который будет показан при подключении к SMTP
smtpd_banner = $myhostname ESMTP $mail_name

# Отключаем проверку наличия получателя. Данную проверку будет выполнять сама Zarafa.
local_recipient_maps =

############################################################
# Mail system restrictions (for SASL)
############################################################
smtpd_helo_restrictions =
smtpd_client_restrictions =
smtpd_sender_restrictions =
smtpd_recipient_restrictions = 
   reject_unknown_sender_domain,
   reject_non_fqdn_sender,
   reject_non_fqdn_recipient,
   permit_mynetworks,
   permit_sasl_authenticated,
   reject_unauth_destination,
   reject_unauth_pipelining,
   reject_unknown_reverse_client_hostname,
   permit

############################################################

############################################################
# TLS parameters (port 25)
############################################################
smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem
smtpd_tls_cert_file=/etc/postfix/ssl/postfix_public_cert.pem
smtpd_tls_key_file=/etc/postfix/ssl/postfix_private_key.pem
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_use_tls = yes
tls_random_source = dev:/dev/urandom
smtp_tls_note_starttls_offer = yes

В начале мы указываем параметры самой почтовой службы, далее настраиваем самые необходимые разрешения (для работы SASL) и настройки TLS для шифрования исходящей почты (дополнительно об этом в статье про шифрование). Остальные настройки postfix будут рассмотрены отдельно.

Теперь уточнения по представленной конфигурации. Во-первых, здесь далеко не все настройки postfix, которые теоретически могут вам пригодиться, представлена лишь минимальная конфигурация. Во-вторых, для начала закомментируйте все строчки, относящиеся к TLS, с ними потом разберётесь. Далее. Конфигурация дана в случае использования mysql в качестве хранилища для пользователей, но этот вариант нежелателен из-за малой гибкости решения и если сервер будет «боевым», то настоятельно рекомендуем использовать LDAP (наш выбор — 389DS, о нём — в отдельном статье). Так же не забудьте поменять максимальный размер письма, если нужно, здесь он равен 32 MiB.

Отдельно скажу о relayhost. Он намеренно оставлен пустым. Данная настройка заставит использовать postfix relay почтового сервера, куда посылается письмо. Это решает тучу проблем с отправкой писем, поэтому я рекомендую оставить его так. Однако, в случае использования стороннего relay, вы его сможете спокойно менять, работоспособность самого postfix и zarafa не пострадает (если, конечно, relay рабочий).

Далее. В самый конец файла master.cf добавляем следующее:

zarafa     unix  -       n       n       -       10      pipe
   flags=DRhu user=zarafa argv=/usr/bin/zarafa-dagent -R ${recipient}

Пробелы перед flags обязательны (необходим хотя бы один пробел)

Эти две строчки заставит «гнать» письма в Zarafa с определёнными атрибутами.

Последним шагом в настройке postfix будет указание на работу с mysql-базой. Для этого создайте файл /etc/postfix/mysql-aliases.cf (если в конфиге, в полях virtual* указан другой путь, создайте файл в соответствии с конфигом). Добавьте туда след.:

user = zarafa
password = ваш_пароль
hosts = 127.0.0.1
dbname = zarafa
query = select value from objectproperty where objectid=(select objectid from objectproperty where value='%s' limit 1) and propname='emailaddress';

Этот файл не нужен, Если вы намерены настроить интеграцию postfix и LDAP.

Если пользователи будут обитать в LDAP.

Некоторые уточнения уже были сделаны в части о MySQL.

В /etc/postfix/main.cf добавьте или измените след. параметры:

virtual_alias_maps = ldap:/etc/postfix/ldap-aliases.cf
virtual_mailbox_maps = ldap:/etc/postfix/ldap-users.cf
virtual_transport = lmtp:127.0.0.1:2003

Далее создайте эти файлы. Содержимое этих файлов почти совпадают:

ldap-users.cf:

server_host = 127.0.0.1:389
search_base = ou=Zarafa,dc=center,dc=ru
version = 3
scope = sub
query_filter = (mail=%s)
result_attribute = mail

ldap-aliases.cf:

server_host = 127.0.0.1:389
search_base = ou=Zarafa,dc=center,dc=ru
version = 3
scope = sub
query_filter = (zarafaAliases=%s)
result_attribute = mail

Порт в узле нужно указывать, если для LDAP используется нестандартный. По умолчанию postfix будет стучаться на порт 389.

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

Настройка zarafa. (/etc/zarafa/)

Настройка самой zarafa обычно сводится к указанию пользователя, под которым будет запущен сервер и настройка LDAP. Про последнее будет рассказано в отдельном разделе ниже. Также, в случае защищенных соединений, сюда входит включение оных и указание сертификата и приватного ключа.

Далее для каждого конфиг. файла будут указаны те строки, которые необходимо изменить. Все остальные настройки меняются из условий настройки.

Настройка /etc/zarafa/dagent.cfg

run_as_user = zarafa
run_as_group = zarafa

Настройка /etc/zarafa/gateway.cfg

run_as_user = zarafa
run_as_group = zarafa

Настройка /etc/zarafa/ical.cfg

run_as_user = zarafa
run_as_group = zarafa
server_timezone = Europe/Moscow

Настройка /etc/zarafa/search.cfg

run_as_user = zarafa
run_as_group = zarafa

О активизации работы индексации читайте в разделе «Оптимизации для повышения быстродействия» в настоящей статье.

Настройка /etc/zarafa/monitor.cfg

run_as_user = zarafa
run_as_group = zarafa

Настройка /etc/zarafa/server.cfg

local_admin_users = root zarafa
run_as_user = zarafa
run_as_group = zarafa
system_email_address    = postmaster@example.com
mysql_host   = 127.0.0.1
mysql_user  = zarafa
mysql_password  = ваш_пароль_в_базе
user_plugin             = ldap
user_plugin_config      = /etc/zarafa/ldap.*.cfg
disabled_features = pop3

Настройка /etc/zarafa/spooler.cfg

run_as_user = zarafa
run_as_group = zarafa

Уточнение по файлу server.cfg. В этом примере в качестве user_plugin указан ldap. Этот параметр определяет, где zarafa должна хранить данные пользователей, в LDAP (ldap) или в Mysql (db). Поэтому вы должны выбрать плагин, который подходит вашей настройке.

user_plugin_config — путь к файлу настроек для LDAP. Может принимать два значения:

  1. /etc/zarafa/ldap.openldap.cfg (подходит для OpenLDAP и 389DS)
  2. /etc/zarafa/ldap.active-directory.cfg (понятно, что для AD)

Правильно указывайте этот файл. Часто причиной недоступности ldap для zarafa является кривой путь к конфиг. файлу.

Осталось запустить все службы (restart применяется по причине уже возможного запуска сервисов):

/etc/init.d/postfix restart;
/etc/init.d/httpd2 restart;
/etc/init.d/mysqld restart;
/etc/init.d/zarafa-dagent restart;
/etc/init.d/zarafa-gateway restart;
/etc/init.d/zarafa-ical restart;
/etc/init.d/zarafa-indexer restart || /etc/init.d/zarafa-search restart;
/etc/init.d/zarafa-monitor restart;
/etc/init.d/zarafa-server restart;
/etc/init.d/zarafa-spooler restart;

Эта команда запустит все сервисы последовательно. После запуска проверьте все логи zarafa и postfix/maillog на предмет ошибок. Из ненастроенных служб остался только zarafa-indexer, о нем ниже. Заметьте, что в списке нет zarafa-liсensed, о нем также написано ниже в настоящем статье.

Настройка интеграции с LDAP и Zarafa

Для более продуктивной работы с большой базой пользователей, а также для поддержки дополнительных атрибутов пользователя (напр., номера телефонов) есть большой смысл вместо mysql поднять и использовать сервер LDAP.

По умолчанию в zarafa предоставляются конфиги для Active Directory и OpenLDAP. Конфигурация OpenLDAP так же подходит для 389DS.

Никаких особых настроек по сути делать не надо. Для Active Directory (ldap.active-directory.cfg):

ldap_host = 10.10.19.213
ldap_port = 389
ldap_bind_user = cn=syncadm,cn=Users,dc=domain,dc=loc
ldap_bind_passwd = 1q2w3e4r5t6y!
ldap_search_base = dc=domain,dc=loc

Если в AD уже есть пользователи и не все они имеют почту, то в этом же конфиге поменяйте следующую строку:

ldap_user_search_filter = (zarafaAccount=1)

Это опция будет работать только лишь после установки Zarafa ADS (коннектора Zarafa к AD) и после отметки нужных пользователей AD как имеющие аккаунт Zarafa.

Для OpenLDAP (ldap.openldap.cfg):

ldap_host = 10.10.19.213
ldap_port = 389
ldap_bind_user = cn=admin,cn=users,dc=example,dc=com
ldap_bind_passwd = Gtr$%11a
ldap_search_base = dc=example,dc=com

То есть редактируем те же самые строки, только в другом файле. Изменение остальных уже зависят от условий настройки. Фильтр в данном случае нужно установить самостоятельно. Для этого в zarafa есть схемы. Подробнее — в статье о 389DS.

Не забудьте про автозапуск 389DS:

chkconfig fedora-ds on
chkconfig fedora-ds-admin on

Для OpenLDAP:

chkconfig slapd on

Zarafa WebAccess, WebApp и Z-PUSH

По умолчанию они будут доступны по адресу http://ipaddr/webaccess или http://ipaddr/webapp (используется 80 порт). Если все установлено (apache2 и mod_php5 к нему), то веб-морда будет работать без дополнительных настроек. Можно лишь изменить, к примеру, веб-адрес, где веб-морда будет доступна.

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

FIXME! Настройка MAPI для apache2-mod_php:

ln -svf /etc/php/5.3/cli/php.d/zarafa.ini /etc/php/5.3/apache2-mod_php/php.d/

Для Z-PUSH достаточно создать каталоги для работы с нужными владельцами:

mkdir  -pv /var/log/z-push/ /var/lib/z-push
chown apache2:apache2 /var/log/z-push/ /var/lib/z-push/ -R

Настройки zarafa-licensed

Как понятно из названия, эта служба управляет лицензией Zarafa. Как модуль он необходим виндовому Zarafa Outlook Client.

Эта часть вскоре может потерять актуальность, так как инженеры Zarafa начали собирать модуль лицензий в rpm-пакет для Alt Linux.

Установка zarafa-licensed на opensource-версию Zarafa

Скачайте пакет *Free* для RHEL6, совпадающая с установленной версией Zarafa и архитектурой ОС, отсюда -> http://download.zarafa.com/community/final/7.0/. Допустим, нам необходим пакет для 7.0.2 и x86_64 -> http://download.zarafa.com/community/final/7.0/7.0.2-29470/zcp-7.0.2-29470-rhel-6-x86_64-free.tar.gz. Распакуйте его:

tar zxpvf http://download.zarafa.com/community/final/7.0/7.0.2-29470/zcp-7.0.2-29470-rhel-6-x86_64-free.tar.gz

Среди пакетов найдите zarafa-licensed_7.0.2-29470_i386.rpm. Для его распаковки необходим пакет rpmdevtools:

sudo apt-get install rpmdevtools

Распакуйте rpm-пакет командой:

sudo mkdir zarafa-license
sudo cd zarafa-license
sudo rpmdev-extract zarafa-licensed_7.0.2-29470_i386.rpm

Скопируйте каталог в /opt

sudo cp -r zarafa-license /opt

Теперь, следуя путям в каталоге zarafa-license, создайте символические ссылки в файловой системе. К примеру, /opt/zarafa-license/usr/bin/zarafa-licensed -> /usr/bin/zarafa-licensed и т. д. Самое простое — сделать их через MC, используя сочетание С-x, s, однако можно воспользоваться командой вида ln -s /opt/zarafa-license/usr/bin/zarafa-licensed /usr/bin/zarafa-licensed для каждого файла. Каталоги man и doc можете пропустить.

Также для zarafa-licensed необходимы некоторые библиотеки, они помещены в архив и прикреплены в статье (для i586 и x86_64). Просто так же скопируйте их в отдельный каталог в /opt, потом сделайте символические ссылки в /usr/lib.

После установки всех симлинков запустите службу zarafa-licensed и перезапустите zarafa-server:

sudo service zarafa-licensed start; sudo service zarafa-server restart

Дабы убедиться в работе службы лицензий проверьте лог /var/log/zarafa/licensed.log c оповещением о запуске и /var/log/zarafa/server.log, который должен оповестить, что zarafa-licensed была найдена.

Работа без платной лицензии позволяет подключить 3-х пользователей Outlook.

Если лицензия была куплена, выполните следующую команду для добавления лицензии:

sudo echo "6K3L11A...12" > /etc/zarafa/license/base

6K3L11A…12 — это серийный номер, выданный Вам. После перезагрузите zarafa-server. В логе в это время должно появиться сообщение типа:

Using commercial license serial '6K3L11A...12'

На этом настройка zarafa-license завершена.

Для дополнения лицензии вторым ключом, просто добавьте файл с любым именем, который будет содержать серийный номер, в /etc/zarafa/license/ и перезагрузите сервисы zarafa-licensed и zarafa-server.

SpamAssassin как средство защиты от спама

В Альте spamassassin уже идет с правилами, поэтому по сути настройка самого spamassassin практически не требуется. По практике, умолчательные настройки ловят больше 99 % явного спама, тем более, что spamassassin просто обучить.

Первым делом, необходимо установить сам spamassassin:

apt-get install spamassassin spamassassin-spamd spamassassin-spamc

Эта команда установит собственно spamassassin, его сервисную часть и клиент для работы с сервисом, а также другие пакеты с правилами и дополнительными плагинами. Теперь нужно «объяснить» postfix, что всю почту нужно проводить через фильтры spamassassin. Для этого, в /etc/postfix/master.cf проделайте след. изменения:\

1. Измените сектор smtp:

smtp      inet  n       -       -       -       -       smtpd                                                                                                
          -o content_filter=spamassassin

2. Добавьте в конец файла сектор spamassassin

spamassassin unix   -    n    n   -   -   pipe.                                                                                        
   user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}                           

Замечу, что настройка для spamassassin должна находиться ДО настройки для zarafa. Осталось перезагрузить нужные сервисы:

service spamd restart
service postfix restart

Теперь, дабы проверить работу спам-резалки, в /var/log/maillog попытайтесь найти строки типа:

Dec 14 13:45:23 gate postfix/pipe[23817]: CEA29201FD: to=<test@center.ru>, orig_to=<test@center1.ru>, relay=spamassassin, delay=2.5, delays=1.7/0/0/0.71, dsn=2.0.0, status=sent (delivered via spamassassin service)

Это означает, что письма проходят через спам-фильтр, то бишь spamassassin начал свою работу.

Настройки приложения можно найти в /etc/spamassassin/, в частности, в local.cf. Настройки, которые могут быть Вам нужны:

required_hits 7
rewrite_header Subject [* SPAM? *]
use_auto_whitelist 1
use_bayes 1                                                                                                                                                  
bayes_path /var/spool/spamassassin/bayes                                                                                                                     
bayes_file_mode 0775
bayes_auto_learn 1
skip_rbl_checks 0
use_razor2 1
use_dcc 1
use_pyzor 1

Ну и конечно

chkconfig spamd on

Чтобы spamassassin запускался вместе с системой.

На этом настройка спам-защиты завершена.

Настройка SASL для аутентификации в SMTP при отправке почты через «мир» (/etc/postfix/)

Осталось рассмотреть еще один крупный вопрос по поводу отправки почты извне. По умолчанию, такие письма postfix «выкидывает». Это сделано из-за банальной причины — спамеры. Чтобы smtp принимал письма для отправки через внешнюю Сеть, нужно настроить технологию SASL.

Для начала установите необходимые пакеты. Это cyrus-sasl2 и postfix-cyrus:

apt-get install cyrus-sasl2 postfix-cyrus

Далее переходим к каталогу конфигов postfix. Открываем main.cf и добавляем следующие строки:

#SASL                                                                                                                                                        
smtpd_sasl_auth_enable = yes                                                                                                                
smtpd_sasl_security_options = noanonymous                                                                                                                    
smtpd_sasl_tls_security_options = $smtpd_sasl_security_options                                                                                               
broken_sasl_auth_clients = yes                                                                                                                               
smtpd_sasl_path = smtpd

smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated                                                                                        
smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated                                                                                      
smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated                                                                                      
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

Замечание: ограничения (restrictions) postfix применяет в зависимости от расположения в списке. Если в начале будет «reject», а далее «permit», то вторую настройку postfix попросту не сможет использовать, потому что почта будет выкидываться из-за первой команды.

Далее создайте каталог /etc/postfix/sasl и файл smtpd.conf' в нём со следующим содержанием:

pwcheck_method: saslauthd
mech_list: PLAIN LOGIN DIGEST-MD5

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

mech_list: PLAIN LOGIN NTLM CRAM-MD5 DIGEST-MD5

Выбирайте необходимый механизм. Обычно для шифрованного пароля выбирают DIGEST-MD5, обычного — PLAIN. По условию задачи, наш сервер интегрирован с LDAP (с mysql выложу позже), поэтому настроим файл /etc/sasl2/saslauthd.conf на работу с LDAP. Для этого измените след. строки:

ldap_servers: ldap://127.0.0.1:983/  
ldap_bind_dn: uid=admin,ou=Administrators,ou=TopologyManagement,o=NetscapeRoot
ldap_bind_pw: Gtt5%1MI
ldap_timeout: 10
ldap_time_limit: 5
ldap_cache_ttl: 30
ldap_cache_mem: 32768
ldap_scope: sub
ldap_search_base: ou=Zarafa,dc=center,dc=cg
ldap_auth_method: bind

Остальные параметры меняйте по вкусу. Теперь нужно учесть, что postfix «варится» в собственном chroot и по умолчанию SASL не сможет работать с postfix (потому как SASL работает как отдельный демон). Поэтому сделайте вот такие изменения в файловой системе:

rm -r /var/run/saslauthd/
mkdir -p /var/spool/postfix/var/run/saslauthd
ln -s /var/spool/postfix/var/run/saslauthd /var/run
chgrp sasl /var/spool/postfix/var/run/saslauthd

Это даст возможность службе saslauthd работать с postfix. Последним штрихом перед запуском является изменение системного конфига для службы saslauthd. В /etc/sysconfig/saslauthd измените строчку примерно так:

OPTIONS="-a ldap -O /etc/sasl2/saslauthd.conf"

После всего этого запускайте saslauthd и postfix:

service saslauthd restart
service postfix restart

При корректных настройках saslauthd запустится, иначе молча упадет. Проверка собственно sasl проводится легко. Для этого наберите след. команду:

testsaslauthd -u Admin -p 12234

В качестве имени пользователя и пароля воспользуйтесь любой учеткой в LDAP. Если все сделано правильно, то вы получите сообщение:

0: OK "Success."

При

0: NO "authentication failed"

Проверяйте данные аутентификации и проверяйте логи на работу SASL.

Для практической проверки воспользуйтесь любой сторонний клиент (например, Thunderbird), войдите под своей учетной записью, используя внешнюю сеть и попытайтесь отправить почту на внешний домен (другие способы не помогут вам узнать работу sasl). Если почта отправится, значит sasl успешно работает, иначе проверяйте логи на ошибки.

На этом настройка sasl завершена. И чуть не забыл, добавляем saslauthd в автозапуск:

chkconfig saslauthd on

Оптимизации для повышения быстродействия

Индексация почты для ускорения поиска

Для активизации индексации необходимо изменить два файла. В файле /etc/zarafa/server.cfg:

index_services_enabled = yes
index_services_path = file://var/run/zarafa-indexer   
enable_enhanced_ics = yes

В файле /etc/zarafa/indexer.cfg:

index_path          =   /var/lib/zarafa/index/
index_sync_stream   =   yes
index_interval      =   5
index_threads       =   1

После перезапустите zarafa-server, потом zarafa-indexer:

sudo service zarafa-indexer restart
sudo service zarafa-server restart

Zarafa

В /etc/zarafa/server.cfg измените следующие строки:

cache_cell_size = 2100000000 - около 25% от общего количества ОЗУ в байтах.
cache_object_size = 32000000 - около 100кБ на каждого пользователя в байтах (по мануалу). Однако более оптимальными параметрами будет число от 16 до 128 МБ.
cache_indexedobject_size = 64000000 - около 512кБ на каждого пользователя в байтах (по мануалу). Однако более оптимальными параметрами будет число от 32 до 128 МБ.

Так же при большом количестве пользователей имеется смысл увеличить количество нитей сервера zarafa-server с стандартных 8:

threads                 =       32

К примеру, такое значение дает небольшой прирост производительности на Xeon*4@2.40 c 16 GiB и 80+ пользователями. Слишком большие значения приведут к обратному эффекту (всё будет тормозить).

Для ускорения работы mysql-базы вложения писем можно хранить не в базе данных, а в файлах. Для этого измените след. строки (в новых версиях эта опция уже идет по умолчанию):

attachment_storage      = files
attachment_path         = /var/lib/zarafa

MySQL

В /var/lib/mysql/my.cnf добавьте следующие строки:

'''innodb_buffer_pool_size''' = 2G   # около 25% от общего количества ОЗУ в байтах. Можно использовать индексы K, M, G. (напр. 1G)
'''innodb_log_file_size''' = 512M  # около 25% от размера '''innodb_buffer_pool_size''' в байтах. Так же можно использовать индексы.
'''innodb_log_buffer_size''' - 32M.
'''max_allowed_packet''' = 16M   # Ограничение на пакет, т.е. на письмо. По сути, указывает на ограничение по размеру для писем в базе данных.
'''max_connections''' = 500
query_cache_size=32M    # Кэш на запросы. 32 мегабайта является оптимальным значением.
thread_cache_size=4     # 4 нити являются оптимальным значением.

После перезапустите zarafa-server и mysqld.

Исправление проблем

Сначала небольшой совет. Если у Вас настроена интеграция LDAP и Zarafa, в случае отсутствия хода писем в самом начале попробуйте в /etc/zarafa/server.cfg, в поле user_plugin указать db. Далее создайте пользователя:

/usr/bin/zarafa-admin -c test -p password -e test@example.com -f "Zarafa Test"

Войдите через веб-интерфейс и отправьте письмо самому себе. Если письмо идет, значит, postfix настроен корректно и проблему следует искать, к примеру, в настройке LDAP. Совет этот полезен, если по логу вообще непонятно, что происходит во время отправки писем.

Проблема «отсутствия адресата»

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

В postfix, который настроен на работу с mysql, а zarafa — с LDAP, при попытке отправить письмо пользователю LDAP возникнет следующая ошибка:

550 5.1.1 <test@test.com>: Recipient address rejected: User unknown in local recipient table

Это ошибка означает, что по какой-то причине postfix не может найти адресы получателей. Я рассказываю про нее почему, потому что сам попадал впросак с настройкой postfix и Zarafa. Самое правильное решение в данной ситуации — настройка интеграции postfix и LDAP. В случае с AD оно правильное вдвойне, потому что это решает одну неприятную проблему плагина Zarafa ADS, при котором в AD, в вкладке Zarafa исчезала галочка выбора Zarafa-Account, хотя по мнению сервера Zarafa эта галочка стояла (проблема, возможно, уже не актуальна).

Отсутствие InnoDB.

В Альте есть вероятность заполучить ошибку, при котором zarafa-server не может найти InnoDB и завершает свою работу. Решение проблемы:

sudo mv /var/lib/mysql/db/ib_logfile0 /var/lib/mysql/ib_logfile0.bak
sudo mv /var/lib/mysql/db/ib_logfile1 /var/lib/mysql/ib_logfile1.bak

После перезапустите mysql. Эта проблема может возникать и после указания оптимизации для mysql/innodb. В этом случае решение такое же.

Отправка сигнала 6 (SIGABRT) zarafa-server и последующее падение сервера.

Проблема проявилась в версии 7.0.2. Причину этой проблемы выявить не удалось. Решение: в server.cfg необходимо добавить след. строку и перезагрузить сервис zarafa-server:

counter_reset = no

service zarafa-server restart

Есть информация, что в 7.0.6 эта проблема исправлена, но на практике это в данный момент проверить не удалось.

После обновления не запускается модуль zarafa-licensed.

После обновления этой службы вместе с сервером Zarafa может возникнуть ошибка вида:

Starting zarafa-licensed: terminate called after throwing an instance of 'std::runtime_error'
  what():  locale::facet::_S_create_c_locale name not valid

Эта ошибка возникает из-за того, что в /etc/sysconfig/zarafa указывается локаль UTF-8, что является ошибочной локалью. Просто исправьте локаль в этом файле на системную (локаль можно узнать по команде locale) и перезагрузите сервис:

service zarafa-licensed restart

Этот вопрос после получения нативной версии Zarafa (7.0.4 и выше), скорее всего, станет неактуальным. Upd: пока еще актуален.

«Не надо было сувать мне кривые аттачи!»

В случае «битых» вложений есть большая вероятность падения службы zarafa-gateway посылом сигнала 6. Решением проблемы является перемиграция почты.

Ошибка postfix «Закончилось место!».

Происходит из-за того, что в разделе, где находится каталог очереди печати, закончилось место, точнее, её стало меньше, чем 1,5*message_size_limit. Скорее всего, каталог очереди находится в /var. Решение — почистить этот раздел. Более радикальное решение — увеличить место для раздела (НЕ РЕКОМЕНДУЕТСЯ на боевых машинах!!!).

Ошибка подключения zarafa-server к zarafa-indexer.

На момент написания решение не является проверенным, потенциальное решение было найдено на форуме Zarafa.

Иногда при работе zarafa-server можно увидеть ошибки вида (код ошибки может быть другим):

Error while querying indexer on file:///var/run/zarafa-indexer, 0x80000024

Решением проблемы является изменение одной строки файла /etc/zarafa/indexer.cfg:

index_sync_stream = no

Далее необходимо перезагрузить zarafa-indexer и zarafa-server:

service zarafa-indexer restart
service zarafa-server restart

В версии 7.0.6 проблема была исправлена.

Неожиданный SEGFAULT.

FIXME!

Имеется проблема, которая приводит ошибке сегментации запуска нескольких сервисов Zarafa. Решение:

apt-get install tzdata

Проблема была выявлена лишь однажды. Этот пакет устанавливается вместе с zarafa-webaccess, так что проблему можно считать не актуальной.

Так же имеется проблема с SEGFAULT у php на p6, при нехватке пакета glibc-timezones:

apt-get install glibc-timezones

Полезные советы

1. Если необходимо, чтобы почта перенаправлялась в другой почтовый ящик, можно проделать следующее. В 389DS в качестве основного e-mail указать тот ящик, на который должна перенаправляться почта, в алиасы указываете первичный ящик. Таким образом, почта будет перенаправлена в другой почтовик. На уровне postfix опишу позже. В качестве атрибута для алиаса используется аргумент zarafaaliases. Подробнее — в статье про интеграцию 389DS и Zarafa.

2. Если же необходимо почту продублировать, алиасы уже не помогут. Сама zarafa на момент написания такой функциональности не имеет, поэтому будем дорабатывать конфиг postfix. Пропишите в /etc/postfix/main.cf след. строку:

recipient_bcc_maps = hash:/etc/postfix/recipient_bcc

Далее, создайте файл /etc/postfix/recipient_bcc, его содержание должно выглядеть примерно так:

adam@center.cg adam@gmail.com
fekla@center.cg fekla@yandex.ru

Таким образом, почта будет продублирована на ящики, указанные в файле. Однако, в некоторых случаях на дублирующей почте могут появляться по два одинаковых письма. Решение: в /etc/postfix/master.cf есть строки:

smtp      inet  n       -       -       -       -       smtpd                                                                                                
          -o content_filter=spamassassin                                                                                                                     
          -o receive_override_options=no_address_mappings

Указание последней строчки решит проблему с лишним дублированием.

Включение smtps (465 порт)

Тут все очень просто. В /etc/postfix/master.cf есть строки:

smtps     inet  n       -       -       -       -       smtpd                                                                                                
  -o smtpd_tls_wrappermode=yes                                                                                                                               
  -o smtpd_sasl_auth_enable=yes                                                                                                                              
  -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject                                                                            
#  -o milter_macro_daemon_name=ORIGINATING                                      

То есть эти строки нужно раскомментировать (кроме последней) и перезагрузить postfix.


В будущем данная инструкция будет дорабатываться и дополняться.

Спасибо, что потратили время на чтение этой инструкции. Всем пока!


Подключение к LDAP

Вопрос подключения Zarafa к LDAP описывается тут.

Ссылки

  1. Installing Zarafa from Ubuntu Repository
  2. Zarafa Community
  3. Zarafa Wiki