Тематические термины: Roundcube , NGINX , CentOS , PHP , PHP-FPM , MariaDB .
Разберем ситуацию, когда необходимо «с нуля» установить Roundcube на выделенный сервер. Сначала мы настроим его на работу с одним удаленным почтовым сервером, затем — несколькими. В данной инструкции будет применяться операционная система Linux CentOS и веб-сервер NGINX + php-fpm.
Конфигурируем веб-сервер
Правила брандмауэра
NGINX
PHP + PHP-FPM
NGINX и PHP-FPM
Установка MariaDB
Развертывание Roundcube
Подключение по SSL и TLS
Аутентификация на MTA
Добавление почтового сервера
Смена логотипа и названия
Установка плагина для добавления писем в СПАМ
Ограничение на размер вложения
Смена пароля пользователя из веб-интерфейса
Настройки, которые могут показаться полезными
Устранение возможных ошибок
Roundcube является веб-приложением и для работы требует веб-сервер. В данной инструкции мы будем использовать связку NGINX + PHP + PHP-FPM.
Добавим правило для разрешения http-трафика:
firewall-cmd —add-service={http,https} —permanent
Сохраняем правила:
firewall-cmd —reload
Установку выполняем следующими командами.
yum install epel-release
yum install nginx
После установки разрешаем автозапуск nginx и стартуем его:
systemctl enable nginx
systemctl start nginx
Открываем веб-браузер на любом компьютере локальной сети и заходим по адресу http://<IP-адрес сервера> — мы должны увидеть приветствие NGINX:
Roundcube работает как приложение php, поэтому необходимо установить его интерпретатор. Также нам нужен PHP-FPM, так как NGINX не занимается обработкой скриптов php.
Выполняем установку компонентов:
yum install php php-fpm
… после запускаем PHP-FPM:
systemctl enable php-fpm
systemctl start 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/nginx.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:
nginx -t && nginx -s reload
Создаем файл 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:
Устанавливаем wget:
yum install wget
Открываем страницу загрузки Roundcube. Копируем ссылку на LTS-версию продукта (длительной поддержки):
Используем ссылку, чтобы загрузить архив программы:
wget https://github.com/roundcube/roundcubemail/releases/download/1.5.3/roundcubemail-1.5.3-complete.tar.gz
* на момент обновления инструкции LTS версия была 1.5.3 .
Создаем каталог для размещения файлов 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-mbstring php-json php-gd php-zip php-imagick
Для Rocky или CentOS версии 8 установка php-imagick выполняется по следующему алгоритму.
Установим ImageMagick:
dnf install ImageMagick ImageMagick-devel
После устанавливаем пакеты, необходимые для сборки imagick:
dnf install php-devel php-pear make
Собираем imagick:
pecl install imagick
Создаем файл с расширением php:
vi /etc/php.d/20-imagick.ini
extension=imagick.so
Настроим 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 -rf /usr/share/nginx/html/webmail/installer
И заходим в браузере по адресу http://<IP-адрес сервера>/webmail/ . — должна открыться страница аутентификации пользователя. Пока не вводим никаких данных.
Если почтовый сервер поддерживает/требует 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@remontka.com , то Roundcube станет подключаться к серверу imap.remontka.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 и обновляем страницу. Мы должны увидеть кнопку СПАМ в панели действий:
По умолчанию, приложение может разрешать небольшой размер вложения. Предположим, нам нужно отправлять файлы объемом 30 Мб. Чтобы это сделать, выполняем следующие действия.
1. Настройка лимитов при отправке файлов в PHP.
Roundcube написан на PHP и нам необходимо убедиться, что интерпретатор не ограничивает нас в объеме загружаемых файлов. Для этого открываем файл:
vi /etc/php.ini
* в разных системах это могут быть разные пути, но мы рассматриваем установку под CentOS.
Редактируем следующие директивы:
post_max_size = 30M
…
upload_max_filesize = 30M
Перезапускаем интерпретатор PHP (в нашем случае это php-fpm):
systemctl restart php-fpm
2. Настраиваем Roundcube.
Открываем конфигурацию:
vi /usr/share/nginx/html/webmail/config/config.inc.php
* данный путь может отличаться для вашей системы.
Редактируем или добавляем опцию:
$config[‘max_message_size’] = ’40M’;
* обратите внимание, что необходимо установить значение max_message_size на 30-40% больше, чем желаемый максимальный размер сообщения. Это связано с тем, что в процессе отправки сообщения могут добавляться дополнительные данные (например, кодирование в base64), которые увеличивают размер сообщения.
3. Ограничения в nginx.
Если в качестве веб-сервера у нас используется nginx, то также нужно убедиться, что задана опция client_max_body_size со значением 30M или более в разделе http .
vi /etc/nginx/nginx.conf
http {
…
client_max_body_size 30m;
…
}
После внесения изменений, перезагружаем веб-сервер:
nginx -t && nginx -s reload
4. Увеличение лимита отправки для MTA.
Стоит не забывать, что сам почтовый сервер также устанавливаем ограничения на размер отправляемого сообщения. В зависимости от того, какой MTA мы используем, будут различные варианты настройки.
Например, для Postfix задать лимит можно изменив значение для директивы message_size_limit. Подробнее в инструкции Лимиты в Postfix .
Веб интерфейс roundcube позволяет пользователям менять свои пароли с помощью плагина password. Данный плагин идет в стандартной поставке, но может быть не включен в конфигурации. Проверим это — открываем файл:
vi /usr/share/nginx/html/webmail/config/config.inc.php
* в вашем случае путь до конфигурационнога файла может быть другим.
Проверяем, что в перечне плагинов есть password. В противном случае, добавляем:
$config[‘plugins’] = [
…
‘password’,
];
Переходим в каталог с плагином. Он находится в папке roundcube + plugins/password. В моем случае это:
cd /usr/share/nginx/html/webmail/plugins/password
Используем шаблон конфигурационного файла:
mv config.inc.php.dist config.inc.php
Открываем его и вносим правки:
vi config.inc.php
Значения для опций очень сильно зависят от вашей почтовой инфраструктуры. Я лишь, приведу пример моей конфигурации, но вам придется изучить вопрос, чтобы правильно настроить плагин.
$config[‘password_driver’] = ‘sql’;
…
$config[‘password_dovecotpw’] = ‘/usr/local/sbin/doveadm pw’; // for dovecot-2.x
//$config[‘password_dovecotpw’] = ‘/usr/local/sbin/dovecotpw’; // for dovecot-1.x
…
$config[‘password_db_dsn’] = ‘mysql://postfix:postfix123@localhost/postfix’;
…
$config[‘password_query’] = ‘UPDATE mailbox SET password=%c WHERE username=%u’;
* где:
* в моем примере настройка выполнена для конфигурации Dovecot + MySQL.
Заходим в Roundcube. Переходим в раздел Настройки — Пароль . Пробуем его сменить.
В данном разделе рассмотрим настройки, которые могут пригодиться в ходе эксплуатации roundcube. Изменения вводим в конфигурационном файле:
vi /usr/share/nginx/html/webmail/config/config.inc.php
По умолчанию, все письма создаются в текстовом формате. Данное поведение можно изменить в настройках пользователя. Однако, если мы хотим, чтобы у всех пользователей по умолчанию письма создавались в HTML, добавляем строку:
$config[‘htmleditor’] = 1;
* возможны варианты:
По умолчанию, время работы веб-интерфейса без необходимости вводить логин и пароль может оказаться недостаточным. Для изменения параметра редактируем директиву:
$config[‘session_lifetime’] = 1440;
* время указывается в минутах. В данном примере, 24 часа.
Можно указать, чтобы письма по умолчанию отображались общим списком в порядке поступления или в режиме чата. За это отвечает опция:
$config[‘default_list_mode’] = ‘list’;
* возможные варианты:
Пользователи могут в настройках веб-интерфейса создать новый профиль для отправки почты. При этом, он может прописать любое имя пользователя, например, «Директор».
Если мы хотим отключить данную возможность, добавляем в конфигурационный файл строку:
$config[‘identities_level’] = 4;
* где identities_level может принимать значения:
Для диагностики проблем используем логи веб-сервера и php-fpm:
tail -f /var/log/nginx/error.log
tail -f /var/log/php-fpm/www-error.log
Также в самом каталоге roundcube есть папка logs:
ls /usr/share/nginx/html/webmail/logs
Дополнительно рассмотрим некоторые проблемы, с которыми столкнулся я.
Появляется при попытке авторизоваться в Roundcube.
Причина: как правило, недоступен IMAP-сервер или Roundcube неправильно настроен на подключение к серверу.
Решение: проверяем, что сервер доступен по сети. Проверяем настройки SSL и TLS по методу, описанному выше .
Ошибка появляется при попытке отправить письмо.
Причина: 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
Авторизация выполняется с ошибкой, а в логе почты мы видим ошибку:
…: Requested DIGEST-MD5 scheme, but we have only CRAM-MD5 …
Причина: в сообщении мы видим, что сервер ожидает увидеть алгоритм для шифрования пароля CRAM-MD5.
Решение: открываем конфигурационный файл:
vi /usr/share/nginx/html/webmail/config/config.inc.php
Добавляем строку:
$config[‘imap_auth_type’] = ‘CRAM-MD5’;
Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…
Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…
Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…
Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…
YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…
Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…