Использование Roundcube для нескольких почтовых серверов

Мы предоставляем услуги удаленного администрирования серверов

Использование Roundcube для нескольких почтовых серверов

Обновлено Обновлено: Опубликовано:

Тематические термины: Roundcube, NGINX, CentOS, PHP, PHP-FPMMariaDB.

Разберем ситуацию, когда необходимо «с нуля» установить Roundcube на выделенный сервер. Сначала мы настроим его на работу с одним удаленным почтовым сервером, затем — несколькими. В данной инструкции будет применяться операционная система Linux CentOS и веб-сервер NGINX + php-fpm.

Настройка веб-сервера

Roundcube является веб-приложением и для работы требует веб-сервер. В данной инструкции мы будем использовать связку NGINX + PHP + PHP-FPM.

Установка и запуск nginx

Установку выполняем следующими командами.

yum install epel-release

yum install nginx

После установки разрешаем автозапуск nginx и стартуем его:

systemctl enable nginx

systemctl start nginx

Открываем веб-браузер на любом компьютере локальной сети и заходим по адресу http://<IP-адрес сервера> — мы должны увидеть приветствие NGINX:

Установка PHP и PHP-FPM

Roundcube работает как приложение php, поэтому необходимо установить его интерпретатор. Также нам нужен PHP-FPM, так как NGINX не занимается обработкой скриптов php.

Выполняем установку компонентов:

yum install php php-fpm

… после запускаем PHP-FPM:

systemctl enable php-fpm

systemctl start php-fpm

Настройка NGINX + PHP-FPM

Открываем конфигурационный файл PHP-FPM:

vi /etc/php-fpm.d/www.conf

Задаем настройку для параметра listen:

listen = /var/run/php-fpm/php-fpm.sock

Перезапускаем php-fpm:

systemctl restart php-fpm

Теперь открываем конфиг nginx:

vi /etc/nginx/conf.d/default.conf

Внутри секции server добавим:

    location ~ \.php$ {
        set $root_path /usr/share/nginx/html;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param DOCUMENT_ROOT $root_path;
    }

Редактируем секцию location:

    location / {
        …
        index  index.php;
    }

Перезапускаем nginx и php-fpm:

systemctl restart nginx

Создаем файл index.php в root-каталоге nginx:

vi /usr/share/nginx/html/index.php

<?php phpinfo(); ?>

Открываем браузер и переходим по адресу http://<IP-адрес сервера> — должна открыться страница с отображением параметров php:

Сервер баз данных

Также для Roundcube нужна СУБД — мы установим MariaDB:

yum install mariadb-server

Запускаем сервис базы данных + разрешаем его автозапуск:

systemctl start mariadb

systemctl enable mariadb

Задаем пароль для суперпользователя mariadb:

mysqladmin -u root password

Устанавливаем компоненты для работы php с mysql:

yum install php-mysql php-mysqli

Перезапускаем php-fpm:

systemctl restart php-fpm

Снова открываем страницу http://<IP-адрес сервера> — должен появится раздел mysql:

Устанавливаем и настраиваем Roundcube Webmail

Открываем страницу загрузки Roundcube. Копируем ссылку на LTS-версию продукта (стабильную):

Используем ссылку, чтобы загрузить архив программы:

wget https://github.com/roundcube/roundcubemail/releases/download/1.1.12/roundcubemail-1.1.12-complete.tar.gz

* на момент написания инструкции LTS версия была 1.1.12.

Создаем каталог для размещения файлов Roundcube:

mkdir /usr/share/nginx/html/webmail

И распаковываем архив в созданную папку:

tar -C /usr/share/nginx/html/webmail -xvf roundcubemail-*.tar.gz —strip-components 1

Копируем шаблон конфигурационного файла и создаем рабочий конфиг:

cp /usr/share/nginx/html/webmail/config/config.inc.php.sample /usr/share/nginx/html/webmail/config/config.inc.php

Открываем его на редактирование:

vi /usr/share/nginx/html/webmail/config/config.inc.php

Редактируем строку для подключения к СУБД: 

$config[‘db_dsnw’] = ‘mysql://roundcube:[email protected]/roundcubemail’;

* где roundcube:roundcube123 — логин и пароль для доступа к базе данных; localhost — сервер базы данных; roundcubemail — имя базы данных.

Создаем следующие строки:

$config[‘enable_installer’] = true;

$config[‘drafts_mbox’] = ‘Drafts’;
$config[‘junk_mbox’] = ‘Junk’;
$config[‘sent_mbox’] = ‘Sent’;
$config[‘trash_mbox’] = ‘Trash’;
$config[‘create_default_folders’] = true;

* первая строка разрешает установку портала. Остальные — указывают на необходимость создания папок по умолчанию, если их нет. Без данной настройки, если не создавались папки другим клиентом, веб-клиент может выдавать ошибки при перемещении писем, например, при их удалении.

Задаем владельца apache на папку портала:

chown -R apache:apache /usr/share/nginx/html/webmail

* несмотря на то, что наш сервер обрабатываем скрипты с помощью php-fpm, работает последний по умолчанию от apache.

Создаем в MariaDB базу и пользователя для roundcubemail:

mysql -uroot -p

… система запросит пароль — вводим тот, что задавали при установке MariaDB. 

> CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

> GRANT ALL PRIVILEGES ON roundcubemail.* TO [email protected] IDENTIFIED BY ’roundcube123′;

* данными командами мы создаем базу данных roundcubemail и пользователя roundcube с паролем roundcube123. Обратите внимание, что если в вашем случае будут использоваться другие пользователь, пароль и база данных, то следует внести соответствующие изменения в настройку самого roundcube, которую мы выполняли ранее.

Загружаем в созданную базу данные:

mysql -uroot -p roundcubemail < /usr/share/nginx/html/webmail/SQL/mysql.initial.sql

… снова запрос пароля — вводим пароль от суперпользователя MariaDB.

Устанавливаем компоненты, необходимые для работы Roundcube:

yum install php-pear php-mcrypt php-intl php-ldap php-pear-Net-SMTP php-pear-Net-IDNA2 php-pear-Mail-Mime

Настроим php:

vi /etc/php.ini

date.timezone = «Europe/Moscow»

* в данном примере мы задаем московское время.

Перезагружаем php-fpm:

systemctl restart php-fpm

Открываем браузер и переходим по адресу http://<IP-адрес сервера>/webmail/installer/.

В самом низу нажимаем по кнопке Next. Если кнопка будет неактивна, проверяем, что нет ошибок (NOT OK):

На следующей странице мы создаем конфигурационный файл. 

а) вводим данные для подключения к СУБД:

б) настраиваем подключение к удаленному почтовому серверу:

* в данном примере мы указываем сервер 192.168.0.15 с доступом по IMAP.

в) для отправки сообщений нужно использовать следующий удаленный сервер:

* также указан почтовый сервер 192.168.0.15.

г) после окончания правки конфигурации, кликаем по CREATE CONFIG:

Конфигурационный файл создан — нажимаем CONTINUE, чтобы продолжить установку:

Проверяем, что все пункты находятся в состоянии OK. Установка выполнена.

Открываем конфигурационный файл roundcube:

vi /usr/share/nginx/html/webmail/config/config.inc.php

Запрещаем установку портала:

$config[‘enable_installer’] = false;

После удаляем папку с установочными скриптами:

\rm -R /usr/share/nginx/html/webmail/installer

И заходим в браузере по адресу http://<IP-адрес сервера>/webmail/. — должна открыться страница аутентификации пользователя. Пока не вводим никаких данных.

SSL и TLS

Если почтовый сервер поддерживает/требует SSL или TLS соединения, то открываем конфигурационный файл roundcube:

vi /usr/share/nginx/html/webmail/config/config.inc.php

… и редактируем:


$config[‘default_host’] = ‘tls://192.168.0.15’;

$config[‘smtp_server’] = ‘ssl://192.168.0.16’;

* в данном примере мы указали, что подключение к серверу по IMAP выполняется с использованием TLS, а по SMTP — по SSL.

Открываем браузер и переходим по адресу http://<IP-адрес сервера>/webmail/. — входим в систему под пользователем и паролем одной из почтовых учетных записей. Вход должен выполнить успешно и мы должны увидеть письма, находящиеся в почтовом ящике.

Настройка аутентификации на сервере исходящей почты

Для возможности отправлять письма, многие почтовые MTA требуют авторизации пользователя. Как правило, используются логин и пароль такие же, как на подключение к почтовому ящику.

И так, Roundcube должен отправлять данные для smtp-аутентификации. Открываем конфигурационный файл:

vi /usr/share/nginx/html/webmail/config/config.inc.php

Добавим такие строки:

$config[‘smtp_user’] = ‘%u’;
$config[‘smtp_pass’] = ‘%p’;

* мы указали использовать данные, под которыми зашел текущий пользователь, для авторизации на SMTP .

Переходим к нашей странице http://<IP-адрес сервера>/webmail/. — пробуем отправить письмо. Должно все получиться.

Добавление почтового сервера

Добавим еще один сервер почты в Roundcube. Открываем конфигурационный файл:

vi /usr/share/nginx/html/webmail/config/config.inc.php

Находим нашу настройку:

$config[‘default_host’] = ‘tls://192.168.0.15’;

… и меняем ее на:

$config[‘default_host’] = array(‘tls://192.168.0.15’, ‘tls://192.168.0.16’);

* мы изменили тип записи, указав, что это массив (array) и через запятую перечислили два сервера — 192.168.0.15 и 192.168.0.16.

Переходим на страницу авторизации Roundcube http://<IP-адрес сервера>/webmail/. — мы должны увидеть выпадающий список наших серверов:

Несколько доменов без выпадающего списка

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

Чтобы Roundcube автоматически выбирал почтовый сервер, внесем изменения в наш конфигурационный файл:

vi /usr/share/nginx/html/webmail/config/config.inc.php


$config[‘default_host’] = ‘tls://imap.%s’;

$config[‘smtp_server’] = ‘tls://smtp.%s’

* мы опять вернули старый формат для нашей записи default_host и преобразовали адрес с помощью переменной %s — она позволяет подставлять в имя сервера вторую часть (после @) вводимого email адреса. Например, если мы авторизуемся под пользователем [email protected], то Roundcube станет подключаться к серверу imap.admins24.com.

Чтобы данная настройка корректно работала, необходимо, чтобы сервер мог разрешать имена серверов для подключения в IP-адреса. Для этого все хосты imap и smtp для обслуживаемых почтовых доменов должны быть в DNS-сервере, к которому обращается сервер Roundcube. Или нужные записи можно прописать в файле /etc/hosts.

Брендирование (свой логотип и название)

Roundcube можно настроить для отображения вашего логотипа и названия. Для этого открываем конфигурационный файл:

vi /usr/share/nginx/html/webmail/config/config.inc.php

Добавляем строки (или редактируем):

$config[‘skin_logo’] = ‘images/logo.png’;
$config[‘product_name’] = ‘Dmosk Roundcube Webmail’;

skin_logo указывает путь относительно каталога roundcube (но если указать первым символом /, то путь будет относительно каталога с темой — это может быть полезным, если для каждой темы должен быть свой логотип); product_name — задает название в нижней части формы авторизации.

Создаем каталог для хранения изображений:

mkdir /usr/share/nginx/html/webmail/images

… и копируем туда наш логотип logo.png. Для копирования файла на сервер Linux можно воспользоваться программой WinSCP.

Открываем веб-интерфейс и проверяем, что логотип и название поменялись.

Кнопка добавления письма в СПАМ

По умолчанию, в roundcube нет возможности быстро отметить письмо как нежелательное. Для этого нужно установить плагин. Рассмотрим установку дополнения Roundcube-Plugin-Mark-as-Junk-2.

Для этого переходим на страницу проекта в GitHub и копируем ссылку на последнюю версию архива:

Используем скопированную ссылку, чтобы загрузить плагин на сервер:

wget https://github.com/johndoh/roundcube-markasjunk2/archive/master.zip

Распаковываем скачанный архив:

unzip master.zip

Переносим распакованный каталог в папку с плагинами roundcube:

mv roundcube-markasjunk2-master /usr/share/nginx/html/webmail/plugins/markasjunk2

* обратите внимание, что мы переименовываем roundcube-markasjunk2-master в markasjunk2.

Открываем конфигурационный файл:

vi /usr/share/nginx/html/webmail/config/config.inc.php

Находим строку с плагинами:

$config[‘plugins’] 

… и дописываем в нее наш плагин:

… array(
    …
    ‘markasjunk2’,
);

Готово. Переходим в roundcube и обновляем страницу. Мы должны увидеть кнопку СПАМ в панели действий:

Полезные настройки

В данном разделе рассмотрим настройки, которые могут пригодиться в ходе эксплуатации roundcube.

1. Создание писем в формате HTML

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

vi /usr/share/nginx/html/webmail/config/config.inc.php

Добавляем строку:

$config[‘htmleditor’] = 1;

* возможны варианты:

  • 0 — никогда.
  • 1 — всегда.
  • 2 — при ответе на HTML-сообщение.
  • 3 — при пересылке или ответе на HTML-сообщение.
  • 4 — всегда, кроме ответа на текстовое сообщение.

Возможные ошибки

1. Неудачное соединение с IMAP сервером.

Появляется при попытке авторизоваться в Roundcube.

Причина: как правило, недоступен IMAP-сервер или Roundcube неправильно настроен на подключение к серверу.

Решение: проверяем, что сервер доступен по сети. Проверяем настройки SSL и TLS по методу, описанному выше.

2. SMTP ошибка (554): Невозможно добавить получателя XXX (5.7.1 <XXX>: Relay access denied)

Ошибка появляется при попытке отправить письмо.

Причина: SMTP-сервер не разрешает удаленному хосту отправку сообщений. Для этого требуется пройти аутентификацию.

Решение: есть два способа устранить ошибку:

1. Настроить аутентификацю в Roundcube по методу, описанному выше.

2. Также можно решить проблему, добавив наш хост Roundcube в качестве relay на почтовом сервере. Данный способ не является правильным с точки зрения безопасности и его рекомендуется применить для временного использования.

В качестве SMTP-сервера могут использоваться разные MTA. Приведем пример для разрешения отправки писем в Postfix. Открываем его конфигурационный файл:

vi /etc/postfix/main.cf

Редактируем строку mynetworks:

mynetworks = … 192.168.0.14

* где mynetworks — список доверенных узлов, которым можно будет отправлять сообщения без дополнительных проверок. В данном примере мы добавили хост 192.168.0.14.

Перечитываем конфигурацию postfix:

systemctl reload postfix


   Мы принимаем