Почтовый сервер Dovecot#

Dovecot — почтовый сервер, реализующий протоколы IMAP и POP3, предназначенный для получения электронной почты с почтового ящика на сервере.

Dovecot поддерживает как простую аутентификацию, так и расширенные механизмы, включая SSL/TLS. Может использоваться в связке с MTA (Mail Transfer Agent), такими как Postfix, для полного цикла обработки электронной почты.

Предоставляет следующие ключевые функции:

  • Поддержка протоколов IMAP и POP3.

  • Поддержка системных пользователей (PAM), виртуальных пользователей (через LDAP, passwd-файлы).

  • Поддержка SASL (Simple Authentication and Security Layer) для интеграции с внешними MTA.

  • Механизмы LDA (Local Delivery Agent) и LMTP для доставки входящей почты в почтовые ящики.

  • Поддержка различных форматов хранения почты: mbox, Maildir, dbox, imapc, pop3c.

  • Поддержка шифрования соединений (SSL/TLS).

  • Поддержка ACL (Access Control Lists) для совместного доступа к папкам.

  • Интеграция с Sieve для фильтрации входящей почты на стороне сервера.

Архитектура процессов Dovecot#

Архитектура Dovecot построена на принципе модульности и разделения процессов. Dovecot использует многопроцессную модель. Все процессы изолированы друг от друга и запускаются с минимальными привилегиями.

Основные процессы:

  • мастер-процесс (dovecot);

  • процесс логирования (log);

  • конфигурационный процесс (config);

  • аутентификационный процесс (auth);

  • логин-процессы (imap-login, pop3-login);

  • почтовые процессы (imap, pop3).

Процессы Dovecot

Чтобы увидеть все запущенные процессы, выполните:

ps auxw|grep "dovecot"

Пример вывода:

root        7245  0.1  0.1   2308  1096 pts/0    S+   19:53   0:00 dovecot
dovecot     7246  0.0  0.0   2084   824 pts/0    S+   19:53   0:00 dovecot/anvil
root        7247  0.0  0.0   2044   908 pts/0    S+   19:53   0:00 dovecot/log
root        7250  0.0  0.3   4988  3740 pts/0    S+   19:53   0:00 dovecot/config
root        7251  0.0  0.2  10024  2672 pts/0    S+   19:53   0:00 dovecot/auth
vmail       7252  0.0  0.1   3180  1264 pts/0    S+   19:53   0:00 dovecot/imap
vmail       7255  0.0  0.1   3228  1596 pts/0    S+   19:54   0:00 dovecot/pop3
dovenull    7260  0.0  0.1   4028  1940 pts/0    S+   19:54   0:00 dovecot/imap-login
dovenull    7262  0.0  0.1   4016  1916 pts/0    S+   19:54   0:00 dovecot/pop3-login

Мастер-процесс#

dovecot - мастер-процесс (Master process), запускаемый при старте службы.

Играет роль «оркестратора», управляя жизненным циклом всех остальных процессов почтового сервера.

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

Процесс логирования#

dovecot/log - процесс логирования (Log process), отвечающий за централизованную обработку и запись сообщений от всех дочерних процессов.

Его основная цель — обеспечить запись логов без дублирования и конфликтов между параллельно работающими процессами.

Конфигурационный процесс#

dovecot/config - конфигурационный процесс (Config process), отвечающий за валидацию и кеширование конфигурационных файлов.

Служит централизованным источником конфигурационных данных для всех дочерних процессов сервера.

Основная задача — избежать дублирования чтения и разбора конфигурации каждым отдельным процессом. Каждый процесс запрашивает только необходимые параметры.

Конфигурация инициализируется один раз при запуске Dovecot и хранится в памяти.

При перезагрузке конфигурации мастер-процесс уведомляет конфигурационный процесс, который повторно читает файлы и обновляет кеш.

Аутентификационный процесс#

dovecot/auth - аутентификационный процесс (Authentication process), отвечающий за централизованную проверку подлинности пользователей. Обеспечивает гибкую, безопасную и масштабируемую аутентификацию.

Аутентификационный процесс запускается мастер-процессом и работает в фоновом режиме. Он взаимодействует с другими компонентами через Unix-сокеты или TCP-каналы, например:

  • imap-login → отправляет учетные данные → auth;

  • auth → проверяет и возвращает статус с данными пользователя.

При успехе imap-login передает управление imap-процессу с уже известными параметрами пользователя.

Логин-процессы#

Логин-процессы (Login processes) отвечают за прием входящих сетевых подключений и выполнение первоначальной аутентификации клиентов по протоколам IMAP и POP3. Они выступают в роли шлюзов между клиентом и основными почтовыми процессами.

Dovecot использует два основных логин-процесса:

  • dovecot/imap-login — обрабатывает подключения по протоколу IMAP;

  • dovecot/pop3-login — обрабатывает подключения по протоколу POP3.

Оба процесса работают по одинаковому принципу, но настроены под особенности соответствующих протоколов.

Почтовые процессы#

Почтовые процессы (Mail processes) — группа рабочих процессов, обрабатывающих почтовые сессии после успешной аутентификации пользователя. Они отвечают за выполнение всех операций с почтовыми ящиками: чтение, поиск, копирование, удаление сообщений, управление папками и применение фильтров. Каждый почтовый процесс обслуживает одну клиентскую сессию и работает с полными правами доступа к почтовому ящику пользователя.

Примеры почтовых процессов:

  • dovecot/imap;

  • dovecot/pop3.

Иные процессы#

Также в Dovecot есть иные часто используемые процессы:

  • dovecot/anvil - отслеживание подключений пользователей;

  • dovecot/dict - прокси-процесс для поиска в dict;

  • dovecot/dns-client - асинхронный поиск в DNS;

  • dovecot/imap-hibernate - перевод бездействующих IMAP-соединений в режим гибернации;

  • dovecot/indexer и dovecot/indexer-worker - индексация полнотекстового поиска;

  • dovecot/ipc - связь с процессами входа в систему;

  • dovecot/stats - статистика отслеживания.

Конфигурационные файлы Dovecot#

Конфигурационные файлы Dovecot расположены в каталоге /etc/dovecot/.

Пример иерархии конфигурационных файлов:

/etc/dovecot/
├── dovecot.conf                  
└── conf.d/   
    ├── 10-auth.conf
    ├── 10-director.conf
    ├── 10-logging.conf
    ├── 10-mail.conf
    ├── 10-master.conf 
    ├── 10-metrics.conf 
    ├── 10-ssl.conf 
    ├── 15-lda.conf   
    ├── 15-mailboxes.conf
    ├── 20-imap.conf 
    ├── 20-lmtp.conf 
    ├── 20-pop3.conf
    ├── 20-submission.conf
    ├── 90-acl.conf
    ├── 90-plugin.conf   
    ├── 90-quota.conf 
    ├── auth-checkpassword.conf.ext
    ├── auth-deny.conf.ext 
    ├── auth-dict.conf.ext
    ├── auth-ldap.conf.ext
    ├── auth-master.conf.ext
    ├── auth-passwdfile.conf.ext
    ├── auth-sql.conf.ext
    ├── auth-static.conf.ext
    └── auth-system.conf.ext 

Конфигурационные файлы в /etc/dovecot/conf.d/ загружаются в лексикографическом порядке. Префиксы в виде чисел задают приоритет:

  • 10- - базовые настройки;

  • 15- - дополнения к базовым настройкам;

  • 20- - протоколы и сервисы;

  • 90- - плагины и локальные переопределения.

Внешние файлы .ext не имеют префикса и реализуют настройки интеграции с различными сервисами. Подключаются с помощью директивы !include.

Команда ниже выводит значения конфигурации:

doveconf -n

Основной файл конфигурации#

dovecot.conf - основной конфигурационный файл, включающий внешние конфигурационные файлы через директивы.

Поддерживает два типа директив для подключения внешних файлов:

  • !include <путь> - если внешний файл не найден, выдает ошибку запуска;

  • !include_try <путь> - загружает файл, если тот существует, игнорирует возникновение ошибок в случае отсутствия файла.

Пример конфигурации:

# /etc/dovecot/dovecot.conf

# Загрузить все конфигурационные файлы из каталога conf.d/
!include conf.d/*.conf

# Загрузить дополнительный файл конфигурации, если тот существует
!include_try local.conf

Команда ниже выводит значения параметров основного конфигурационного файла:

doveconf -c /etc/dovecot/dovecot.conf -n

Файлы конфигурации, содержащие базовые настройки#

10-auth.conf#

Файл /etc/dovecot/conf.d/10-auth.conf отвечает за глобальные параметры аутентификации.

Он определяет, какие механизмы входа разрешены, как обрабатываются учетные данные, и какие внешние сервисы (PAM, LDAP и др.) используются для проверки подлинности пользователей.

Основные параметры конфигурационного файла:

  • disable_plaintext_auth - определяет, разрешена ли передача пароля в открытом виде.

    Возможные значения:

    • yes - разрешает аутентификацию только через зашифрованное соединение;

    • no - разрешает передачу пароля в открытом виде.

  • auth_mechanisms - определяет список разрешенных SASL-механизмов аутентификации.

    Возможные значения:

    • plain - простая передача логина и пароля (требует TLS);

    • scram-sha-256 - передача пароля с использованием SHA-256.

  • auth_username_chars - определяет перечень разрешенных символов в логинах;

  • auth_verbose - включает/выключает логирование всех попыток входа. Возможные значения: yes/no;

  • auth_cache_size - устанавливает размер кеша успешных аутентификаций;

  • директивы !include <путь> и !include_try <путь>.

10-director.conf#

Файл /etc/dovecot/conf.d/10-director.conf предназначен для конфигурации Dovecot Director — встроенного компонента, который позволяет использовать Dovecot в режиме прокси-сервера для балансировки нагрузки между несколькими backend-серверами хранения почты.

Основные параметры конфигурационного файла:

  • director_servers - список IP-адресов других серверов Director в кластере (для отказоустойчивости).

  • director_mail_servers - список backend-серверов, на которые можно перенаправлять почтовые сессии.

  • director_user_expire - время, через которое информация о пользователе удаляется из кеша;

  • auth_proxy - включение/выключение проксирования аутентификации. Если включено, аутентификационный процесс на Director-сервере не проверяет пароль локально, а перенаправляет запрос на backend-сервер, который выполняет аутентификацию.

10-logging.conf#

Файл /etc/dovecot/conf.d/10-logging.conf отвечает за конфигурацию системы логирования в Dovecot.

Он определяет, куда и в каком виде записываются сообщения об ошибках, предупреждениях, информационных событиях и отладочных данных.

Основные параметры конфигурационного файла:

  • log_path - путь к LOG-файлу для записи основных сообщений;

  • info_log_path - путь к LOG-файлу для записи информационных сообщений;

  • debug_log_path - путь к LOG-файлу для записи отладочных сообщений;

  • syslog_facility - определение категории (facility) для Syslog.

10-mail.conf#

Файл /etc/dovecot/conf.d/10-mail.conf отвечает за глобальные параметры работы с почтовыми ящиками.

Он определяет, где и в каком формате хранится почта, как Dovecot взаимодействует с файловой системой.

Основные параметры конфигурационного файла:

  • mail_location - местоположение почтовых ящиков пользователя;

  • mail_access_groups - группа пользователей, имеющая доступ к почтовым ящикам;

  • mail_cache_min_mail_count - минимальное число сообщений в ящике, при котором начинается использовать кеш;

  • mail_temp_dir - каталог для временных файлов.

10-master.conf#

Файл /etc/dovecot/conf.d/10-master.conf определяет архитектуру процессов, сетевых слушателей (listeners) и Unix-сокеты, через которые компоненты Dovecot взаимодействуют друг с другом и с внешними сервисами (например, Postfix).

Конфигурация строится вокруг блоков service { ... }, каждый из которых описывает отдельный компонент Dovecot.

Блок может содержать:

  • inet_listener — сетевые порты (TCP/IP);

  • unix_listener — Unix-сокеты.

Основные блоки:

  • service imap-login и service pop3-login - управляют логин-процессами, принимающими подключения клиентов:

    service imap-login {
      inet_listener imap {
        port = 143
      }
      inet_listener imaps {
        port = 993
        ssl = yes
      }
    
      # Минимум процессов
      process_min = 4
      # Лимит одновременных подключений
      process_limit = 1024
      # Ограничение процессов на сессию
      service_count = 1
    }
    
  • service auth - определяет сокеты аутентификации:

    service auth {
      # Сокет для Postfix
      unix_listener /var/spool/postfix/private/auth {
        mode = 0666
        user = postfix
        group = postfix
      }
    
      # Внутренний сокет
      unix_listener auth-userdb {
        mode = 0600
        user = vmail
      }
    
      # Ограничение процессов
      process_limit = 1024
    }
    
  • service imap и service pop3 - настраивают почтовые процессы:

    service imap {
      # Имя пользователя, от которого будет запускаться сессия
      user = $default_internal_user
      # Ограничение виртуальной памяти
      vsz_limit = 256M
      # Ограничение сессий
      process_limit = 1024
    }
    
  • service lmtp - настраивает сетевой протокол LMTP:

    service lmtp {
      inet_listener lmtp {
        port = 24
      }
      user = vmail
    }
    
  • service lda - настраивает LDA:

    service dovecot-lmtp {
      unix_listener lmtp {
        user = postfix
        group = postfix
        mode = 0600
      }
    }
    

10-metrics.conf#

Файл /etc/dovecot/conf.d/10-metrics.conf отвечает за настройку сбора и экспорта метрик производительности и использования.

Конфигурация строится вокруг блоков metric { ... }, каждый из которых определяет набор событий и способ экспорта.

Пример метрик, отвечающих за события успешных аутентификаций:

metric auth_success {
  filter = event=auth_request_finished AND success=yes
}

Пример указания способа экспорта:

event_exporter log {
  format = json
  format_args = time-rfc3339
  transport = log
}

10-ssl.conf#

Файл /etc/dovecot/conf.d/10-ssl.conf отвечает за конфигурацию защиты в Dovecot.

Он определяет, как сервер устанавливает зашифрованные соединения с почтовыми клиентами.

Основные параметры конфигурационного файла:

  • ssl - требование шифрования.

    Возможные значения:

    • required — все подключения должны использовать TLS;

    • yes — разрешены как зашифрованные, так и незашифрованные соединения;

    • no — шифрование отключено.

  • ssl_cert и ssl_key - пути к сертификату и приватному ключу;

  • ssl_ca - цепочка доверия, если используется промежуточный сертификат;

  • ssl_min_protocol - минимальная версия TLS;

  • ssl_cipher_list - список разрешенных криптографических алгоритмов;

  • ssl_prefer_server_ciphers - приоритет настроек сервера над клиентом.

Установка Dovecot#

Чтобы установить Dovecot, используйте:

dnf install dovecot

Запуск Dovecot#

Чтобы запустить Dovecot, введите команду:

systemctl start dovecot

Для проверки статуса Dovecot используйте:

systemctl status dovecot

Для активации автозапуска Dovecot при загрузке ОС выполните:

systemctl enable dovecot

Для перезагрузки конфигурации без остановки сессии выполните:

systemctl reload dovecot

Управление Dovecot#

Для управления и администрирования Dovecot используйте утилиту doveadm.

Часто используемые команды утилиты представлены в таблице ниже.

Команда

Описание

doveadm auth test <user>

Проверяет возможность аутентификации пользователя

doveadm who

Отображает все активные подключения клиентов

doveadm kick <user>

Принудительно завершает все сессии указанного пользователя

doveadm kick -i <IP>

Завершает все сессии с указанного IP-адреса

doveadm search -u <user> <criteria>

Выполняет поиск сообщений по IMAP-критериям (criteria) (например, UNSEEN, FROM)

doveadm copy -u <user> <directory> <source>

Копирует сообщения из источника (source) в указанный каталог (directory)

doveadm move -u <user> <directory> <source>

Перемещает сообщения из источника в указанный каталог

doveadm expunge -u <user> <directory> DELETED

Окончательно удаляет помеченные на удаление сообщения

doveadm index -u <user> '*'

Перестраивает индексы всех каталогов пользователя

doveadm purge -u <user>

Удаляет устаревшие записи из индексов

doveadm quota get -u <user>

Показывает текущее использование квоты (объем и количество писем)

doveadm quota recalc -u <user>

Пересчитывает квоту на основе фактического содержимого ящика

doveadm deliver <user>

Выполняет локальную доставку почты из stdin (аналог LDA)

doveadm pw -s <hash>

Генерирует хеш пароля (например, SHA512-CRYPT, scram-sha-256)

doveadm acl get -u <user> <directory>

Показывает ACL (права доступа) для указанного каталога

doveadm acl set -u <user> <directory> <permission> -u <other_user>

Назначает права доступа (permission) другому пользователю (other_user) на каталог

doveadm -u *@domain.com <command>

Выполняет команду (command) для всех пользователей домена

doveadm reload

Перезагружает конфигурацию без остановки сессий