Гид по технологиям

Как внедрить DomainKeys в Postfix с помощью dk-milter

• 5 min read • Почта • Обновлено 26 Nov 2025
DomainKeys в Postfix через dk-milter
DomainKeys в Postfix через dk-milter

Введение

DomainKeys — это метод аутентификации электронной почты, позволяющий подписывать исходящие сообщения и проверять их на стороне получателя. Хотя стандарт DKIM исторически заменил DomainKeys, последняя система всё ещё активно используется в ряде инфраструктур (например, на некоторых сервисах Yahoo). Эта инструкция показывает практическую настройку реализации DomainKeys через milter-процесс dk-milter на CentOS 5.1.

Коротко: DomainKeys подписывает заголовки и тело письма с помощью приватного ключа, публикация публичного ключа происходит в DNS (TXT-запись). Проверка на стороне приёмника использует тот самый публичный ключ.

Важно: в этой инструкции сохранены оригинальные команды и пути, как в исходном материале. Проверьте права доступа и владельцев файлов в вашей системе.

Что понадобится

  • Сервер с CentOS 5.1 или совместимой системой.
  • Права root для установки RPM и правки конфигурации Postfix.
  • Доступ к DNS-зоне вашего домена (редактирование TXT-записей).

Установка

Установите rpm-пакет dk-milter:

rpm -Uvh http://www.topdog-software.com/oss/dk-milter/dk-milter-0.6.0-1.i386.rpm

Если у вас уже есть другие модули milter, обратите внимание при конфигурации Postfix — см. раздел “Настройка Postfix”.

Генерация ключей

RPM включает скрипт для генерации ключей:

/usr/share/doc/dk-milter-0.6.0/gentxt.sh  

Где — произвольное имя селектора (например, default), — домен, для которого вы подписываете почту.

Скрипт создаст три файла:

  • .txt — текст для добавления в зону DNS. Пример содержимого в оригинале:
default._domainkey IN TXT "g=; k=rsa; t=y; p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJQfGTmsFzILU6ep6aSFg+WrTkaOLmoRillFNbOpNOr5Gst5H8wG9Oh2SpUytaruP/7j/eWQ8Wyz6zX2gAtzwF0CAwEAAQ==" ; ----- DomainKey default for example.com
  • .public — публичный ключ, пример:
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJQfGTmsFzILU6ep6aSFg+WrTkaOLmoR
illFNbOpNOr5Gst5H8wG9Oh2SpUytaruP/7j/eWQ8Wyz6zX2gAtzwF0CAwEAAQ==
-----END PUBLIC KEY-----
  • .private — приватный ключ, пример:
-----BEGIN RSA PRIVATE KEY-----
MIIBOwIBAAJBAJQfGTmsFzILU6ep6aSFg+WrTkaOLmoRillFNbOpNOr5Gst5H8wG
9Oh2SpUytaruP/7j/eWQ8Wyz6zX2gAtzwF0CAwEAAQJACHWqPCf+/yW0dmv24yWY
/eIFy3PNZNNxol2YjpVIZ28SgOSRrC0vzH+SpR1WZURAOcHi+WQa0AJPeqxM4Y1g
xQIhAMVjPNPW8u0sMpNIcev9JBUjUjbilOgY2FTfyNQV0SKjAiEAwBrO5T8XLZQ6
eRUUzz7yWYCHZln6CgD0lhBuZzu4wP8CIQCq8AT2Y7ie4l6uI9fcia2czKjfNRvF
X/bAkchGutoRRwIgF2KsEQgvICNNQvQoBlqZUf/te640XAdlvubdKcABa60CIQCU
DKlMOSxHp4Ms+KT41MFHkHDI/gkFfHvVRhL1PmuwtQ==
-----END RSA PRIVATE KEY----

Установите приватный ключ в рекомендуемое место и задайте права:

mv default.private /etc/mail/domainkeys/dk_.pem  
chown dk-milt:dk-milt /etc/mail/domainkeys/dk_.pem  
chmod 600 /etc/mail/domainkeys/dk_.pem

Примечание: в оригинале указан chown на пользователя/группу dk-milt; в вашей системе имя пользователя/группы может отличаться (например, dk-milter). Убедитесь, что владелец файла совпадает с пользователем, под которым запускается процесс dk-milter.

DNS

Добавьте содержимое файла .txt в вашу DNS-зону. Пример записи (из скрипта):

default._domainkey IN TXT "g=; k=rsa; t=y; p=..."

Кроме того, добавьте общую политику домена:

_domainkey IN TXT "t=y; o=~"

Проверьте видимость записей и корректность формата с помощью сторонних инструментов, например политики проверки DomainKeys: http://domainkeys.sourceforge.net/policycheck.html

Важно: TTL и синтаксис TXT-записи зависят от вашего DNS-провайдера. Если ключ длинный, некоторые панели автоматически разбивают строку — убедитесь, что итоговая запись при запросе DNS возвращается в одной логически корректной строке.

Конфигурация dk-milter

Отредактируйте файл /etc/sysconfig/dk-milter и задайте параметры (пример):

# Default values
#
USER="dk-milt"
PORT="local:/var/run/dk-milter/dk.sock"
SIGNING_DOMAIN=""
SELECTOR_NAME=""
KEYFILE="/etc/mail/domainkeys/dk_${SIGNING_DOMAIN}.pem"
SIGNER=yes
VERIFIER=yes
CANON=simple
REJECTION="bad=r,dns=t,int=t,no=a,miss=r"
EXTRA_ARGS="-h -l -D"
MILTER_GROUP="mail"

Ключевые поля:

  • USER — пользователь, от имени которого будет запущен dk-milter.
  • PORT — путь до unix-сокета или сетевой порт; должен соответствовать настройке в Postfix.
  • SIGNING_DOMAIN и SELECTOR_NAME — домен и селектор, используемые для подписания.
  • KEYFILE — путь до приватного ключа.
  • CANON — канонизация (simple/relaxed). В случае проблем с совместимостью попробуйте switched canonicalization.

Настройка Postfix

Добавьте в /etc/postfix/main.cf следующие строки (или допишите в существующие smtpd_milters):

smtpd_milters = unix:/var/run/dk-milter/dk.sock
non_smtpd_milters = unix:/var/run/dk-milter/dk.sock

Если у вас в конфиге уже есть другие milters, добавьте dk-milter в конец существующей строки, разделяя запятой. После изменения конфигурации перезапустите сервисы:

service dk-milter start
service postfix restart

Если dk-milter не стартует, проверьте системные журналы (например, /var/log/maillog или /var/log/messages) и права на сокет.

Тестирование

  1. Отправьте тестовое письмо на адрес [email protected] — вы получите автоматический ответ с результатами проверки.
  2. Альтернатива: отправьте письмо на Yahoo или другой сервис, который отображает статус подписи в заголовках.
  3. Локальная проверка: создайте тестовое сообщение и проверьте, что в заголовках появилось поле DomainKey-Signature или похожая метка.

Примеры проверок:

  • Проверить наличие поля подписи в исходящем письме.
  • Убедиться, что DNS-запись селектора доступна: dig TXT default._domainkey.example.com
  • Проверить права и владельца приватного ключа.

Отладка — частые причины проблем

  • Неверный путь к приватному ключу или неверные права (доступ должен быть только у процесса dk-milter).
  • Несовпадение селектора в DNS и в настройках dk-milter.
  • Проблемы с сокетом (PATH в конфигурации dk-milter и Postfix должны совпадать).
  • DNS-кеширование/TTL — изменения в зоне могут не сразу распространиться.
  • Канонизация: разные MTA могут требовать relaxed вместо simple.

Важно: при отладке полезно поочерёдно отключать SIGNER/VERIFIER и смотреть, на каком этапе возникает ошибка.

Альтернативы и связанная экосистема

  • DKIM — современный стандарт (RFC 4871 и последующие), более гибкий и широко поддерживаемый.
  • SPF — политика отправителей по IP-адресам, дополняет подписи.
  • DMARC — объединяет результаты SPF/DKIM и задаёт политику обработки.

Выбор: если инфраструктура получает много откликов от старых провайдеров, DomainKeys может сохраняться; для новых развертываний целесообразно использовать DKIM + DMARC.

Роли и чек-листы

Sysadmin:

  • Установить RPM и запустить dk-milter.
  • Настроить владельца/права приватного ключа.
  • Перезапустить Postfix.

DNS-администратор:

  • Добавить TXT-запись селектора.
  • Добавить общую политику _domainkey.
  • Проверить доступность записей через dig/host.

QA / SRE:

  • Отправить тестовые письма и проверить заголовки.
  • Мониторить логи на отклонения и ошибки подписи.

Критерии приёмки

  • В DNS доступна TXT-запись селектора и возвращает публичный ключ.
  • Отправленное письмо содержит заголовок подписи DomainKey-Signature.
  • При проверке письма внешними инструментами подпись проходит (Pass).
  • Приватный ключ хранится с правами 600 и принадлежит пользователю, запускающему dk-milter.

Безопасность и эксплуатация

  • Храните приватный ключ в защищённом каталоге и делайте резервные копии с шифрованием.
  • Не публикуйте приватный ключ в репозиториях.
  • Меняйте ключи при подозрении на компрометацию и обновляйте DNS и настройки dk-milter одновременно.

Когда DomainKeys не подходит

  • Если вы настраиваете новую инфраструктуру и хотите современную совместимость — лучше выбрать DKIM + DMARC.
  • Если у вас нет контроля над DNS-зоной — нельзя опубликовать публичный ключ.

Ссылки

Сводка

DomainKeys через dk-milter — рабочее решение для подписи почты в Postfix. Основные шаги: установить пакет, сгенерировать ключи, опубликовать публичный ключ в DNS, настроить dk-milter и интегрировать сокет в Postfix. Тестирование и корректная настройка прав доступа — ключ к успешной работе.

Важно: если вы начинаете новое развертывание, рассмотрите DKIM и DMARC как более современные и гибкие альтернативы.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро