Dovecot не отдаёт SSL: где искать сбой
АйТи Фреш
Серверы и инфраструктура

Как проверить TLS в Dovecot и вернуть подключение

Автор: , директор ООО «АйТи-Фреш» · · ~14 мин чтения
Метафора диагностики TLS в Dovecot: поток прерывает неверно выставленный клапан.
Сначала найдите место разрыва TLS.

Если 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 от порта до журнала.
Не путайте сеть с TLS.

Как проверить фактическую конфигурацию 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, включая настройки конкретного протокола. Зафиксируйте итоговую конфигурацию перед правкой. Это также помогает увидеть, что редактируемый файл не подключён или перезаписывается автоматизацией.

Не вставляйте параметры 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 о загрузке ключа. Проверяйте также, не зашифрован ли приватный ключ паролем: службе нужен предусмотренный конфигурацией способ получить пароль при запуске.

Не выдавайте пользователю dovecot доступ к закрытому ключу автоматически: Dovecot 2.4 читает его до сброса привилегий.
Сравнение параметров TLS в Dovecot 2.3 и 2.4.
Синтаксис зависит от версии 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, список шифров и файл сертификата, по результату нельзя понять, что помогло или сломало соединение. Меняйте одну причину за раз и сохраняйте вывод до и после. При проблеме у нескольких разных клиентов сравните их версии и операционные системы, но не ослабляйте политику для всех ради одного старого устройства до оценки его риска и альтернатив.

Отключать старые протоколы нужно, но имя директивы и допустимые значения проверяйте для своей версии.
Если TLS не поднимается после проверки порта и конфигурации, мы разберём журнал, сверим сертификат с именем сервера и проверим настройки Dovecot для установленной версии. Обсудить задачу

Как включить диагностику и применить исправление

Не повышайте журналирование командой 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, выбранных настройках и результате проверки, чтобы следующий администратор не начинал расследование с нуля.

`ssl = yes` включает TLS, но не делает TLS обязательным для каждого способа аутентификации.
Чек-лист итоговой проверки TLS в Dovecot.
Проверьте соединение после правки.

Частые вопросы

Чем отличаются порты 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.

Столкнулись с похожей задачей? Обращайтесь — решим

Если у вас происходит что-то из описанного в этой статье — или любая другая проблема с ИТ-инфраструктурой, — обращайтесь в любое время. Мои специалисты и я лично разберём ситуацию, найдём настоящую причину и доведём до решения.

Возьмёмся и за разовую задачу, и за постоянное обслуживание. Первичная консультация — бесплатно и без обязательств.

📞 +7 903 729-62-41 ✈ Telegram @ITfresh_Boss

С уважением, Семёнов Евгений Сергеевич, директор «АйТи Фреш» — IT-аутсорсинг для компаний до 50 рабочих мест, 15+ лет практики

Источники

© ООО «АйТи-Фреш» · Москва · Все статьи