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

Thank you for reading this post, don't forget to subscribe!

Раз­бе­рем ситу­а­цию, когда необ­хо­ди­мо «с нуля» уста­но­вить 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

Настройка NGINXPHP-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: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):

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

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

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

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

Что­бы дан­ная настрой­ка кор­рект­но рабо­та­ла, необ­хо­ди­мо, что­бы сер­вер мог раз­ре­шать име­на сер­ве­ров для под­клю­че­ния в 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'] = 'test Roundcube Webmail';

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

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

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

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

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

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

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