Dovecot Sieve в офисе: серверная фильтрация почты без сюрпризов
Меня зовут Семёнов Евгений Сергеевич, я директор АйТи Фреш и за пятнадцать лет настроил почтовые серверы в нескольких десятках московских офисов от 10 до 200 ящиков. В 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, и тот при доставке выполняет sieve-скрипт пользователя. Только после этого письмо попадает в IMAP-папку — куда уже все клиенты (Outlook, Apple Mail, мобильный Gmail, веб-Roundcube) увидят его одинаково отсортированным.
Стек, который мы ставим в офисах
За последние два года мы у клиентов АйТи Фреш стандартизировали следующий набор. Ниже — то, что у нас работает на 12 продакшен-серверах в Москве и Подмосковье без сбоев:
| Компонент | Версия (апрель 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-протокол.
Я обучаю каждого нового сотрудника клиента работать с этим разделом за 15 минут. Все типовые сценарии — сортировка по теме, по отправителю, маркировка флагом, переадресация заместителю — кликаются мышью. Сложные правила (с регулярными выражениями, с проверкой по нескольким полям) уже зовут меня. Но 90 % задач пользователь делает сам.
Кейс: бухгалтерия юрфирмы и 4 200 писем в неделю
Расскажу про конкретный случай у клиента, к которому я зашёл в августе 2025 года. Юридическая фирма, 60 человек, бухгалтерия из 4 человек получает в среднем 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, правила игнорируются.