Настройка Dovecot + Sieve + ManageSieve + Roundcube на Linux

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

Используемые термины: DovecotRoundcubeUbuntu.

В данной инструкции мы рассмотрим процесс конфигурирования почтовых фильтров в Roundcube Webmail. Для этого мы настроим связку Dovecot + Sieve. Управление фильтрами будем осуществлять при помощи ManageSieve. Приведенная конфигурация подходит для различных систем Linux, но примеры будут приведены для Ubuntu или Debian.

Предполагается, что у нас уже настроен почтовый сервер. Все вспомогательные инструкции представлены ниже.

Установка компонентов

Установка выполняется немного по разному для RPM и DEB дистрибутивов Linux.

а) Для DEB

Перед установкой, обновим кэш пакетов:

apt update

Для нашей настройки мы установим следующие пакеты:

apt install dovecot-sieve dovecot-managesieved

* где:

  • dovecot-sieve — плагин sieve для dovecot. Позволяет создавать правила, которые будет читать последний и перемещать почту в соответствии с данными правилами.
  • dovecot-managesieved — плагин managesieved для dovecot. Позволяет запустить сервис, который будет принимать запросы на создание и управление правилами sieve.

б) Для RPM

Выполняем одну команду:

yum install dovecot-pigeonhole

Установка завершена. Переходим к настройке dovecot.

Настройка сервера dovecot

Открываем файл:

vi /etc/dovecot/conf.d/10-mail.conf

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

mail_home = /var/vmail/%d/%u/sieve

* мы задаем опцию mail_home с путем до каталогов с почтой. Обратите внимание, что на вашем сервере настройка может быть другая и необходимо указать правильное значение — можно ориентироваться по значению опции mail_location, которая указывает на путь до папки с почтой. Переменные %d и %u указывают, соответственно, на имя домена и учетной записи.

Теперь откроем файл:

vi /etc/dovecot/conf.d/15-lda.conf

Находим раздел protocol lda и в нем приводим опцию mail_plugins к виду:

protocol lda {
  # Space separated list of plugins to load (default is global mail_plugins).
  mail_plugins = $mail_plugins sieve
}

* в данном примере мы добавляем плагин sieve, который должен теперь использоваться локальным агентом доставки lda.

Открываем файл:

vi /etc/dovecot/conf.d/20-managesieve.conf

Приводим опцию protocols к следующему виду:

protocols = $protocols sieve

* по аналогии с protocol lda, мы указываем на необходимость использования sieve.

В этом же файле необходимо добавить/раскомментировать строки или убедиться, что они уже присутствуют в таком виде: 

service managesieve-login {
  inet_listener sieve {
    address = 127.0.0.1
    port = 4190
  }
  ...
}

* мы указываем, что наш сервис будет работать на порту 4190 и слушать на локальном адресе. Если наши серверы dovecot и roundcube находятся на разных серверах, объединенных по сети, необходимо заменить адрес 127.0.0.1 на тот, по которому будет доступен dovecot для roundcube.

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

vi /etc/dovecot/conf.d/90-sieve.conf

Приводим настройки к виду: 

plugin {
  sieve = /var/vmail/%d/%u/sieve/dovecot.sieve
  sieve_global_path = /etc/dovecot/sieve/default.sieve
  sieve_dir = /var/vmail/%d/%u/sieve
  sieve_global_dir = /etc/dovecot/sieve/global/
  ...
}

* где:

  • sieve — путь до файла с правилами. Указывается для каждого ящика с помощью переменных. Путь должен соответствовать тому пути, который мы указали в опции mail_home выше.
  • sieve_global_path — путь до общего файла с правилами. Используется, если отсутствует файл по пути sieve.
  • sieve_dir — путь до каталога с подключаемыми скриптами-правилами. Указывается для каждого почтового ящика. Также должен соответствовать пути опции mail_home.
  • sieve_global_dir — путь до общего каталога с подключаемыми правилами. Используется, если отсутствует sieve_dir.

Создаем каталог, путь до которого мы указали в директиве sieve_global_dir:

mkdir -p /etc/dovecot/sieve/global

Выставляем в качестве владельца и группы пользователя dovecot:

chown dovecot:dovecot -R /etc/dovecot/sieve

Перезапускаем dovecot для применения настроек:

systemctl restart dovecot

При желании, можно проверить подключение к ManageSieve командой:

telnet localhost 4190

В ответ мы должны получить что-то на подобие:

Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
"IMPLEMENTATION" "Dovecot (Debian) Pigeonhole"
"SIEVE" "fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext"
"NOTIFY" "mailto"
"SASL" "PLAIN"
"STARTTLS"
"VERSION" "1.0"
OK "Dovecot (Debian) ready."

Если система вернет ошибку, необходимо проинсталлировать утилиту telnet с помощью apt или yum:

apt install telnet

yum install telnet

Настройка Roundcube

Переходим к настройке самого веб-интерфейса.

Сначала необходимо указать, что он должен использовать плагин managesieve:

vi /var/www/html/webmail/config/config.inc.php

* в данном примере мы открываем конфигурационный файл Roundcube по пути /var/www/html/webmail/config/config.inc.php, однако, в вашей системе данный путь может быть по другому пути. Необходимо это учесть и указать правильный путь.

Нам необходимо добавить опцию managesieve_host и указать, что мы будем использовать плагин managesieve:

$config['managesieve_host'] = 'localhost';
$config['managesieve_mbox_encoding'] = 'UTF-8';

...
$config['plugins'] = [
    ...
    'managesieve',
];

* отдельно скачивать плагин managesieve не требуется, так как он уже идет в стандартной поставке с Roundcube. Также обратите внимание на опцию managesieve_mbox_encoding — для корректной работы фильтров с русскоязычными каталогами нужно указать кодировку UTF-8.

Если наши серверы Roundcube и Dovecot находятся на разных серверах, переходим в каталог с плагином managesieve:

cd /var/www/html/webmail/plugins/managesieve/

Создаем конфигурационный файл из шаблона и открываем его:

cp config.inc.php.dist config.inc.php

vi config.inc.php

Меняем значение для managesieve_host:

$config['managesieve_host'] = '192.168.0.15';

* где 192.168.0.15 — IP-адрес нашего сервера с dovecot.

Теперь можно переходить в интерфейс webmail. Заходим под любой почтовой учетной записью, кликаем по Настройки и выбираем готовый набор фильтров roundcube:

Переходим в roundcube к настройке фильтров

Сверху кликаем по Создать и задаем критерии, по которым должно работать наше правило:

Создаем правило фильтрации почты в roundcube

Кликаем по Сохранить.

Пробуем отправить тестовое письмо, чтобы оно попало под правило (в нашем примере, с темой Test). Проверяем, что правило отработало.

Возможные проблемы

Лимит на пересылку сообщений

Одно из правил фильтра позволяет пересылать сообщения на другие почтовые ящики. Однако, при попытке сделать пересылку более, чем на 4 ящика, правила не отрабатывают.

Причина: по умолчанию, плагин sieve настроен на ограничение числа правил на редирект.

Решение: установленный лимит нужно изменить.

Открываем файл:

vi /etc/dovecot/conf.d/90-sieve.conf

Находим директиву sieve_max_redirects и меняем ее значение:

sieve_max_redirects = 30

* если опция закомментирована, снимаем знак #.

Перезагружаем dovecot:

systemctl restart dovecot

Читайте также

Другие инструкции по теме:

1. Полноценный почтовый сервер с iRedMail на Ubuntu или Debian.

2. Полноценный почтовый сервер на Ubuntu Server.

3. Большой почтовый сервер на Debian.

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

Да            Нет