Dovecot — один из самых распространённых IMAP-серверов в Linux: он нетребователен к ресурсам, умеет Maildir и mdbox, поддерживает TLS, квоты, Sieve и раздельные базы пользователей. В этой статье соберём рабочую конфигурацию для небольшого домена: шифрование, проверка подлинности, ручная проверка IMAP и диагностика типичных ошибок. Отправку почты оставим Postfix: Dovecot отвечает за хранение и доступ к ящикам, а принимать письма умеет через LMTP.

Установка и порты

В Debian, Ubuntu и Linux Mint пакеты разделены по протоколам: dovecot-imapd даёт IMAP, dovecot-lmtpd — приём почты от MTA, dovecot-pop3d нужен только для устаревшего POP3.

sudo apt install dovecot-imapd dovecot-lmtpd
dovecot --version
sudo systemctl status dovecot
sudo ss -lntp | grep -E ':(143|993|24)\b'

Порт 143 — IMAP со STARTTLS, 993 — IMAP поверх TLS, 24 — LMTP для локальной доставки. Наружу достаточно открыть 993; порт 24 не должен быть доступен из интернета.

Раскладка ящиков и права

Самое простое хранилище — Maildir: каждое письмо лежит отдельным файлом в каталоге пользователя. Такая схема хорошо переживает сбои и легко резервируется, хотя на миллионах мелких файлов может уступать mdbox. Основные параметры задаются в 10-mail.conf.

# /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir
mail_privileged_group = mail

namespace inbox {
  inbox = yes
  separator = /
}

Каталог ~/Maildir Dovecot создаст сам, если у пользователя есть права на домашний каталог. Группа mail нужна для доставки писем и работы служебных процессов; пользователь не должен быть владельцем чужих ящиков. Если почта на отдельном разделе, путь указывают абсолютным, например maildir:/var/mail/%u/Maildir, но права тогда выставляют вручную.

TLS и сертификат

Без шифрования пароль уходит открытым текстом, поэтому ssl = required — обязательная настройка, а не пожелание. Сертификат Let’s Encrypt должен быть выписан на адрес, который клиенты указывают в настройках, обычно mail.example.com.

sudo certbot certonly --webroot -w /var/www/html -d mail.example.com

# /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem
ssl_min_protocol = TLSv1.2

Символ < означает «прочитать файл», а не ссылку. После обновления сертификата конфигурацию нужно перечитать, иначе Dovecot продолжит отдавать старый; надёжнее повесить reload на hook Certbot.

sudo tee /etc/letsencrypt/renewal-hooks/deploy/dovecot-reload.sh >/dev/null <<'EOF'
#!/bin/sh
systemctl reload dovecot
EOF
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/dovecot-reload.sh
sudo certbot renew --dry-run

Проверьте цепочку извне: openssl s_client должен показать полный путь до корневого сертификата без ошибок проверки. Несовпадение имени означает, что сертификат выписан на другой домен.

Аутентификация

Для небольшого сервера хватит системных пользователей, но пароли в /etc/passwd хранить неудобно. Лучше отдельный файл с хешами и passdb. Механизмы plain и login допустимы только вместе с TLS, иначе disable_plaintext_auth = yes просто откажет клиенту.

sudo doveadm pw -s SHA512-CRYPT
# /etc/dovecot/users
# alice:{SHA512-CRYPT}$6$...:5000:5000::/home/alice::

sudo doveadm auth test alice
sudo doveadm mailbox list -u alice

Команда auth test проверяет всю цепочку: файл, пароль, механизм. Если она проходит, а клиент не подключается, проблема в сети или TLS. Для нескольких ящиков удобнее SQL или LDAP, но роли те же: passdb проверяет пароль, userdb сообщает каталог и uid.

Проверка IMAP вручную

Прежде чем искать ошибку в клиенте, поговорите с сервером напрямую: openssl устанавливает TLS-соединение, дальше вводятся команды протокола. Каждая начинается с метки, ответ содержит OK, NO или BAD.

openssl s_client -connect mail.example.com:993 \
  -servername mail.example.com -crlf -quiet

a1 LOGIN alice 'пароль'
a2 LIST "" "*"
a3 SELECT INBOX
a4 LOGOUT

Ответ LIST показывает разделитель и список папок, SELECT — количество писем и флаги. Если LOGIN возвращает NO, смотрите журнал: Dovecot пишет причину, но не сам пароль. Если соединение рвётся после приветствия, виноват сертификат или имя в -servername.

Квоты и LMTP

Квота защищает диск от забытого ящика: Dovecot считает её по размеру Maildir. Для приёма почты от Postfix через LMTP нужен сокет в приватном каталоге MTA и включённый протокол lmtp.

# /etc/dovecot/conf.d/20-lmtp.conf
protocols = imap lmtp

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    user = postfix
    group = postfix
  }
}

plugin {
  quota = maildir:User quota
  quota_rule = *:storage=5G
}

Проверьте, что Postfix видит сокет, а квота видна в doveadm quota get -u alice. Превышение должно возвращать ошибку 552, а не молча терять письма.

Диагностика

Действующая конфигурация видна в одном месте: doveconf -n печатает только изменённые параметры, полный дамп даёт doveconf -a. Так проще понять, что применилось после всех include.

sudo doveconf -n
sudo doveadm log errors
sudo doveadm who
sudo doveadm kick alice
sudo journalctl -u dovecot -n 50 --no-pager

Для сложного случая включают mail_debug и auth_debug, перезагружают сервис и смотрят журнал, а после разбора отладку выключают: она содержит адреса корреспондентов. Команда doveadm reload перечитывает конфигурацию без разрыва соединений.

Ветка 2.4 и совместимость

В дистрибутивах 2025–2026 годов всё чаще встречается ветка 2.4: часть настроек переименована, и конфигурация из старых руководств может не примениться. После обновления сравните doveconf -n с резервной копией и прочитайте предупреждения при старте; journalctl покажет первую неизвестную директиву.

Практический чек-лист

  • ssl = required и валидный сертификат на имя, которое указано в клиенте.
  • Наружу открыт только 993, порт 24 доступен лишь локально.
  • Пароли хранятся в passdb с сильным хешем, plaintext-аутентификация запрещена без TLS.
  • Квота настроена и проверена командой doveadm quota get.
  • Hook Certbot перезагружает Dovecot после продления.
  • Резервная копия Maildir снимается при остановленной доставке или через снапшот.

Итог

Рабочий IMAP-сервер на Dovecot собирается из нескольких понятных частей: раскладка Maildir, строгий TLS, отдельная база пользователей и LMTP для доставки. Каждый слой проверяется своей командой, поэтому сбой локализуется за пару минут, а не перебором настроек клиента. Начните с тестового домена, прогоните ручное подключение через openssl и только потом переносите схему на боевой сервер.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте