Настройка DANE для TLS в Postfix
АйТи Фреш
Информационная безопасность

Как настроить DANE в Postfix для защиты от MITM-атак

Автор: , директор ООО «АйТи-Фреш» · · ~13 мин чтения
Настройка DANE в Postfix для защиты от MITM-атак
Иллюстрация к статье «Как настроить DANE в Postfix для защиты от MITM-атак».

DANE — это метод публикации TLS-привязок в DNS, который защищает почтовые соединения от перехвата и подмены. В Postfix он реализуется через параметры smtp_tls_security_level и smtp_dns_support_level. Настройка требует понимания DNSSEC, TLS и конфигурации почтового сервера. В статье — детали, ошибки, проверки и практические шаги.

Что такое DANE и зачем он нужен в Postfix

DANE (DNS-based Authentication of Named Entities) — это стандарт, позволяющий публиковать TLS-сертификаты в DNS в виде записей TLSA. Это обеспечивает подлинность сервера при соединении, так как клиент проверяет сертификат по данным из DNS, а не полагается на цепочку доверия CA. В контексте Postfix это означает, что при отправке письма сервер не будет подключаться к непроверенному почтовому серверу, даже если он имеет действительный сертификат от доверенного центра. Это критически важно для защиты от MITM-атак, особенно при передаче конфиденциальной информации.

DANE работает только при наличии DNSSEC — протокола, обеспечивающего подлинность DNS-записей. Без DNSSEC DANE теряет смысл, так как злоумышленник может подменить DNS-записи и вставить ложные TLSA-записи. Поэтому перед настройкой DANE необходимо убедиться, что домен поддерживает DNSSEC и имеет корректно настроенные DNS-записи. В Postfix DANE активируется через параметры smtp_tls_security_level и smtp_dns_support_level, которые заставляют сервер проверять TLS-сертификаты через DNS, а не по обычным правилам X.509.

DANE не заменяет TLS, а дополняет его. Без TLS DANE бесполезен, как и без DNSSEC. Это важно понимать, потому что многие думают, что DANE — это аналог SSL, но на самом деле он работает на уровне аутентификации, а не шифрования. Он не меняет способ шифрования, но обеспечивает, что шифрование происходит с тем сервером, который должен быть. Это критично для почтовых систем, где часто используются сертификаты от CA, которые могут быть подделаны или использованы в атаках.

Пример: если злоумышленник перехватывает соединение между вашим Postfix и сервером mail.example.com, он может использовать сертификат от доверенного центра, который будет считаться действительным. Но если DANE включен, Postfix проверит, что сертификат соответствует TLSA-записи в DNS. Если нет — соединение будет отклонено. Это и есть основная цель DANE: защита от подмены, а не от перехвата данных.

DANE — это не панацея. Он не решает проблемы с сертификатами, которые были выданы неправильно или устарели. Он не защищает от атак на саму TLS-сессию. Он защищает только от подмены сервера. Поэтому DANE — это часть комплексной защиты, а не единственный механизм.

DANE не заменяет TLS, а дополняет его. Без TLS DANE бесполезен, как и без DNSSEC.

Настройка Postfix для DANE: необходимые параметры

Для включения DANE в Postfix требуется настройка двух ключевых параметров: smtp_tls_security_level и smtp_dns_support_level. Первый должен быть установлен в значение dane, что означает, что Postfix будет проверять TLS-сертификаты по DANE-записям. Второй — smtp_dns_support_level — должен быть равен dnssec, чтобы Postfix мог использовать DNSSEC для проверки подлинности DNS-записей. Эти параметры не работают в комбинации с другими уровнями безопасности, такими как encrypt или may, так как они не обеспечивают проверку через DNS.

При этом важно понимать, что DANE не включает автоматическую генерацию TLSA-записей. Это должен сделать администратор. Записи TLSA содержат информацию о TLS-сертификате, который должен быть использован для соединения. Например, для сертификата с типом RSA и хешем SHA-256, запись может выглядеть так: 0 0 1 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef. Неправильная запись приведет к отказу в соединении, поэтому перед использованием DANE необходимо проверить корректность записей, особенно при переходе с других методов аутентификации.

Параметр smtp_tls_dane_insecure_mx_policy = dane необходим для исправления бага в версиях Postfix до 3.10.0. Без него DANE может не работать в некоторых конфигурациях. Это особенно важно, если вы используете устаревшую версию Postfix. Проверьте, какая версия у вас установлена, и если она ниже 3.10.0, добавьте этот параметр. Иначе DANE может не сработать, и вы не поймете, почему.

Если вы используете Postfix с настройками по умолчанию, DANE может не работать из-за того, что по умолчанию smtp_tls_security_level = may. Это означает, что Postfix может использовать TLS, но не проверять сертификаты. Поэтому, если вы не настроили параметры, DANE не будет активен. Это частая ошибка, особенно у тех, кто перешел с других почтовых систем.

Проверка настроек — это обязательная часть. Убедитесь, что в файле /etc/postfix/main.cf указаны smtp_tls_security_level = dane и smtp_dns_support_level = dnssec. Также проверьте, что в конфигурации нет противоречий, например, если smtp_tls_security_level = encrypt, DANE не будет работать. Это классическая ошибка, когда администраторы пытаются настроить DANE, не понимая, что некоторые параметры исключают другие.

Параметр smtp_tls_dane_insecure_mx_policy = dane необходим для исправления бага в версиях Postfix до 3.10.0. Без него DANE может не работать в некоторых конфигурациях.
Как настроить DANE в Postfix для защиты от MITM-атак — схема
Схема к статье. Открыть схему в полном размере

Настройка DNS и TLSA-записей для DANE

Для работы DANE требуется настроить DNS-записи TLSA в домене, где размещается почтовый сервер. Эти записи содержат информацию о TLS-сертификате, который должен быть использован для соединения. Например, запись TLSA с параметрами 0 0 1 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef означает, что используется сертификат с хешем SHA-256, тип сертификата — RSA, и он должен быть использован в полном соответствии. Записи можно добавить через DNS-регистратор или DNS-сервер, поддерживающий DNSSEC.

При этом важно убедиться, что DNS-сервер поддерживает DNSSEC и что он правильно подписывает записи. Некорректная подпись или отсутствие DNSSEC приведут к отказу в соединении. Кроме того, TLSA-записи должны быть опубликованы в домене, где находится почтовый сервер, и не в поддомене, если он не поддерживает DANE. Например, если почтовый сервер находится в mail.example.com, то TLSA-записи должны быть в домене example.com, а не в mail.example.com. Это связано с тем, что DANE проверяет домен, а не поддомен.

Если вы используете Let's Encrypt или другой сертификат, который меняется, нужно обновлять TLSA-записи каждый раз, когда сертификат обновляется. Это можно сделать вручную, но лучше автоматизировать. Например, можно использовать скрипт, который генерирует хеш сертификата и обновляет DNS-записи. Это снижает риск ошибок и делает систему более устойчивой.

Для проверки корректности TLSA-записей используйте команду dig +dnssec TLSA _smtp._tcp.example.com. Она покажет, есть ли запись, и подпись ли она. Если запись отсутствует или подпись неверна, DANE не будет работать. Также можно использовать онлайн-сервисы, такие как dmarcian.com или checktls.com, которые проверяют DANE-конфигурацию и выдают отчет о её корректности.

Если вы не уверены, как правильно настроить TLSA-записи, лучше начать с простых настроек. Например, используйте значение 0 для проверки, что сертификат соответствует. Затем можно перейти к более сложным настройкам, если это необходимо. Главное — не торопиться. Ошибка в одной записи может привести к отказу всех исходящих соединений.

DANE требует, чтобы DNSSEC был включен и работал. Без него DANE не может обеспечить подлинность, и Postfix будет отказываться от соединения.
Обратите внимание: Настройка DNS и TLSA-записей для DANE — схема
Обратите внимание: Настройка DNS и TLSA-записей для DANE. Открыть схему в полном размере

Порядок действий при настройке DANE

Первым шагом при настройке DANE является проверка текущей конфигурации Postfix. Убедитесь, что smtp_tls_security_level = may или encrypt, а не dane. Если он уже включен, проверьте, что smtp_dns_support_level = dnssec. Это основа для работы DANE. Без этих параметров DANE не будет работать, даже если все остальное настроено правильно.

Второй шаг — настройка DNSSEC. Убедитесь, что DNS-сервер поддерживает DNSSEC и что он правильно подписывает записи. Проверьте, что в DNS-записях есть подпись. Это можно сделать с помощью команды dig +dnssec example.com. Если подпись отсутствует, DNSSEC не работает, и DANE не будет функционировать. Это частая ошибка, особенно у тех, кто перешел с хостинга, где DNSSEC не поддерживается.

Третий шаг — генерация TLSA-записей. Для этого нужно извлечь хеш сертификата. Это можно сделать с помощью команды openssl x509 -noout -fingerprint -sha256 -in /etc/ssl/certs/your_certificate.pem. Затем используйте этот хеш для создания TLSA-записи. Например, если хеш — 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef, запись будет выглядеть как 0 0 1 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef. Убедитесь, что тип сертификата и хеш соответствуют реальным данным.

Четвертый шаг — публикация TLSA-записей в DNS. Это можно сделать через панель управления DNS-регистратора или через DNS-сервер. Убедитесь, что запись опубликована в домене, где находится почтовый сервер, а не в поддомене. Проверьте, что DNS-сервер поддерживает DNSSEC, и что запись подписана. Это можно сделать с помощью команды dig +dnssec TLSA _smtp._tcp.example.com.

Пятый шаг — проверка работы DANE. Используйте команду dig +dnssec TLSA _smtp._tcp.example.com. Если запись есть и подпись верна, DANE должен работать. Также можно использовать онлайн-сервисы, такие как checktls.com, которые проверяют DANE-конфигурацию и выдают отчет о её корректности. Если DANE не работает, проверьте логи Postfix на наличие ошибок DANE-проверки.

Проверка DANE — это не только техническая задача, но и процесс, требующий внимания к деталям. Ошибка в одной записи может привести к отказу всех исходящих соединений.

Типовые ошибки при настройке DANE

Одна из самых частых ошибок — неправильная настройка параметров smtp_tls_security_level и smtp_dns_support_level. Если один из них не установлен, DANE не будет работать. Например, если smtp_tls_security_level = encrypt, DANE не будет активен, так как Postfix не будет проверять сертификаты через DNS. Это часто происходит, когда администраторы пытаются настроить DANE, не понимая, что некоторые параметры исключают другие.

Вторая частая ошибка — отсутствие DNSSEC. Без DNSSEC DANE не может обеспечить подлинность DNS-записей. Это приводит к отказу в соединении, так как Postfix не может проверить подпись. Убедитесь, что DNS-сервер поддерживает DNSSEC и что он правильно подписывает записи. Это можно проверить с помощью команды dig +dnssec example.com.

Третья ошибка — неправильные TLSA-записи. Если хеш сертификата не соответствует реальному, Postfix отклонит соединение. Это может произойти, если сертификат был обновлен, но TLSA-записи не обновлены. Убедитесь, что TLSA-записи корректны и соответствуют текущему сертификату.

Четвертая ошибка — отсутствие поддержки DANE в версии Postfix. В версиях до 3.10.0 есть баг, который может привести к отказу в работе DANE. Решение — добавить параметр smtp_tls_dane_insecure_mx_policy = dane. Без этого DANE может не работать, и администраторы не поймут, почему.

Пятая ошибка — неправильная публикация TLSA-записей. Если запись опубликована в поддомене, а не в основном домене, DANE не будет работать. Например, если почтовый сервер находится в mail.example.com, но TLSA-записи опубликованы в mail.example.com, а не в example.com, DANE не будет активен. Убедитесь, что записи опубликованы в правильном домене.

DANE не работает, если не настроены smtp_tls_security_level = dane и smtp_dns_support_level = dnssec. Это база, без которой DANE бесполезен.

Как проверить результат настройки DANE

Проверка DANE — это обязательный шаг. Убедитесь, что Postfix правильно настроен и что DANE работает. Это можно сделать с помощью команды dig +dnssec TLSA _smtp._tcp.example.com. Она покажет, есть ли запись, и подпись ли она. Если запись отсутствует или подпись неверна, DANE не будет работать.

Также можно использовать онлайн-сервисы, такие как dmarcian.com или checktls.com, которые проверяют DANE-конфигурацию и выдают отчет о её корректности. Эти сервисы показывают, какие ошибки есть, и как их исправить. Это особенно полезно, если вы не уверены, как правильно настроить DANE.

Если вы используете Postfix, проверьте логи на наличие ошибок DANE-проверки. Например, в /var/log/mail.log может быть запись, что DANE не может проверить сертификат. Это означает, что либо TLSA-записи не корректны, либо DNSSEC не работает. Убедитесь, что все настройки верны.

Если вы отправляете письмо на внешний сервер, проверьте, что оно доходит. Если DANE работает, письмо должно быть доставлено. Если нет — проверьте, что DANE не отклоняет соединение. Это может быть вызвано неправильными TLSA-записями или отсутствием DNSSEC.

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

Проверка DANE — это не только техническая задача, но и процесс, требующий внимания к деталям. Ошибка в одной записи может привести к отказу всех исходящих соединений.

Что делать, если DANE сломалось

Если DANE перестал работать, первым делом проверьте, что smtp_tls_security_level = dane и smtp_dns_support_level = dnssec. Эти параметры — основа. Если они не установлены, DANE не будет работать. Убедитесь, что в файле /etc/postfix/main.cf указаны эти параметры.

Второй шаг — проверка DNSSEC. Убедитесь, что DNS-сервер поддерживает DNSSEC и что он правильно подписывает записи. Это можно сделать с помощью команды dig +dnssec example.com. Если подпись отсутствует, DNSSEC не работает, и DANE не будет функционировать.

Третий шаг — проверка TLSA-записей. Убедитесь, что запись опубликована в правильном домене и что она подписана. Это можно сделать с помощью команды dig +dnssec TLSA _smtp._tcp.example.com. Если запись отсутствует или подпись неверна, DANE не будет работать.

Четвертый шаг — проверка логов Postfix. Убедитесь, что в логах нет ошибок DANE-проверки. Например, в /var/log/mail.log может быть запись, что DANE не может проверить сертификат. Это означает, что либо TLSA-записи не корректны, либо DNSSEC не работает.

Пятый шаг — проверка версии Postfix. В версиях до 3.10.0 есть баг, который может привести к отказу в работе DANE. Решение — добавить параметр smtp_tls_dane_insecure_mx_policy = dane. Без этого DANE может не работать, и администраторы не поймут, почему.

Если DANE сломалось, проверьте smtp_tls_security_level = dane и smtp_dns_support_level = dnssec. Это основа для работы DANE.

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

Какие параметры Postfix необходимы для DANE?

Необходимы smtp_tls_security_level = dane и smtp_dns_support_level = dnssec. Без этих параметров DANE не работает.

Можно ли использовать DANE без DNSSEC?

Нет. DANE требует DNSSEC для подтверждения подлинности DNS-записей. Без DNSSEC DANE бесполезен и может привести к отказу в соединении.

Что делать, если DANE не работает?

Проверьте, что smtp_tls_security_level = dane и smtp_dns_support_level = dnssec. Убедитесь, что DNSSEC включен, и TLSA-записи опубликованы и корректны. Проверьте логи Postfix на наличие ошибок DANE-проверки.

Как проверить, что DANE работает?

Используйте команду dig +dnssec TLSA _smtp._tcp.example.com. Также можно воспользоваться онлайн-сервисами, такими как checktls.com.

Какие риски связаны с DANE?

Риски включают отказ в соединении из-за ошибок в TLSA-записях, сложность настройки, зависимость от DNSSEC и необходимость постоянного мониторинга.

Можно ли использовать DANE для внутренних почтовых серверов?

Технически да, но это нецелесообразно, так как внутренние серверы обычно не подвержены MITM-атакам. DANE полезен для внешних соединений, где риск подмены выше.

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

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

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

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

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

Источники

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