Поддержка DKIM в PowerMTA
Ключи домена добавляются в конфигурацию PowerMTA директивой domain-key, которую
можно настроить либо глобально, для всей почты, либо для конкретного VirtualMTA. Также
ключи можно прописать в разделе <domain-key-list>, который может далее выбираться различными способами. Директива принимает три аргумента, разделяемых запятыми при перечислении:
- Селектор ключа, который определяет какой ключ среди прочих ключей домена следует
использовать; - Имя домена DNS для ключа;
- Имя файла, содержащего ключ
Например
<virtual-mta domainkey> host-name port25.com ... domain-key test, port25.com, c:\pmta\k1.example.org.pem </virtual-mta>
или
domain-key test, port25.com, c:\pmta\k1.example.org.pem
Можно указывать несколько записей domain-key. PowerMTA последовательно перебирает
ключи и выбирает первый ключ, домен которого соответствует личности, от имени которой подписывается электронное письмо. Информацию о этой личности PowerMTA извлекает из адреса
в хэдере Sender или, если таковой хэдер отсутствует, можно указать эту информацию директивой dkim-identity.
В директиве domain-key также можно указать подстановочный знак «*». В этом случае
PowerMTA будет считать его подходящим для любого домена личности. Это полезно, когда
один и тот же открытый ключ вводится в DNS под несколькими доменными именами.
Чтобы настроить подпись DKIM для домена:
- Укажите домен, в котором будет зарегистрирован ключ. Это должен быть либо сам домен DKIM-личности, либо его родительский домен. В приведенных ниже примерах мы предположим, что это example.org.
- Решите, что будет использоваться в качестве селектора. Селектор – это уникальный идентификатор ключа в пределах домена, указанного в шаге 1. Мы будем использовать k1 в приведенных ниже примерах.
- Создайте свой закрытый ключ, используя утилиту pmtakeytool или мастер ключей от Port25 по адресу (если вы будете использовать мастер ключей, пропустите шаг 8):
https://www.port25.com/support/domainkeysdkim-wizard/pmtakeytool newdk k1 example.org 2048 - Эта процедура создаст 2048-битный закрытый ключ в файле k1.example.org.pem и соответствующий открытый ключ в формате BIND k1.example.org.dns.
- Переместите PEM-файл в каталог c:\pmta\ на Windows или в каталог /etc/pmta на Unix; проверьте разрешения на доступ к файлу (в идеале, доступ должен быть предоставлен только PowerMTA).
- Добавьте текстовую запись из файла k1.example.org.dns к вашей конфигурации DNS.
Возможно, придётся подогнать синтаксис для программного обеспечения, которое вы
используете. Вы можете обратиться к спецификации DKIM (с сайта http://www.dkim.org/)
для получения более подробных сведений о синтаксисе записи:
K1._domainkey IN TXT ("k=rsa\; p=" "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxeRmblkAUC0ZwBLltS37" "ubgOk3bifNP8ubH5wc01mkAskRJcSDnXhxrbNseIBJye2lwVyRSDmkhCo5lreGbt" "pwdo3kqIEj0k2+ZC2MSNREovoyFXuJHbNDB2VUvlh0ROJMNQx3VuBsYr884K1dsE" "tzb+9+8JjYwKr6khNu4GeuebT4XdTwcqvtYkqw/MW4H0RxPJ8/w7pUHy1o08W1Hk" "N/wAQkhcxygJTaehtkApDfY3N5kVk8XAYdzbJaSe/7Uw0ImqFgxy60MrWlUaUyWO" "uTBwIPQScDgX3yIl1GHgV25DlEKo8sfTNgFJhil1ju3iZ25KoiPeFyWN+7AohF1Y" "SQIDAQAB")
Добавьте директиву domain-key в файл конфигурации:
<virtual-mta example> ... domain-key k1, example.org, c:\pmta\k1.example.org.pem </virtual-mta>
Или, если нужно произвести глобальную настройку
domain-key k1, example.org, c:\pmta\k1.example.org.pem
Активируйте подписывание для желаемого домена (доменов), или в записи , чтобы активировать подпись для всех доменов.
<domain yahoo.com> ... dkim-sign yes </domain>
Если директива domain-key настроена для VirtualMTA, а не глобально, настройте
PowerMTA так, чтобы письма, которые необходимо подписывать, отправлялись через
нужный VirtualMTA:
<pattern-list L> mail-from /[@\.]example\.com$/ virtual-mta=example </pattern-list> <source 10.1.0.0/16> # источники предоставления информации pattern-list L </source>
Добавление параметров DKIM-подписи в хэдер
PowerMTA поддерживает добавление параметров DKIM-подписи в хэдер, которые переопределяют параметры писем. Для этого необходимо активировать -директиву processX-DKIM-Options и добавить хэдер X-DKIM-Options перед предоставлением письма PowerMTA. Хэдер будет использовать синтаксис, схожий с тегами, разделёнными двоеточиями в DKIM-signature и может добавлять сразу несколько параметров:
- s – селектор. Указывает значение тега s= в подписи. В domain-key обязательно должен
быть указан данный селектор. - d – домен. Указывает значение тега d= в подписи. В domain-key обязательно должен
быть указан точный домен или подстановочный шаблон («*»). - i – личность. Указывает значение тега i=. Если не указан d, то в domain-key должен
быть указан такой же домен, родительский домен или подстановочный шаблон («*»). - q – метод запроса. Указывает значение тега q= в подписи.
- key-list – указывает, что ключ домена выбирается из указанного раздела <domainkey-list>
К примеру, со следующей конфигурацией:
domain-key key1, example.com, c:\pmta\key1.example.com.pem domain-key key2, example.com, c:\pmta\key2.example.com.pem
Для выбора ключа могут быть использованы такие параметры X-DKIM-Options:
X-DKIM-Options: s=key2
Поддержка второй DKIM-подписи
PowerMTA поддерживает возможность добавления второго хэдера DKIM-Signature с параметрами, которые отличаются от параметров первого. Данная опция, например, фактически требуется gmail при использовании их цикла обратной связи. Все директивы dkim-… для второй
подписи начинаются с префикса «second-»:
second-dkim-add-body-limit second-dkim-add-timestamp second-dkim-algorithm second-dkim-body-canon second-dkim-disallow-adding-headers second-dkim-expire-after second-dkim-headers second-dkim-headers-canon second-dkim-identity second-dkim-identity-fallback second-dkim-sign second-dkim-query-method
В примере ниже, мы видим, что PowerMTA добавляет и подпись клиента, и ESP-подпись к письмам, отправляемым через VirtualMTA «12345». Подпись клиента основывается на домене
хэдера From (customer.com), а ESP-подпись – на указанном параметре second-dkim-identity
(dkimesp.com). PowerMTA будет добавлять хэдер Feedback-ID, необходимый для gmail, в обе
подписи только для писем на gmail.
<virtual-mta 12345> domain-key 2017k1, esp.com, c:\pmta\keys\esp.esp.com.pem domain-key 2017-01, customer.com, c:\pmta\keys17-01.customer.com.pem <domain gmail.com> dkim-headers Feedback-ID second-dkim-headers Feedback-ID <domain *> dkim-sign yes second-dkim-sign yes second-dkim-identity @esp.com </domain> </virtual-mta>
Примечание: метод заголовка X-DKIM-Options не поддерживается для второй подписи, но все
равно может использоваться для первой подписи.
PowerMTA все равно доставит сообщение, если из-за атрибутов сообщения и параметров конфигурации нет подходящих подписей, независимо, должна ли применяться одна подпись или
обе.
Возможность DKIM-подписи закрытым ключом, данным в письме.
У PowerMTA есть возможность извлечения закрытого ключа из хэдера в письме и дальнейшего
использования этого ключа для DKIM-подписи писем. Это альтернативное решение для прописывания ключей в файле конфигурации. Чтобы сделать эту функцию активной, используйте
директиву process-x-dkim-key для источников.
Если установлено значение true, PMTA будет извлекать закрытый ключ, указанный в хэдере
X-DKIM-Key, и использовать его для DKIM-подписи писем. По соображениям безопасности, перед передачей письма, этот хэдер будет удален из него. Обратите внимание, что при использовании этой функции вы должны указать селектор (значение «s=») для DKIM-подписи с помощью хэдера X-DKIM-Options, иначе письмо не будет подписано. Обработка хэдера X-DKIMOptions также должна быть включена с помощью директивы process-x-dkim-options для
источника.
Также следует помнить, что содержимое X-DKIM-Key будет занимать несколько строк, поэтому
вам будет нужно ввести хэдер в теле сообщения, как показано в примере ниже:
Date: Mon, 8 Mar 2017 13:29:22 -0500 From: Test User <test@port25.com> To: test@port25.com Subject: help! X-Dkim-Options: s=ball; d=some-esp.com; X-Dkim-Key: -----BEGIN PRIVATE KEY----- MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAL2/eGlUEGzYGMoN P8fdRRHF8BZ0/7+ani5IkZq5W84WDjSLtx8OryMYJNttOtdcIy3vb5YCsqziZncE a8ite5GiYct2SW+Such/KTWWNuJFEpyz7bjWjP46izuoktZ6JWErnmK+IiPCkc8/ iSVJXZgafio5gBwr0mUi2YDGUX/RAgMBAAECgYBGYCSV1EL/S6ruDbnxNAUxEVv5 yE0u0HcIrYurekItjoqYPJWfpD+a4ZKR+9JOG/NET0Dwv3Fro9DjJbWgSY/BkSKs ckypdEh2DECtAaqpZ18Bs7nmaHnsyhaFHaTvT/VKM/WVvBXfh+NlaHoJK05um9MS jVwiDkZHVeku6g+Y0QJBAO392X05FziwQYFS5Y6ldfyJfWQzRmGTsz8B1HGeS84N wuMtP4zjL/c5nwOkN5SO8inE7xZLy958WQQtZW9BW00CQQDMGxbwuK4HmBLejLZw R7g9SH8b/54bWWt+4BmiWjF1Dnbeq/5Co2ZHcXOQ50fopk/OsAsN/F0VZb5578lz nsyVAkAyhSieBHiBeCjvowFH/qfFLAqKMrhGDmyGe4T1eXzuCM3OG9TZu4B7Iqg2 xa1mw9F0PHHkccKdQBhFYr2dmGohAkAJi6bKAUkaT9FqGRibLa9/JjnTnGPPkaIG YAKy5hb0C4YhqdeNVEj/RF4MQ9TIG6cV2oPZ1pif3I9I8p7wSlf1AkBznyYhKnML OdSR8QUfwVm8o5TtFz+kisDJ7fQc1kCruB5IyLXPnKxugUcetHBVnC4Y7O996N4R mkoEKsyfiQhk -----END PRIVATE KEY----- HELP! How do I port25? Thanks abunch, .. Test
Для DKIM-подписи письма выше, вам будет нужно добавить следующие директивы в конфигурацию PMTA:
<source 0/0> process-x-dkim-key yes process-x-dkim-options yes </source> <source {pickup}> process-x-dkim-key yes process-x-dkim-options yes </source>