DKIM: различия между версиями

Материал из Webko Wiki
Перейти к навигации Перейти к поиску
(Новая страница: «Хочу поделиться своим небольшим опытом прикручивания DKIM (DomainKeys Identified Mail) к своему домену…»)
 
Строка 1: Строка 1:
Хочу поделиться своим небольшим опытом прикручивания DKIM (DomainKeys Identified Mail) к своему домену и почтовому серверу.
+
== Из описания DKIM в Wiki ==
  
Мы имеем:
+
'''DomainKeys Identified Mail''' метод E-mail аутентификации.
  
    Платформа: Windows WebServer 2008;
+
Технология DomainKeys Identified Mail (DKIM) объединяет несколько существующих методов антифишинга и антиспама с целью повышения качества классификации и идентификации легитимной электронной почты. Вместо традиционного IP-адреса, для определения отправителя сообщения DKIM добавляет в него цифровую подпись, связанную с именем домена организации. Подпись автоматически проверяется на стороне получателя, после чего, для определения репутации отправителя, применяются «белые списки» и «чёрные списки».
    Сервер DNS: Bind 9.7;
 
    Почтовый сервер: hMailServer 5.3.3.
 
  
 +
В технологии DomainKeys для аутентификации отправителей используются доменные имена. DomainKeys использует существующую систему доменных имен (DNS) для передачи открытых ключей шифрования.
  
Задача:
+
== Для работы с DKIM нам нужно ==
  
    Разобраться в системе подписи сообщений DKIM, что бы gmail признал её валидной и выдал заветные: dkim=pass.
+
#Поддержка DKIM почтовым сервером для подписывания отправляемой почты;
 +
#Получение пары приватного и публичного ключа;
 +
#Занесение в DNS домена необходимых записей о наличии поддержки DKIM.
  
  
  
Начнем с начала. Что такое DKIM вообще и что нам нужно, что бы наша почтовая система отправляла почту с поддержкой DKIM.
 
 
Из описания DKIM в Wiki:
 
 
    DomainKeys Identified Mail метод E-mail аутентификации.
 
    Технология DomainKeys Identified Mail (DKIM) объединяет несколько существующих методов антифишинга и антиспама с целью повышения качества классификации и идентификации легитимной электронной почты. Вместо традиционного IP-адреса, для определения отправителя сообщения DKIM добавляет в него цифровую подпись, связанную с именем домена организации. Подпись автоматически проверяется на стороне получателя, после чего, для определения репутации отправителя, применяются «белые списки» и «чёрные списки».
 
    В технологии DomainKeys для аутентификации отправителей используются доменные имена. DomainKeys использует существующую систему доменных имен (DNS) для передачи открытых ключей шифрования.
 
 
 
Для работы с DKIM нам нужно:
 
 
    Поддержка DKIM почтовым сервером для подписывания отправляемой почты;
 
    Получение пары приватного и публичного ключа;
 
    Занесение в DNS домена необходимых записей о наличии поддержки DKIM.
 
 
 
С поддержкой DKIM почтовым серверов всё вполне понятно. hMailServer с версии 5.1 поддерживает подпись исходящей корреспонденции ключом.
 
 
Теперь необходимо найти, как сформировать пару секретного и публичного ключа. После перебора нескольких вариантов я остановился на web-утилите сервиса port25.com которая, кроме формирования необходимых ключей, так же генерирует и подсказку по DNS записям:
 
www.port25.com/support/support_dkwz.php
 
 
Небольшое пояснение по поводу некого поля «domain selector». Данное поле позволяет привязать к одному домену несколько DKIM записей для разных нужд (например для разных почтовых серверов). В моём случае у меня только один почтовый сервер и у меня нет необходимости в селекторе, так что в роли селектора я выбрал просто «mail».
 
 
Полученный приватный ключ сохраняем на сервер в папку, к которой имеет доступ почтовый сервер. Публичный ключ в принципе можно не сохранять в виде файла. Он нам пригодиться только для внесения необходимой записи в DNS. В конфигурации домена в hMailServer нам необходимо указать путь к приватному файлу ключа, а так же указать выбранный селектор (напомню, я в виде селектора взял «mail»).
 
 
В файле DNS-зоны нам необходимо указать записи вида:
 
 
    _domainkey.example.com. TXT "t=s; o=~;"
 
    mail._domainkey.example.com. TXT "k=rsa\; t=s\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQmO9AuWRbWPgl/jzDPQodrLfFLFqYYi6bCBnsTOCOJQrFbGgiR1C01j4zLw8XgG3rQ0WAaeg6Z  /y39Ah7IONfs5gQuK6eGZMmYwIsZyz2dQoUDmDLCb1WygpkrqsCbyPw3SWGihM4iChOwo7Ovo2mTOWOf5ejeZcP2qqNb9nRMQIDAQAB"
 
 
 
Где «mail» перед _domainkey во второй записи — это не что иное, как наш выбранный селектор, а длинный набор символов в той же записи идущий после «p=» — это наш публичный ключ.
 
 
Вроде бы всё. Теперь попробуем отправить письмо с нашего почтового сервера на почту gmail, так как доподлинно известно, что gmail проверяет DKIM. Смотрим в полученное письмо в gmail и видим заветные строки:
 
 
    Authentication-Results: mx.google.com; spf=pass (google.com: domain of [email protected] designates 123.123.123.123 as permitted sender) [email protected]; dkim=pass [email protected]
 
 
 
Поздравляем меня с успешным покорением DKIM ))), чего и вам желаю. Удачи.
 
 
UPD: Для получения пары ключей без использования внешних сервисов можно воспользоваться OpenSSL:
 
 
    openssl.exe genrsa -out tstpriv.pem 1024 — генерим секретный ключ (1024 — длина ключа).
 
    openssl.exe rsa -pubout -in tstpriv.pem -out tstpub.pem — получаем публичный ключ из секретного
 
 
 
Спасибо lorc за дополнение.
 
 
UPD 2: Небольшое дополнение от nshopik:
 
Так же можно у домена прописать ADSP запись (RFC5617) — это позволит принимающему серверу понять, должно ли ваше письмо быть подписано или нет.
 
Запись выгладит таким образом:
 
 
    _adsp._domainkey.example.com. TXT "dkim=all"
 
 
 
Значений dkim= может быть три:
 
 
    all — Все письма должны быть подписаны
 
    discardable — Не подписанные письма не должны приниматься
 
    unknown — Аналогично отсутствию записи
 
 
[[Категория:Mail]]
 
[[Категория:Mail]]

Версия 01:01, 27 января 2016

Из описания DKIM в Wiki

DomainKeys Identified Mail метод E-mail аутентификации.

Технология DomainKeys Identified Mail (DKIM) объединяет несколько существующих методов антифишинга и антиспама с целью повышения качества классификации и идентификации легитимной электронной почты. Вместо традиционного IP-адреса, для определения отправителя сообщения DKIM добавляет в него цифровую подпись, связанную с именем домена организации. Подпись автоматически проверяется на стороне получателя, после чего, для определения репутации отправителя, применяются «белые списки» и «чёрные списки».

В технологии DomainKeys для аутентификации отправителей используются доменные имена. DomainKeys использует существующую систему доменных имен (DNS) для передачи открытых ключей шифрования.

Для работы с DKIM нам нужно

  1. Поддержка DKIM почтовым сервером для подписывания отправляемой почты;
  2. Получение пары приватного и публичного ключа;
  3. Занесение в DNS домена необходимых записей о наличии поддержки DKIM.