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

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

Тематические термины: 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:

Приветствие 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:

Страница phpinfo

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

Также для 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:

Поддержка mysql в phpinfo

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

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

Копируем ссылку на LTS-версию roundcube

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

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:roundcube123@localhost/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 roundcube@localhost IDENTIFIED BY 'roundcube123';

> quit

* данными командами мы создаем базу данных 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):

Веб-установка roundcube - проверка настроек

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

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

Веб-установка roundcube - данные для подключения к MySQL

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

Веб-установка roundcube - данные для подключения к IMAP

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

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

Веб-установка roundcube - данные для подключения к SMTP

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

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

Веб-установка roundcube - create config

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

Веб-установка roundcube - переходим к шагу 3

Проверяем, что все пункты находятся в состоянии 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 адреса. Например, если мы авторизуемся под пользователем master@dmosk.ru, то Roundcube станет подключаться к серверу imap.dmosk.ru.

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

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

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

# Серверы # Почта # NGINX # CentOS
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет