Как внедрить 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 Где
Скрипт создаст три файла:
— текст для добавления в зону DNS. Пример содержимого в оригинале:.txt
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
Добавьте содержимое файла в вашу 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 startservice postfix restartЕсли dk-milter не стартует, проверьте системные журналы (например, /var/log/maillog или /var/log/messages) и права на сокет.
Тестирование
- Отправьте тестовое письмо на адрес [email protected] — вы получите автоматический ответ с результатами проверки.
- Альтернатива: отправьте письмо на Yahoo или другой сервис, который отображает статус подписи в заголовках.
- Локальная проверка: создайте тестовое сообщение и проверьте, что в заголовках появилось поле 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-зоной — нельзя опубликовать публичный ключ.
Ссылки
- http://en.wikipedia.org/wiki/Domainkeys
- http://domainkeys.sourceforge.net/
- http://www.elandsys.com/resources/sendmail/domainkeys.html
- http://www.postfix.org/MILTER_README.html
- http://www.topdog-software.com/oss/dk-milter/
Сводка
DomainKeys через dk-milter — рабочее решение для подписи почты в Postfix. Основные шаги: установить пакет, сгенерировать ключи, опубликовать публичный ключ в DNS, настроить dk-milter и интегрировать сокет в Postfix. Тестирование и корректная настройка прав доступа — ключ к успешной работе.
Важно: если вы начинаете новое развертывание, рассмотрите DKIM и DMARC как более современные и гибкие альтернативы.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента