воскресенье, 23 февраля 2014 г.

Установка и настройка Roundcube

Заключительная статья из серии статей о настройке почтовой системы. В прошлых заметках была рассмотрена настройка серверной части почтовой системы, настройка SSL/TLS и настройка почтового клиента Thunderbird/Icedove: Установка и настройка Postfixadmin, Установка и настройка Dovecot, Установка и настройка Postfix, OpenDKIM, ClamAV-Milter, Milter-Greylist и Настройка SSL/TLS в Postfix, Dovecot, Lighttpd, Дополнения Thunderbird/Icedove.

На этот раз мы рассмотрим настройку почтового веб-клиента Roundcube.

Для работы Roundcube понадобится веб-сервер с поддержкой PHP и одна из СУБД: MySQL, PostgreSQL (в настройках самого Roundcube была ещё замечена возможность работы с SQLite, однако в пакетах никаких признаков поддержки SQLite обнаружено не было).

1. Установка пакетов и создание базы данных

Установим необходимые пакеты, если они ещё не установлены:
# apt-get install mysql-server mysql-client lighttpd php5-cgi
Установим Roundcube и пакеты с дополнительными плагинами:
# apt-get install roundcube php-auth-sasl roundcube-plugins roundcube-plugins-extra
В процессе установки пакета roundcube-core будет предложено настроить базу данных для Roundcube:
Запрос автоматической настройки базы данных
Запрос пароля администратора СУБД
2. Настройка веб-сервера

Подготовим файл /etc/lighttpd/conf-available/50-roundcube.conf, используя для его составления информацию из файлов /etc/roundcube/lighttpd.conf и /usr/share/roundcube/.htaccess:
$HTTP["host"] == "mail.domain.tld" {

  server.document-root = "/var/lib/roundcube"

  alias.url += ( "program/js/tiny_mce" => "/usr/share/tinymce/www",
                 "favicon.ico" => "/usr/share/roundcube/skins/default/images/favicon.ico" )

  $HTTP["url"] =~ "^/config|/temp|/logs" {
    url.access-deny = ( "" )
  }
}
Создадим файл /etc/php5/mods-available/roundcube.ini, используя при его составлении информацию из файла /usr/share/roundcube/.htaccess:
upload_max_filesize=5M
;post_max_size=6M
;session.gc_maxlifetime=21600
;session.gc_divisor=500
;session.gc_probability=1
;mbstring.func_overload=0
В этот файл я вписал лишь те настройки, которые отличаются от дистрибутивных. Настройки сессии я не считаю столь важными, чтобы заменять ими стандартные, поэтому их я закомментировал. Также я закомментировал настройку post_max_size, потому что другое приложение использует большее значение. Из всех настроек я оставил только upload_max_filesize, зато закомментировал её в другом приложении, т.к. там её значение было меньше.

3. Настройка приложения

Настроим roundcube, прописав настройки в файл /etc/roundcube/main.inc.php:
$rcmail_config['default_host'] = 'tls://%n';
$rcmail_config['username_domain'] = '%d';
$rcmail_config['mail_domain'] = '%d';
$rcmail_config['smtp_server'] = 'tls://%n';
$rcmail_config['smtp_user'] = '%u';
$rcmail_config['smtp_pass'] = '%p';
$rcmail_config['smtp_helo_host'] = '';
$rcmail_config['force_https'] = true;
О настройках:
  • default_host - имя узла, выбираемое при входе в веб интерфейс. Можно указать список узлов, который будет отображаться в виде выпадающего меню. Можно использовать шаблоны: %n - использовать доменное имя из URL, %d - использовать доменное имя из URL без первой части, %s - использовать доменное имя, указанное после символа @ в логине пользователя. Можно указать префикс ssl:// или tls:// для использования защищённого соединения,
  • username_domain - автоматически добавлять домен к логинам пользователей. Можно задать ассоциативный массив для отображения доменного имени из URL в почтовый домен, можно использовать шаблоны: %h - имя IMAP-узла пользователя (что бы это ни значило), %n - доменное имя из URL, %d - доменное имя из URL без первой части, %z - доменное имя IMAP-узла без первой части,
  • mail_domain - доменное имя для формирования адресов новых пользователей. Правила такие же, как и для username_domain,
  • smtp_server - имя узла, выбираемое для отправки почты. Можно использовать шаблоны: %h - имя SMTP-узла пользователя (что бы это ни значило), %n - доменное имя из URL, %d - доменное имя из URL без первой части, %z - доменное имя SMTP-узла без первой части. Можно указать префикс ssl:// или tls:// для использования защищённого соединения,
  • smtp_user - если для отправки почты требуется аутентификация, то здесь можно указать имя пользователя или шаблон %u, чтобы имя пользователя бралось из веб-интерфейса,
  • smtp_pass - аналогично, если для отправки почты требуется аутентификация, то здесь можно указать пароль пользователя или шаблон %p, чтобы пароль пользователя брался из веб-интерфейса,
  • smtp_helo_host - подставлять в команду HELO/EHLO указанное имя узла. Если оставить строку пустой, то имя узла будет браться из переменной SERVER_NAME веб-сервера или же будет использоваться имя localhost,
  • force_https - настройка, предписывающая RoundCube переадресовывать пользователя на защищённую версию протокола HTTP - HTTPS.
4. Проверка работы

Теперь можно подключать оба файла к использованию:
# ln -s ../mods-available/roundcube.ini conf.d/30-roundcube.ini
# lighty-enable-mod roundcube
# /etc/init.d/lighttpd restart
И войти в веб-интерфейс Roundcube по ссылке http://mail.domain.tld:
Страница входа в Roundcube
5. Настройка плагинов

Из всех плагинов меня в первую очередь заинтересовали три:
  • Плагин password для смены пароля на почтовый ящик (находится в пакете roundcube-plugins),
  • Плагин acl для настройки IMAP ACL (находится в пакете roundcube-plugins),
  • Плагин dkimstatus для проверки DKIM-подписей полученных сообщений (находится в пакете roundcube-plugins-extra),
  • Плагин sieverules для управления правилами фильтрации Sieve на IMAP-сервере по протоколу ManageSieve (находится в пакете roundcube-plugins-extra).
5.1. Настройка плагина password

Для настройки плагина password впишем в файл /etc/roundcube/plugins/password/config.inc.php следующие настройки:
<?php
// Empty configuration for password
// See /usr/share/roundcube/plugins/password/config.inc.php.dist for instructions

$rcmail_config['password_driver'] = 'sql';
$rcmail_config['password_confirm_current'] = true;
$rcmail_config['password_minimum_length'] = 7;
$rcmail_config['password_db_dsn'] = 'mysql://roundcube:roundcube_password@localhost/postfixadmin';
$rcmail_config['password_query'] = 'UPDATE mailbox SET password=%c, modified=NOW() WHERE username=%u';
?>
И дадим пользователю roundcube права на изменение пароля:
INSERT INTO tables_priv(host, db, user, table_name, table_priv, column_priv) VALUES
('localhost', 'postfixadmin', 'roundcube', 'mailbox', '', 'Select,Update');

INSERT INTO columns_priv(host, db, user, table_name, column_name, column_priv) VALUES
('localhost', 'postfixadmin', 'roundcube', 'mailbox', 'username', 'Select'),
('localhost', 'postfixadmin', 'roundcube', 'mailbox', 'password', 'Update'),
('localhost', 'postfixadmin', 'roundcube', 'mailbox', 'modified', 'Update');

FLUSH PRIVILEGES;
Теперь включим использование плагина password, добавив его в настройку plugins в файле /etc/roundcube/main.inc.php:
$rcmail_config['plugins'] = array('password');
После этого в веб-интерфейсе Roundcube появится дополнительная вкладка для смены пароля:
Плагин password в Roundcube
5.2. Настройка плагина acl

У этого плагина, на мой взгляд, есть лишь одна настройка, заслуживающая внимания - acl_advanced_mode, с помощью которой можно включить более тонкую настройку IMAP ACL. Для её включения нужно вписать в файл /etc/roundcube/plugins/acl/config.inc.php следующую строку:
$rcmail_config['acl_advanced_mode'] = true;
Для включения самого плагина acl нужно добавить его в настройку plugins в файле /etc/roundcube/main.inc.php:
$rcmail_config['plugins'] = array('password', 'acl');
После добавления плагина в настройках папок появится новая вкладка Sharing:
Плагин acl в Roundcube
5.3. Настройка плагина dkimstatus

Плагин не требует настройки и для его включения нужно добавить его в настройку plugins в файле /etc/roundcube/main.inc.php:
$rcmail_config['plugins'] = array('password', 'acl', 'dkimstatus');
После его включения у каждого письма с правильной DKIM-подписью появится значок в виде галочки в зелёном кружке (пример письма, полученного от отправителя в Yandex-почте):
Плагин dkimstatus в Roundcube
5.4. Настройка плагина sieverules

В пакетах roundcube-pugins и roundcube-plugins-extra были найдены два плагина для настройки правил фильтрации почты на IMAP-сервере через протокол ManageSieve: managesieve и sieverules. Как оказалось, второй плагин был написан на основе первого и по сути заменяет его собой. Поэтому я решил настроить именно плагин sieverules.

Для настройки плагина sieverules скопируем файл /usr/share/roundcube/plugins/sieverules/config.inc.php.dist в файл /etc/roundcube/plugins/sieverules/config.inc.php. Нужно именно скопировать файл, т.к. при добавлении настроек в имеющийся пустой файл, плагин работает неправильно - выпадающий список действий оказывается пустым. Изменим в нём значения следующих настроек:
$rcmail_config['sieverules_host'] = '%n';
$rcmail_config['sieverules_port'] = 4190;
$rcmail_config['sieverules_usetls'] = TRUE;
Краткое описание изменённых настроек:
  • sieverules_host - задаёт сервер ManageSieve. Поддерживаются шаблоны: %h - имя IMAP-сервера, %n - имя сервера из URL, %d - доменное имя из URL без первой части.
  • sieverules_port - задаёт номер порта сервера ManageSieve. Ранее использовался TCP-порт с номером 2000, однако позже он был объявлен устаревшим и теперь используется TCP-порт с номером 4190.
  • sieverules_usetls - настройка задаёт использование защищённого соединения для связи с сервером ManageSieve.
Осталось включить использование плагина в настройках RoundCube, добавив имя плагина в настройку plugins в файле /etc/roundcube/main.inc.php:
$rcmail_config['plugins'] = array('password', 'acl', 'dkimstatus', 'sieverules');
После добавления плагина в настройках появляется вкладка "Фильтры":
Плагин sieverules в Roundcube
По умолчанию имеется только один набор правил, а доступ к прямому редактированию правил отключен - редактирование осуществляется при помощи веб-интерфейса плагина.

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

При помощи настройки sieverules_adveditor можно включить прямой доступ к редактированию скриптов фильтрации Sieve. При этом появляется возможность писать более сложные правила, однако и увеличивается вероятность ошибок в синтаксисе или непонимания семантики фильтра.

Это была заключительная статья из серии статей о настройке почтовой системы.

6 комментариев:

сисадмин комментирует...

Уважаемый автор не подскажет что означает в roundcube флажок "подписан" у папки (в разделе "настройки" - "папки")?

Unknown комментирует...

Есть еще замечательный плагин markasjunk2, который добавляет две кнопки "Пометить как спам" и "не спам", если письмо попало в спам. При этом он обучает фильтр спаму.
У меня есть вопрос по DKIMstatus. Почему-то локальные письма (от root и т.п.) не проходят проверку этим плагином, хотя письмо отправленное на yandex или gmail проходит проверку как подписанное. Письмо пришедшее с внешнего адреса тоже проходит проверку нормально, в чем может быть причина?

morbo комментирует...

DKIM-подпись имеет смысл добавлять при отправке на другой почтовый сервер, чтобы тот мог проверить подпись. Своей собственной почте сервер доверяет и так.

Собственно, подпись и добавляется сервером при отправке на внешний адрес, а внешний сервер точно так же присылает на наш сервер подписанные письма.

DKIMstauts отображает подпись, когда она есть.

Анонимный комментирует...

Здравствуйте. Не могли бы уточнить какое "другое" приложение использует post_max_size. Ни как не могу добиться увеличения загружаемого файла.
поправил в /etc/php5/mods-available/roubdcube.ini (объем увеличился с 5М до 8М) где-то еще нужно поправить?

morbo комментирует...

Попробуйте так посмотреть:
cd /etc/php5/mods-available/
grep post_max_size

А вообще, может быть всё верно? У меня в статье написано, что править нужно ещё и значение опции upload_max_filesize

Анонимный комментирует...

Здравствуйте.
А можете вы подсказать почему roundcube добавляет заголовок Sender: Apache@domen.tld, вместо реального домена, с которого (при авторизации пользователя по емайл) отправляется письмо?
Сервер на VPS, сайтов много (около 10) но из конфигов нашел только эти файлы:
config.inc.php
config.inc.php.sample
db.inc.php.rpmsave
defaults.inc.php
main.inc.php.rpmsave
mimetypes.php

никакого файла main.inc.php нету.
Если можете поднастроить сервер - сочтемся (для связи alexk79[at]gmail.com).