Как проверить TLS в Dovecot и вернуть подключение
Если Dovecot не устанавливает TLS, сначала выясните, доходит ли подключение до сервера, затем проверьте эффективную конфигурацию, сертификат и закрытый ключ. Часто причина не в «плохом SSL», а в неверном адресе, версии параметров или выбранном порте. Покажу порядок проверки и безопасный способ включить подробный журнал.
Почему Dovecot не пишет об ошибке TLS
Когда почтовый клиент сообщает, что защищённое соединение не установлено, это ещё не доказывает поломку SSL в Dovecot. Запрос мог не дойти до сервера: его отсекает сетевой экран, неверно разрешается имя узла или клиент подключается не к тому адресу. Я сначала сопоставляю время попытки с журналом и проверяю доступность именно того порта, который указан в настройках клиента. Для IMAP с TLS сразу после соединения обычно используют TCP 993; IMAP с переходом на TLS через STARTTLS обычно начинается на TCP 143. Для POP3 с TLS применяют TCP 995, а для обычного POP3 с STARTTLS — TCP 110. Это стандартные назначения, но конфигурацию слушателей на конкретном сервере всё равно нужно проверить.
Если сервер не видит попытку, ищите маршрут, DNS и фильтрацию на хосте или у провайдера. Если попытка есть, но TLS не завершается, смотрите причину закрытия соединения в журнале Dovecot. Официальная документация советует проверять, в какой файл или syslog направлены сообщения; команда doveadm log find помогает определить расположение журнала, а doveadm log errors показывает последние ошибки. Чистый файл, который вы открыли наугад, не означает, что Dovecot молчит: возможно, сообщения уходят в другой журнал.
Для проверки IMAPS используйте клиентскую утилиту OpenSSL с именем узла, чтобы сервер выбрал нужный сертификат при наличии SNI: openssl s_client -connect mail.example.com:993 -servername mail.example.com. Для IMAP с STARTTLS укажите порт 143 и добавьте -starttls imap. Не смешивайте эти режимы: команда -starttls imap для порта 993 не нужна, потому что TLS там устанавливается сразу. Успешный TLS handshake подтверждает, что сервер согласовал шифрование и предъявил сертификат; он сам по себе не подтверждает успешную авторизацию или корректность всей почтовой службы.
Я также сверяю, куда ведут опубликованные DNS-записи и какой сертификат ожидает клиент. Клиент может подключаться к одному имени, а сертификат быть выпущен на другое: TLS при этом работает, но проверка имени завершается ошибкой. Сначала зафиксируйте точное имя хоста, порт, режим TLS и время теста, затем переходите к параметрам Dovecot. Так диагностика остаётся предметной. Если нужна помощь с такой проверкой и настройкой корпоративной почты, мы описали услугу настройки корпоративной почты.
Интерпретируйте тест по слоям. Отказ TCP до начала TLS указывает на доступность слушателя или сетевой путь. Ошибка во время handshake уже говорит о сертификате, версии протокола, шифрах либо прерывании соединения посредником. Если сервер отдаёт сертификат, но клиент сообщает о недоверенном центре, проблема может быть в цепочке доверия на клиенте. Отдельно проверьте, не меняет ли TLS промежуточный прокси: его журнал и сертификат могут отличаться от Dovecot.
Режим подключения тоже важно сверить буквально. При IMAPS клиент начинает TLS сразу после TCP-соединения. При IMAP с STARTTLS сначала устанавливается незашифрованное IMAP-соединение, после чего клиент запрашивает переход на TLS. Если на порту с немедленным TLS клиент ждёт STARTTLS-команду или наоборот, стороны говорят на разных этапах протокола и соединение не складывается. Посмотрите, какие слушатели включены в Dovecot и совпадают ли они с настройкой клиента; один лишь номер порта без режима работы полной картины не даёт.
- Зафиксируйте имя узла, порт и режим TLS в клиенте.
- Проверьте доступность порта с нужной сети.
- Сопоставьте попытку с журналом Dovecot.
- Проверьте handshake отдельно от авторизации.
Как проверить фактическую конфигурацию Dovecot
На многих установках SSL-параметры лежат в /etc/dovecot/conf.d/10-ssl.conf, но этот путь зависит от дистрибутива и способа установки. Файл может подключаться из главного dovecot.conf, а параметры — задаваться ещё и в других включённых файлах. Поэтому редактировать знакомый путь наугад бесполезно: сначала посмотрите фактические значения и конфигурацию, которую Dovecot загрузил. Для этого предназначена команда doveconf -n; база знаний также подтверждает применение dovecot -n в инструкциях, но в официальной документации основной инструмент просмотра настроек называется doveconf.
Версия здесь имеет значение. В конфигурации Dovecot 2.3 используются ssl_cert и ssl_key; в 2.3 путь к файлу обычно записывают с префиксом <, например ssl_cert = </etc/ssl/certs/dovecot.pem. В ветке 2.4 имена параметров для серверных файлов изменены: используются ssl_server_cert_file и ssl_server_key_file, а пути задаются без такого префикса. Механически переносить старые строки в новый конфиг нельзя. Сначала проверьте версию (dovecot --version), затем сверяйте синтаксис с документацией именно этой ветки.
В 2.3 и 2.4 директива ssl = yes включает SSL/TLS, но сама по себе не требует шифрования для каждого клиента. В 2.3 значение ssl = required требует TLS для подключений IMAP, POP3, ManageSieve и submission с оговорками документации о доверенных соединениях; в 2.4 поведение и связанные параметры обновлены, в том числе переименована настройка cleartext-аутентификации. Поэтому не называйте yes и required взаимозаменяемыми. Если задача — запретить незащищённый вход извне, проверяйте не одну директиву, а весь набор правил аутентификации и слушателей для своей версии.
Не считайте закомментированную строку доказательством, что шифрование выключено. Значение могло прийти из другого файла, а значения по умолчанию менялись между версиями. Смотрите вывод doveconf -n, сравнивайте его с ожидаемыми параметрами и проверяйте, не управляет ли файлами шаблон конфигурации или панель. В статье перехода конфигурации Dovecot 2.4 отдельно разобраны изменения синтаксиса; это полезная сверка, если сервер недавно обновляли.
Если doveconf -n показывает ssl = no, TLS отключён глобально, и сервер не должен обслуживать implicit TLS слушатели как ожидается. Если параметр не отображается, не делайте вывод о его значении по пустому месту: проверьте документацию и вывод соответствующей версии doveconf, включая настройки конкретного протокола. Зафиксируйте итоговую конфигурацию перед правкой. Это также помогает увидеть, что редактируемый файл не подключён или перезаписывается автоматизацией.
- Проверьте версию: `dovecot --version`.
- Посмотрите итоговые параметры: `doveconf -n`.
- Уточните, какой файл подключает `dovecot.conf`.
- Сверьте имена SSL-директив с веткой 2.3 или 2.4.
Как сверить сертификат, закрытый ключ и права
Для TLS серверу нужны сертификат и соответствующий ему закрытый ключ. В Dovecot 2.3 эти файлы задаются через ssl_cert и ssl_key; в Dovecot 2.4 — через ssl_server_cert_file и ssl_server_key_file. Сертификат часто содержит не только сертификат узла, но и промежуточные сертификаты цепочки. Если цепочка неполная или сертификат не соответствует имени почтового сервера, часть клиентов выдаст предупреждение, даже когда handshake технически состоялся.
Проверьте существование обоих файлов, формат PEM, соответствие ключа сертификату и возможность процесса Dovecot прочитать нужные данные. Не назначайте владельца и режим доступа по универсальному рецепту из случайной статьи: способ загрузки файлов и требуемые права зависят от версии, пакета и операционной системы. Например, документация Dovecot 2.4 рекомендует хранить ключ доступным только root (в отдельных системах допускается специальная группа сертификатов) и поясняет, что Dovecot открывает файлы, пока ещё работает с правами root. Следовательно, утверждение «группа dovecot обязательна» неверно и способно неоправданно расширить доступ к секрету.
Публичный сертификат не содержит секретного ключа, поэтому его режим доступа не следует путать с режимом ключа. Для закрытого ключа важна ограниченность чтения; не делайте его общедоступным ради устранения ошибки. Сначала проверьте владельца и права родительских каталогов, затем применяйте схему, рекомендованную документацией для установленной версии и пакета. Если Dovecot не может открыть файл, журнал обычно сообщает конкретную причину — например, отсутствие файла или отказ в доступе. Универсального сообщения SSL certificate file not found ждать не нужно: формулировка зависит от ошибки и сборки.
Проверьте, что указанное в конфиге имя файла совпадает с фактическим путём, включая регистр букв. Затем проверьте срок действия и имена в сертификате, а также порядок сертификатов в полном наборе. Самоподписанный сертификат может пригодиться для лабораторной проверки, но внешние почтовые клиенты не будут считать его доверенным без отдельно настроенного доверия. Для рабочей почты используйте сертификат с доверенной цепочкой и именем, совпадающим с адресом сервера.
Совпадение открытого сертификата и закрытого ключа обязательно: иначе сервер не сможет корректно создать контекст TLS. Но ошибки чтения и ошибки соответствия — разные ситуации; не лечите обе заменой прав доступа. Если путь существует и доступ к файлу разрешён, изучите сообщение OpenSSL или Dovecot о загрузке ключа. Проверяйте также, не зашифрован ли приватный ключ паролем: службе нужен предусмотренный конфигурацией способ получить пароль при запуске.
- Проверьте пути и формат сертификата и ключа.
- Подтвердите, что сертификат и ключ соответствуют друг другу.
- Ограничьте чтение закрытого ключа по документации вашей версии.
- Проверьте срок, имя узла и полноту цепочки.
Что делать с протоколами и наборами шифров
Если адрес, порт, сертификат и ключ проверены, переходите к согласованию TLS. Ошибка может возникнуть, когда клиент и сервер не находят общую версию протокола или набор шифров. Однако в исправной современной конфигурации не нужно вручную копировать длинный список cipher suites со старого сервера. Dovecot использует OpenSSL, а параметры по умолчанию и доступные алгоритмы зависят от сборки OpenSSL и операционной системы. Сначала уберите вручную заданные ограничения, если они явно устарели или исключают нужные клиенту алгоритмы; затем выбирайте допустимый минимум по политике организации и документации используемого релиза.
Не добавляйте в современный конфиг буквальную строку ssl_protocols = !SSLv2 !SSLv3 как универсальный совет. SSLv2 и SSLv3 устарели, но способ задать минимум TLS менялся между версиями Dovecot. В 2.4 для этого есть ssl_min_protocol; список допустимых значений нужно брать из справки установленной версии. Руководство по переходу на 2.4 отдельно отмечает, что параметр SSLv3 удалён. Если параметр не поддерживается или содержит опечатку, результатом станет ошибка загрузки конфигурации либо неожиданное ограничение соединений.
Для локализации ошибки сравните серверный журнал с выводом openssl s_client: он показывает согласованную версию протокола, выбранный шифр и цепочку сертификатов. Если тест проходит с одного узла, но не проходит у конкретной группы пользователей, проверьте их клиентские версии, сетевой путь и точный hostname. Не делайте вывод о причине только по общему сообщению Outlook «не удалось установить защищённое соединение»: это симптом, а не диагноз. В старой и новой версиях OpenSSL текст ошибки может выглядеть по-разному.
В базе знаний встречается рекомендация отключать SSLv2 и SSLv3, но точная строка параметра привязана к версии, а не переносится между выпусками вслепую. Я оставляю в конфиге минимум явно необходимых ограничений, документирую их и проверяю реальное соединение после изменения. Эта проверка важнее красивого списка «современных» шифров, скопированного без учёта OpenSSL на сервере.
Если одновременно менять минимальную версию TLS, список шифров и файл сертификата, по результату нельзя понять, что помогло или сломало соединение. Меняйте одну причину за раз и сохраняйте вывод до и после. При проблеме у нескольких разных клиентов сравните их версии и операционные системы, но не ослабляйте политику для всех ради одного старого устройства до оценки его риска и альтернатив.
- Сравните согласованный протокол и шифр в тесте.
- Уточните доступные настройки установленной версии.
- Удалите устаревшие ручные ограничения после проверки совместимости.
- Повторите тест с именем, которое вводит почтовый клиент.
Как включить диагностику и применить исправление
Не повышайте журналирование командой log_level = debug: такая директива не является корректным универсальным переключателем TLS-отладки Dovecot. В документации 2.3 для ошибок и предупреждений TLS указан verbose_ssl = yes; в Dovecot 2.4 вместо него применяется фильтр log_debug = category=ssl. Точный параметр снова зависит от ветки. Включайте подробности на короткое время и только в нужной категории: журналы могут стать шумными, а после диагностики временную настройку стоит удалить.
Если кажется, что журнал пуст, сначала найдите его фактическое расположение командой doveadm log find, а ошибки посмотрите через doveadm log errors. Далее проверьте конфигурацию синтаксически через doveconf -n, исправьте путь, сертификат, ключ или несовместимую директиву и повторите openssl s_client. Не начинайте с перезагрузки всей машины. После корректировки конфигурации перезапустите службу Dovecot способом, принятым в вашем дистрибутиве; systemctl restart dovecot подходит для systemd-установок с таким именем службы. Применение reload зависит от сборки и изменения, поэтому обещать, что оно всегда не оборвёт текущие подключения, нельзя.
Последовательность ремонта должна оставлять следы: зафиксируйте исходное значение, измените один параметр, проверьте конфигурацию, перезапустите нужную службу и проверьте соединение снаружи. Если ошибка сохраняется, верните изменение и сравните журнал до и после. Такой подход показывает, какое именно действие повлияло на результат. Я не считаю успешный запуск процесса достаточной проверкой: клиент должен договориться о TLS и увидеть корректный сертификат на ожидаемом имени.
Для проверки всей почтовой инфраструктуры одного сертификата мало: важны доставка, DNS, резервное копирование и обновления. Если параллельно готовите перенос, сверьте план с материалом о переносе почты без простоя; для режима почтового сервиса пригодится статья про обслуживание почтового сервера. Мы можем проверить конфигурацию и сертификаты, а при необходимости выполнить перенос почты до 50 ящиков от 12 000 ₽. Сначала уточним текущую схему, затем согласуем состав работ.
После диагностики уберите временные debug-параметры и убедитесь, что изменения не исчезнут при следующем применении шаблона конфигурации. Затем проверьте повторное подключение снаружи, а не только локально на сервере: локальный тест не проходит через те же DNS-записи и сетевые правила, что пользовательское устройство. Сохраните короткую запись о версии Dovecot, выбранных настройках и результате проверки, чтобы следующий администратор не начинал расследование с нуля.
- Сверьте параметры командой `doveconf -n`.
- Найдите правильный журнал и включите нужный TLS debug.
- Перезапустите службу после проверки конфига.
- Повторите handshake и проверку имени сертификата.
Частые вопросы
Чем отличаются порты 993 и 143?
993 обычно используют для IMAP с TLS сразу после подключения; 143 — для IMAP с STARTTLS. Проверьте фактические слушатели и режим в почтовом клиенте.
Какие параметры сертификата нужны в Dovecot?
В 2.3 это `ssl_cert` и `ssl_key`; в 2.4 — `ssl_server_cert_file` и `ssl_server_key_file`. Сверьте синтаксис с установленной веткой.
Нужна ли группе dovecot возможность читать ключ?
Не обязательно. Документация Dovecot 2.4 указывает, что файлы открываются до сброса прав; ограничьте доступ к ключу согласно вашей версии и пакету.
Что проверяет openssl s_client?
Он показывает, устанавливается ли TLS, какой протокол и шифр согласованы и какой сертификат предъявлен. Успешный handshake не проверяет вход в почтовый ящик.
Что включить, если в журнале нет причин сбоя?
Сначала проверьте расположение журнала через `doveadm log find`. Для TLS используйте `verbose_ssl = yes` в 2.3 или `log_debug = category=ssl` в 2.4.
Источники
- Dovecot 2.3: SSL configuration — Настройки `ssl`, `ssl_cert`, `ssl_key`, отличие `yes` от `required` и примеры TLS-проверки: https://doc.dovecot.org/2.3/configuration_manual/dovecot_ssl_configuration/
- Dovecot 2.4.1: SSL configuration — Параметры сертификата и ключа, их права доступа, порядок чтения файлов и режимы TLS: https://doc.dovecot.org/2.4.1/core/config/ssl.html
- Dovecot 2.3 to 2.4 upgrade guide — Изменения параметров при переходе между ветками, включая настройки TLS: https://doc.dovecot.org/main/installation/upgrade/2.3-to-2.4.html
- Dovecot 2.3: Logging — Поиск журналов, `doveadm log find`, `doveadm log errors` и `verbose_ssl`: https://doc.dovecot.org/2.3/admin_manual/logging/
- Dovecot 2.3: Testing installation — Примеры проверки IMAP и TLS с помощью OpenSSL и тестирования установленного сервера: https://doc.dovecot.org/2.3/admin_manual/test_installation/



