Настройка DKIM в Exim и BIND

email_dkimЧто такое DKIM

DKIM (DomainKeys Identified Mai) — метод идентификации письма по доменным ключам.

Часто в СПАМ-письмах в поле From подставляют адреса который не имеют ни какого отношения к отправителю. DKIM создан для того, что бы бороться с таким видом СПАМ’а.

Используя DKIM, почтовый сервер-получателя всегда может проверить, действительно ли пришедшее письмо отправлено с того сервера/домена, что указано в заголовках письма, в поле From.

Принцип работы DKIM

Принцип работы DKIM

Принцип работы DKIM

  1. Пользователь с e-mail’ом keeper@2keep.net отправляет письмо пользователю user@example.org.
  2. Почтовый сервер-отправителя (2keep.net) принимает письмо и подписывает его секретным (Private) ключом.
  3. Почтовый сервер-отправителя (2keep.net) отсылает подписанное письмо на почтовый сервер-получателя (example.org).
  4. Почтовый сервер-получателя делает запрос к DNS серверу и получает публичный ключ для домена 2keep.net и ADSP запись.
  5. Получив публичный ключ, сервер-получателя проверяет подпись и если она соответствует, то dkim=pass, а если нет то dkim=fail. Если dkim=fail, то почтовый сервер смотрит, что рекомендует делать adsp запись. Отбрасывать такие письма или пропускать дальше для дополнительной проверки на спам.
  6. Если dkim=pass, письмо доходит до получателя (возможно, предварительно, прошедшее дополнительные спам фильтры).

Что имеем

  • CentOS Linux release 7.1.1503 (Core)
  • Exim version 4.84 #2 built 10-Oct-2014 09:17:22
  • BIND 9.9.4-RedHat-9.9.4-18.el7_1.3

Создание пары Private и Public Key

Нам необходимо создать два ключа, секретный (Private Key) и публичный ключ (Public Key). Публичный ключ мы разместим в файле DNS-зоны домена, а секретный ключ будем использовать с почтовым сервером Exim для подписи писем.

Информация о методе шифрования и длине ключа из википедии:

В DKIM используются уже устоявшиеся криптографические инструменты. На данный момент для цифровой подписи авторы DKIM предлагают два алгоритма: RSA-SHA256 и RSA-SHA1, но в будущем возможно расширение технологии для поддержки других алгоритмов. Длина ключа ограничина значением в 4096 бит, так как больший по длине ключ не поместится в максимальный размер DNS UDP-пакета — 512 байт. Рекомендованная длина ключа составляет от 1024 до 2048 бит. Слишком большая длина создает вычислительную нагрузку на сервер для обработки каждого сообщения, а слишком малая(384 или 512 бит) — взламывается перебором за актуальное время с помощью ПК или с использованием сервиса облачных вычислений.

Ключи будем создавать используя OpenSSL, но можно воспользоваться сервисом  www.port25.com/support/domainkeysdkim-wizard.

Создание Private Key

Длинна приватного ключа 2048 бит.

В результате будет:

Создание Public Key на основе Private key

В результате на экране отобразится:

Копируем данный ключ и сохраняем его. В дальнейшем мы будем использовать его в DNS зонах.

Настройка DKIM в DNS (BIND)

Добавляем DKIM селектор и публичный ключ

В файле DNS-зоны создаем запись mail._domainkey.2keep.net. (тут и в дальнейшем, меняем 2keep.net на ваш домен) типа TXT со значением: k=rsa\; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB…

Вместо mail можно использовать другой селектор, например dkim или другой. В дальнейшем, этот селектор нам понадобится во время настройки Exim.

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB… это фрагмент публичного ключа, но тут есть тонкость. BIND не понимает строки длинней 255 символов и поэтому, если вы пропишите публичный ключ в виде одной длинной строки, BIND при перезагрузке выдаст ошибку:

Прописывать ключ нужно следующим образом:

Обратите внимание, мы разбиваем ключ на группы.
Если у вас несколько доменов с которых вы отправляете почту, то создайте и для них пару ключей и сделайте аналогичные настройки.

Добавляем ADSP запись

ADSP (Author Domain Signing Practices, http://tools.ietf.org/search/rfc5617 ) — практики использования DKIM в домене.

ADSP это опциональное расширение DKIM, которое позволяет сообщать почтовым серверам-получателям, что делать с письмом пришедшим с якобы нашего домена, но не имеющее подписи.

Запись ADSP имеет три значения:

  • unknown — сервер может подписывать некоторые или все письма;
  • all — сервер подписывает все письма;
  • discardable — сервер подписывает все письма, но если письмо приходит не подписанное или с неверной подписью, то домен предлагает отклонить данное письмо.

Я использую тип all, т.к. только с моего почтового сервера будут отправляться письма и соответственно все они будут подписаны. Тип discardable, слишком радикален. Есть вероятность, что во время следования письма, его заголовки и подпись могут слегка изменится и письмо не дойдет, т.к. будет отброшено сервером получателем.

Запись ADSP в DNS-зоне:

Перезапускам BIND

Проверяем DNS-зону

Проверять DNS будем с помощью утилиты dig, а также можно воспользоваться сервисом http://www.dnswatch.info

Проверка с помощью dig:

Проверка с помощью DNSWatch:

DNSWatch

DNSWatch

Видим, что созданные записи появились в DNS-зоне.

Настройка почтового SMTP-сервера Exim

В конфигурационном файле Exim (/etc/exim/exim.conf) находим транспорт remote_smtp и правим его:

dkim_selector — указываем тот селектор, что мы выше прописывали в DNS-зоне. В данном случае это mail.

В начало конфигурационного файла Exim (/etc/exim/exim.conf) добавляем нижеследующие параметры:

Данная конструкция позволит использовать разные Private Key для разных доменов (домен берется из поля From).

В данном случае секретные (Private) ключи лежат в подкаталоге /etc/exim:

Мой почтовый сервер используется для двух сайтов 2keep.net и azlk-club.ru. Если письмо отправляется с сайта 2keep.net и в поле From: noreplay@2keep.net то и подписывается письмо секретным ключом 2keep.net.key, а если письмо отправляется с сайта azlk-club.ru и в поле From: noreplay@azlk-club.ru, то подписывается azlk-club.ru.key.

Конечно в DNS-зоне azlk-club.ru у меня тоже прописан публичный ключ и ADSP.

Перезапускаем Exim

 Проверка DKIM

Gmail и Yandex проверяют DKIM, отправим письма на данные почтовые ящики и посмотрим, какой будет результат.

Результаты на Gmail

Результаты теста DKIM в Gmail

Результаты теста DKIM в Gmail

Посмотрим заголовки:

Мы видим: dkim=pass

Результаты Yandex

Результаты теста DKIM в Yandex

Результаты теста DKIM в Yandex

DKIM настроен и работает.

Ещё рекомендую настроить в DNS-зоне для вашего домена SPF запись. Настраивается она легко и в Интернете множество инструкция на данную тему.

Ссылки:

The following two tabs change content below.
В профессиональной сфере занимаюсь всем, что связанно с IT. Основная специализация - VoIP и сети передачи данных. Стараюсь не заниматься Windows серверами (но иногда приходится) и 1С.

Настройка DKIM в Exim и BIND: 3 комментария

Добавить комментарий