Dovecot Sieve в офисе: серверная фильтрация почты без сюрпризов
Привет! Меня зовут Семёнов Евгений Сергеевич, и я директор ITFresh. За мои пятнадцать лет в этой сфере я успел настроить почтовые серверы, наверное, в нескольких десятках московских офисов — где-то всего десять ящиков, а где-то и все двести. В 2024–2025 годах к нам всё чаще стали обращаться компании, которые уже попрощались с Microsoft Exchange и Google Workspace, перейдя на свой собственный Postfix + Dovecot. И вот тут-то каждый раз всплывает один и тот же, прямо-таки наболевший вопрос: «Куда же делась та самая автосортировка почты по папкам, к которой мы так привыкли?» Мой ответ всегда один — Dovecot Sieve. В этой статье я поделюсь нашим честным, наработанным опытом: расскажу, как мы внедряем его у клиентов. Ведь наша главная цель — чтобы пользователи не разбежались, а руководитель не звонил мне через месяц с криком: «У меня все письма пропали!»
Почему серверная фильтрация важнее, чем кажется
Предлагаешь клиенту: «А давайте перенесём правила почты с Outlook прямо на сервер?» А в ответ, как правило, слышишь: «Да зачем нам это? У нас и так всё прекрасно работает!» Работает, говорите? Да, пока работает. Но это ненадолго. Сейчас объясню, на какие грабли лично наступают клиенты, когда отказываются это делать:
- Правила Outlook не работают на телефоне. Сотрудник едет в метро, открывает почту с iPhone — и там всё валится в один INBOX. Никакой сортировки по проектам, по контрагентам, по приоритету. Через неделю человек начинает пропускать важные письма.
- Правила Outlook не работают, когда ноутбук выключен. Главбух уехал в отпуск — а письма от налоговой продолжают валиться без обработки автоответчика, без переадресации заместителю.
- Правила Outlook привязаны к профилю. Переустановили Windows — настраивай правила заново по 30 штук на каждого. Я видел компанию, где один сотрудник тратил полдня каждые два месяца на восстановление своих фильтров.
- Outlook-правила не видят корпоративных меток. Антиспам в заголовках X-Spam-Status, метки от DKIM-валидатора, признаки внешней почты — всё это есть до того, как письмо попадёт к Outlook, и идеально подходит для серверной обработки.
Знаете, Sieve справляется со всеми этими четырьмя проблемами сразу. Сценарий здесь до безобразия простой: письмо сначала летит на сервер, затем проходит через антиспам и проверку DKIM. А потом уже передаётся по LMTP в Dovecot. И вот в этот момент, при самой доставке, Dovecot и запускает пользовательский sieve-скрипт. Только после этого письмо попадает точно в нужную IMAP-папку. И что самое важное — все почтовые клиенты, будь то Outlook, Apple Mail, мобильный Gmail или веб-интерфейс Roundcube, увидят его отсортированным абсолютно одинаково. Это ли не чудо?
Стек, который мы ставим в офисах
За последние пару лет мы в ITFresh не просто выработали, а прямо-таки стандартизировали целый набор решений для наших клиентов. Ниже я покажу вам то, что у нас без единого сбоя работает на двенадцати продакшен-серверах и в самой Москве, и по всему Подмосковью. Это наша гордость!
| Компонент | Версия (апрель 2026) | Роль |
|---|---|---|
| OS | Debian 12 / Ubuntu 24.04 LTS | База, безопасные обновления |
| Postfix | 3.7+ | SMTP-приём и отправка |
| Dovecot | 2.3.20+ | IMAP, LMTP, Sieve, ManageSieve |
| Pigeonhole | входит в Dovecot | реализация Sieve |
| Rspamd | 3.8+ | антиспам, DKIM-подпись |
| Roundcube | 1.6+ | веб-почта с плагином managesieve |
| OpenDMARC | 1.4+ | проверка DMARC, формирование заголовков |
Этот стек просто прекрасно "живёт" у моего самого крупного клиента — это юридическая фирма на 130 ящиков. И "живёт" уже третий год, заметьте! Я ни разу его даже не переустанавливал. Расход памяти? Всего около 3.5 ГБ. Задействовано два ядра, а диск — SSD на 200 ГБ. Поверьте, стоимость владения таким решением — это сущие копейки, особенно если сравнивать с Microsoft 365 Business Premium, где выходит примерно 2 100 рублей за ящик в месяц. Разница очевидна, правда?
Базовая интеграция Postfix + Dovecot LMTP + Sieve
Вот здесь-то частенько и допускают самую распространённую ошибку: оставляют доставку через procmail или вообще через mbox-обработчик. А ведь надо помнить: Sieve работает только тогда, когда за доставку отвечает Dovecot LDA или, что гораздо правильнее, LMTP! Вот как должна выглядеть конфигурация Postfix, чтобы всё работало как часы:
# /etc/postfix/main.cf
mailbox_transport = lmtp:unix:private/dovecot-lmtp
virtual_transport = lmtp:unix:private/dovecot-lmtp
local_recipient_maps = $virtual_mailbox_maps
Сокет на стороне Dovecot:
# /etc/dovecot/conf.d/10-master.conf
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
Включаем плагины Sieve:
# /etc/dovecot/conf.d/15-lda.conf
protocol lda {
mail_plugins = $mail_plugins sieve
}
protocol lmtp {
mail_plugins = $mail_plugins sieve
}
# /etc/dovecot/conf.d/90-sieve.conf
plugin {
sieve = file:~/sieve;active=~/.dovecot.sieve
sieve_default = /etc/dovecot/sieve/default.sieve
sieve_default_name = roundcube
sieve_extensions = +editheader +imapflags +vacation-seconds +variables +environment
sieve_max_script_size = 1M
sieve_max_actions = 32
sieve_max_redirects = 4
}
Перезапускаем Dovecot и Postfix. Готово? Теперь нужно проверить, доходит ли письмо до Sieve. Для этого есть простейший test-скрипт — он нам всё покажет:
# /etc/dovecot/sieve/default.sieve
require ["fileinto","mailbox"];
if header :contains "Subject" "TEST-SIEVE" {
fileinto :create "Test";
stop;
}
Скомпилируйте: sievec /etc/dovecot/sieve/default.sieve. Отправьте сами себе письмо с темой «TEST-SIEVE» — оно должно лечь в папку Test. Если осталось в INBOX — лезьте в /var/log/mail.log, там 90 % проблем видно сразу: либо нет прав у dovecot на чтение скрипта, либо LMTP-сокет не доступен Postfix.
Боевой набор правил, которые я ставлю всем
В каждом нашем офисе всегда есть базовый default-скрипт, он срабатывает абсолютно для всех ящиков. А ещё, конечно, мы предусмотрели пользовательский personal-скрипт, который каждый сотрудник может самостоятельно отредактировать прямо через Roundcube. Вот вам, кстати, пример отличного рабочего default-скрипта, который я обычно прописываю своим клиентам:
require ["fileinto","mailbox","imap4flags","envelope","regex","variables"];
# 1. Спам с оценкой выше 8 — в Junk
if header :contains "X-Spam-Flag" "YES" {
fileinto :create "Junk";
setflag "\\Seen";
stop;
}
# 2. Письма от провалившейся DMARC — в отдельную папку
if header :contains "Authentication-Results" "dmarc=fail" {
fileinto :create "Suspicious";
stop;
}
# 3. Внешние отправители помечаются префиксом для пользователей
if not header :matches "From" "*@itfresh.ru" {
if header :matches "Subject" "*" {
addheader "X-External-Sender" "yes";
}
}
# 4. Системные уведомления (мониторинг, бэкапы) в отдельную папку
if anyof (
header :contains "From" "zabbix@itfresh.ru",
header :contains "From" "backup@itfresh.ru",
header :contains "Subject" "[CRON]"
) {
fileinto :create "Monitoring";
stop;
}
А теперь — тот самый пользовательский шаблон, который я даю руководителям и, конечно, бухгалтерии. Они через Roundcube видят его в абсолютно человеческой форме «если — то», но под капотом, разумеется, обычный Sieve. Никакой магии, только удобство!
require ["fileinto","mailbox","vacation-seconds","envelope"];
# Письма от налоговой и контрагентов с 1С — в Бухгалтерия
if anyof (
address :is "From" "report@nalog.gov.ru",
address :matches "From" "*@1c-edo.ru",
header :contains "Subject" "ЭДО"
) {
fileinto :create "Бухгалтерия";
}
# Договоры в отдельную папку
if header :contains "Subject" "договор" {
fileinto :create "Договоры";
}
# Автоответ на время отпуска (10 дней)
vacation
:days 1
:subject "Я в отпуске до 30 апреля"
:addresses ["ivanov@itfresh.ru"]
"Здравствуйте! Я в отпуске до 30 апреля 2026 года. По срочным вопросам обращайтесь к Петрову (petrov@itfresh.ru).";
Vacation у нас работает с задержкой :days 1 — это значит, что одному и тому же отправителю автоответ уйдёт не чаще раза в сутки. Без этой опции вы получите цикл из автоответов между двумя сервисами и положите свой почтовый сервер за час. Это та грабля, на которую я наступил у первого же клиента в 2014 году — до сих пор помню тот пожар.
ManageSieve и Roundcube: чтобы пользователи могли сами
Самая главная "фишка" для всех пользователей? Это, конечно, возможность самостоятельно менять правила! Для этого мы просто включаем ManageSieve в Dovecot. Это так просто и так важно!
# /etc/dovecot/conf.d/20-managesieve.conf
service managesieve-login {
inet_listener sieve {
port = 4190
}
}
protocols = imap lmtp sieve
В Roundcube ставим плагин managesieve и в его конфиге указываем сервер 127.0.0.1:4190. Пользователь заходит в веб-почту, в настройках появляется раздел «Фильтры» — простой графический редактор. Под капотом скрипт сохраняется в ~/sieve/roundcube.sieve, и подключается через managesieve-протокол.
Я обучаю каждого нового сотрудника клиента работать с этим разделом всего за пятнадцать минут. Не верите? Все типовые сценарии, такие как сортировка по теме или отправителю, маркировка важным флагом или даже переадресация заместителю, легко "кликаются" мышью. Если же правила вдруг сложнее — например, с регулярными выражениями или проверкой сразу по нескольким полям — тогда уже зовут меня. Но поверьте, 90% всех задач пользователь совершенно спокойно делает сам. Вот это экономия времени!
Кейс: бухгалтерия юрфирмы и 4 200 писем в неделю
Хочу рассказать вам про один очень конкретный случай, который произошёл у клиента, к которому я приехал в августе 2025 года. Это была юридическая фирма, где работало шестьдесят человек. А бухгалтерия, состоящая из четырёх сотрудников, получала в среднем 4 200 писем в неделю! Раньше они сидели на Microsoft 365, и каждый бухгалтер настроил себе от 40 до 60 правил прямо в Outlook. Когда в фирме решили мигрировать на свой собственный Postfix, я предложил им собрать все эти разрозненные правила в один общий sieve-include и подключить его сразу ко всем ящикам бухгалтерии. Это было настоящее испытание!
Получилась структура: /etc/dovecot/sieve/global/buhgalteria.sieve — 180 строк правил, и в персональном скрипте каждого бухгалтера через include :global "buhgalteria" подключается общий блок плюс его личные правила. Когда меняется банк-клиент или налоговая обновляет адреса — я меняю один файл, и все 4 человека сразу получают актуальные правила. До этого приходилось каждый раз ходить и править 4 разных Outlook-профиля.
Какой был эффект? Главбух сама написала мне сообщение буквально через месяц: «Евгений, я даже не представляю, как мы вообще раньше без этого работали!» Мы сэкономили им примерно 6 часов в неделю только на ручном разборе писем. На четырёх человек это вышло в 24 часа! А это, между прочим, половина рабочего дня одного сотрудника. Моя работа (12 часов на настройку и обучение) окупилась всего за две недели. Представляете, как быстро?
Безопасность и грабли, на которые наступают чаще всего
За все эти годы у меня скопилась целая коллекция типичных ошибок, которые админы совершают, когда в первый раз настраивают Sieve. Делюсь ими с вами, чтобы вы, дорогие читатели, не наступали на те же самые грабли. Учитесь на чужом опыте!
- Открытый
redirectбез ограничений. Пользователь делает правило «всю почту с пометкой #конфиденциально пересылать на личный Gmail» — и через два дня вы выгружаете базу клиентов недобросовестному сотруднику. Решение:sieve_max_redirects = 4и явный список разрешённых доменов черезsieve_redirect_envelope_from. - Бесконечные vacation-петли. Без
:daysи без проверки:addressesваш сервер может стать звеном в спам-войне. Минимум —:days 1и явный список своих адресов. - Sieve-скрипты без компиляции. Если редактировать
~/.dovecot.sieveруками и не выполнятьsievec, Dovecot будет каждый раз компилировать скрипт при доставке — на тысяче писем в час получите серьёзную нагрузку на CPU. - Неправильные права на каталог.
~/sieveдолжен принадлежать пользователю vmail (или тому, под кем работает Dovecot LMTP), 0700, иначе — silent fail и письма доходят без обработки. - Антиспам без интеграции. Если Rspamd отдаёт оценку в заголовке
X-Rspamd-Score, а вы фильтруете поX-Spam-Statusот SpamAssassin — ничего не сработает. Сначала договоритесь, какой заголовок ставит ваш антиспам, потом пишите Sieve. - Sieve-скрипты длиннее 1 МБ. По умолчанию
sieve_max_script_size= 1М — на крупных списках доменов в правилах вы упрётесь и получите ошибку доставки.
Мониторинг: как я проверяю, что Sieve вообще работает
Без постоянного мониторинга Sieve моментально превращается в такой себе «чёрный ящик»: правила вроде бы и есть, но пользователь всё равно жалуется, что ничего не работает. Как так? Поэтому я всегда ставлю Zabbix-агента и внимательно слежу за следующими проверками. Только так можно быть уверенным!
- Размер каталога
/var/vmail/*/sieve— мониторю прирост, чтобы заметить ошибочные циклы. - Лог
/var/log/dovecot.logпо шаблонуsieve.*error— алерт в Telegram, если за час больше 5 ошибок. - Счётчик действий Sieve через
doveadm stats dump sieve— раз в сутки в Grafana, чтобы видеть тренды. - Тестовый ящик
sieve-canary@клиент.ru— раз в час Zabbix отправляет туда письмо с темой «MONITOR-CANARY-XXX» и через минуту проверяет, что оно ушло в папку Monitoring. Если не ушло — алерт.
Закажите аудит почтовой инфраструктуры
Я лично приезжаю на аудит почтовых серверов в Москве и в радиусе 50 км от МКАД. Всего за 2–3 рабочих дня вы получите от меня подробный письменный отчёт, где будет оценка текущего состояния Postfix/Dovecot, выявленные уязвимости SPF/DKIM/DMARC, а также чёткий план перехода на серверную фильтрацию через Sieve. И всё это — без каких-либо обязательств с вашей стороны.
Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш
FAQ — что чаще всего спрашивают перед внедрением
- Зачем нужен серверный Sieve, если есть правила Outlook?
- Outlook-правила работают только когда клиент запущен. Sieve фильтрует на сервере до доставки в IMAP — правила работают всегда, даже если ноутбук закрыт, и одинаково применяются на десктопе, телефоне и в веб-почте.
- Можно ли подключить Sieve к Postfix?
- Да, через LDA-интеграцию. Postfix передаёт письмо в Dovecot LMTP, а тот вызывает Sieve-плагин при доставке в почтовый ящик пользователя.
- Как пользователю самому редактировать правила?
- Через ManageSieve-протокол (порт 4190) и веб-почту Roundcube с плагином managesieve. Пользователь видит человеческий интерфейс, но в файле лежит обычный sieve-скрипт.
- Сколько стоит настройка под ключ?
- В АйТи Фреш развёртывание Postfix + Dovecot + Sieve + Roundcube для офиса до 50 ящиков обходится в 35 000–55 000 руб. Включает SPF/DKIM/DMARC, антиспам и обучение администратора.
- Что чаще всего ломается при первой настройке?
- Права на каталог ~/sieve, отсутствие LMTP-сокета у Postfix и забытая директива sieve_default. Симптом — письма уходят в дефолтный INBOX, правила игнорируются.
