Доступ к почтовым ящикам: Dovecot [211.3]

Рейтинг: 49% · 10 голосов
Курс LPIC-2 (201-450 и 202-450): емкостное планирование, ядро, хранилище и RAID/LVM, продвинутая сеть, DNS/BIND, Apache/Nginx, Samba/NFS, DHCP/LDAP, почта, безопасность и VPN.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Доступ к почтовым ящикам: Dovecot [211.3]

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-2 и уровень инженера
  2. Измерение и устранение проблем с ресурсами [200.1]
  3. Прогнозирование потребности в ресурсах
  4. Компоненты ядра Linux [201.1]
  5. Сборка ядра из исходников [201.2]
  6. Управление модулями ядра в рантайме [201.3]
  7. Кастомизация запуска системы [202.1]
  8. Восстановление системы [202.2]
  9. Альтернативные загрузчики [202.3]
  10. Работа с файловой системой Linux [203.1]
  11. Обслуживание файловых систем [203.2]
  12. Создание и настройка опций ФС [203.3]
  13. Программный RAID [204.1]
  14. Тюнинг доступа к устройствам хранения [204.2]
  15. Менеджер логических томов LVM [204.3]
  16. Базовая конфигурация сети [205.1]
  17. Продвинутая конфигурация сети [205.2]
  18. Диагностика сетевых проблем [205.3]
  19. Сборка и установка программ из исходников [206.1]
  20. Резервное копирование [206.2]
  21. Оповещение пользователей о событиях
  22. DNS-сервер BIND: базовая настройка [207.1]
  23. Зоны DNS: создание и сопровождение [207.2]
  24. Безопасность DNS-сервера [207.3]
  25. Веб-сервер Apache: базовая настройка [208.1]
  26. Apache и HTTPS [208.2]
  27. Кэширующий прокси Squid [208.3]
  28. Веб-сервер и обратный прокси Nginx [208.4]
  29. Файловый сервер Samba [209.1]
  30. Файловый сервер NFS [209.2]
  31. DHCP-сервер [210.1]
  32. Аутентификация PAM и SSSD [210.2]
  33. Использование LDAP-клиента
  34. Сервер OpenLDAP [210.4]
  35. Почтовый сервер Postfix [211.1]
  36. Управление доставкой почты и Sieve [211.2]
  37. Доступ к почтовым ящикам: Dovecot [211.3] (вы здесь)
  38. Linux как маршрутизатор и фильтр [212.1]
  39. FTP-серверы [212.2]
  40. SSH углублённо [212.3]
  41. Безопасность, IDS и VPN [212.4 + 212.5]
Урок 36. Доступ к почтовым ящикам: Dovecot [211.3]

Postfix принимает письма и кладёт их в ящики, но сам отдавать почту пользователю он не умеет. За это отвечает отдельный сервер - в мире Linux это почти всегда Dovecot. Его задача - пустить почтовый клиент (Thunderbird, мобильную почту, Outlook) по протоколу IMAP или POP3, проверить, кто это и можно ли ему, найти его ящик на диске и отдать письма. В этом уроке разбираем, как Dovecot устроен изнутри, чем Maildir отличается от mbox, как работает связка passdb/userdb, зачем нужен TLS и как Dovecot становится для Postfix сервером аутентификации при отправке через SASL.

Изображение

Как это работает

Сначала про протоколы. POP3 - простая модель скачать и забыть: клиент стягивает письма на устройство и обычно удаляет их с сервера. Состояние ящика живёт на клиенте, синхронизации между устройствами нет. IMAP - наоборот: письма и папки остаются на сервере, клиент видит их состояние (прочитано, отвечено, флаги), а несколько устройств работают с одним ящиком. В 2026 рабочий стандарт - IMAP, POP3 остаётся для редких сценариев и совместимости. Открытые порты: IMAP - 143 (STARTTLS) и 993 (сразу TLS, implicit), POP3 - 110 и 995.

Dovecot построен из мелких процессов, каждый со своей ролью. Процесс login принимает соединение, поднимает TLS и разбирает протокол, но почти ничего не знает о ящике. Он передаёт логин и пароль процессу аутентификации (dovecot-auth), а тот обращается к двум базам. passdb отвечает на вопрос ГДЕ взять и как проверить пароль (PAM, файл passwd-file, SQL, LDAP). userdb отвечает на вопрос КТО этот пользователь: какой uid/gid, где его домашний каталог и где лежит почта. Это разделение - ключевая идея Dovecot: одного и того же человека можно аутентифицировать одним способом, а параметры ящика брать другим.

Хранилище. mbox - это один текстовый файл на папку: все письма склеены подряд. Прост, но при каждой записи требует блокировку всего файла, плохо переживает обрыв и параллельный доступ. Maildir - каталог из трёх подкаталогов: tmp (письмо пишется сюда), new (доставленное, ещё не прочитанное) и cur (просмотренное, с флагами в имени файла). Одно письмо - один файл, блокировки целого ящика не нужно, повреждается максимум один файл. Для IMAP-сервера под нагрузкой Maildir - правильный выбор по умолчанию.

Команды и примеры

Установка. В Debian/Ubuntu пакеты разнесены по протоколам, в RHEL/Fedora обычно ставят общий пакет.

Код: Выделить всё

# Debian 13 / Ubuntu 24.04
apt install dovecot-imapd dovecot-pop3d dovecot-lmtpd

# RHEL 10 / Fedora 41+
dnf install dovecot
Конфигурация в обоих семействах лежит в /etc/dovecot: главный файл dovecot.conf и каталог conf.d с разбивкой по темам (10-mail.conf, 10-auth.conf, 10-ssl.conf, 10-master.conf). Смотреть итоговую конфигурацию удобно так - команда показывает все параметры с учётом всех включённых файлов:

Код: Выделить всё

doveconf -n            # только то, что отличается от значений по умолчанию
doveconf -a | less     # вообще всё
dovecot -n             # эквивалент, старый способ
Выбор протоколов и формата хранения:

Код: Выделить всё

# 10-master.conf или dovecot.conf
protocols = imap pop3 lmtp

# 10-mail.conf - где и в каком формате лежит почта
mail_location = maildir:~/Maildir
# для mbox было бы: mbox:~/mail:INBOX=/var/mail/%u
Аутентификация. Самый простой passdb для теста - системные пользователи через PAM:

Код: Выделить всё

# 10-auth.conf
disable_plaintext_auth = yes   # пароли только поверх TLS
auth_mechanisms = plain login

passdb {
  driver = pam
}
userdb {
  driver = passwd            # uid/home/mail из /etc/passwd
}
TLS. Современный Dovecot требует включённого TLS и запрещает открытые пароли. Указываем сертификат и ключ (например, от Let's Encrypt):

Код: Выделить всё

# 10-ssl.conf
ssl = required
ssl_cert = </etc/letsencrypt/live/mail.example.org/fullchain.pem
ssl_key  = </etc/letsencrypt/live/mail.example.org/privkey.pem
ssl_min_protocol = TLSv1.2
Связка с Postfix (SASL). Когда пользователь отправляет письмо, Postfix должен решить, пускать ли его на ретрансляцию. Чтобы не держать второй каталог паролей, Postfix спрашивает Dovecot через unix-сокет SASL - один и тот же auth работает и на чтение, и на отправку:

Код: Выделить всё

# Dovecot, 10-master.conf
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}

# Postfix, main.cf
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
Перезапуск и проверка. systemd одинаков в обоих семействах:

Код: Выделить всё

systemctl restart dovecot
systemctl status dovecot
ss -ltnp | grep -E '993|995|143|110'
Отладка вручную через openssl - подключаемся по implicit TLS и говорим на языке IMAP:

Код: Выделить всё

openssl s_client -connect mail.example.org:993 -quiet
a login user@example.org пароль
a list "" "*"
a select INBOX
a logout
Журнал и тестовая проверка логина без клиента:

Код: Выделить всё

doveadm auth test user@example.org      # проверить, проходит ли аутентификация
doveadm mailbox list -u user@example.org
journalctl -u dovecot -f                 # смотрим ошибки в реальном времени
Частые грабли
  • Путаница passdb и userdb. passdb проверяет пароль, userdb выдаёт uid и путь к ящику. Логин не проходит - смотри passdb, логин прошёл но ящик пустой или не тот - смотри userdb и mail_location.
  • Несовпадение формата с Postfix. Если Postfix доставляет в mbox (/var/mail), а Dovecot настроен на maildir:~/Maildir - письма приходят, но клиент их не видит. Формат и путь должны совпадать на обоих концах. Чище всего отдать доставку самому Dovecot через LMTP.
  • disable_plaintext_auth = yes без TLS. Получишь Plaintext authentication disallowed - клиент не залогинится, пока не поднят STARTTLS или порт 993/995.
  • Права на сокет SASL. Если Postfix в chroot (/var/spool/postfix), сокет auth должен лежать внутри этого дерева, иначе SMTP-аутентификация молча не работает.
  • Maildir не создан. При первом входе ящик может не появиться сам - проверь автосоздание или сделай каталог заранее с правильным владельцем.
  • Самоподписанный сертификат. Мобильные клиенты молча отказываются подключаться. Для рабочего сервера нужен доверенный сертификат с именем, совпадающим с хостом из настроек клиента.
Мини-лаба
  • Установи Dovecot и включи протоколы imap и lmtp, формат хранения maildir в домашнем каталоге.
  • Настрой passdb на PAM и userdb на passwd, запрети plaintext auth.
  • Выпусти или подложи тестовый сертификат, укажи ssl_cert и ssl_key, поставь ssl = required.
  • Перезапусти dovecot, проверь doveconf -n и открытые порты через ss.
  • Подключись openssl s_client к 993, выполни login, list и select INBOX вручную.
  • Прокинь сокет SASL в Postfix, включи smtpd_sasl и отправь письмо с аутентификацией.
  • Через doveadm auth test и journalctl убедись, что и чтение, и отправка идут через один auth.
Контрольные вопросы
  • Чем принципиально отличается модель работы POP3 от IMAP и почему IMAP предпочтителен при нескольких устройствах?
  • За что отвечает passdb и за что userdb, и как по симптому понять, в какой из них проблема?
  • Какие подкаталоги есть у Maildir и какую роль играет каждый по сравнению с одним файлом mbox?
  • Какие порты слушает Dovecot для IMAP и POP3 и чем implicit TLS (993/995) отличается от STARTTLS (143/110)?
  • Как Dovecot становится сервером аутентификации для Postfix и зачем выносить сокет auth в каталог Postfix?
  • Что делает параметр disable_plaintext_auth и к какой ошибке клиента он приведёт без включённого TLS?
👍4 ❤️3 🔥1 😄 🤔2
Аватара пользователя
belal
Сообщения: 1
Зарегистрирован: 22 май 2026, 16:08

Re: Доступ к почтовым ящикам: Dovecot [211.3]

Сообщение belal »

А обязательно держать и imap и pop3? У меня все на телефонах и в тандере, я pop3 вообще выпилил из protocols и забыл. Лишний порт - лишняя поверхность.
👍1 ❤️ 🔥 😄 🤔
Аватара пользователя
juniorsegfault
Сообщения: 1
Зарегистрирован: 03 июн 2026, 14:46

Re: Доступ к почтовым ящикам: Dovecot [211.3]

Сообщение juniorsegfault »

Долго не мог понять почему логин проходит, а ящик пустой. Оказалось Postfix писал в /var/mail mbox, а Dovecot смотрел в ~/Maildir. Перевел доставку на LMTP в Dovecot и все встало на места.
👍1 ❤️1 🔥1 😄 🤔1
Ответить
← Предыдущая глава
Управление доставкой почты и Sieve [211.2]
Следующая глава →
Linux как маршрутизатор и фильтр [212.1]

Все главы курса «LPIC-2: инженер Linux (201 + 202)»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-2: инженер Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей