Настройка DKIM на Postfix

Настройка DKIM на Postfix 01Настройка DKIM на Postfix упирается в установку дополнительного компонента – OpenDKIM, а со стороны Postfix необходимо добавить лишь несколько строчек. Помимо этого, вам надо будет также добавить DNS-запись у вашего регистратора (ну или на вашем DNS-сервере, если зона делегирована вам).

Теперь обо всем подробнее.


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


Настройка DKIM на Postfix

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

В качестве тестового домена будет использоваться bq-srv.ru.

Установка

С установкой на Debian все просто:

Переходим к настройке.

Ключи

Начинать настройку OpenDKIM будет логичнее всего с генерации пары ключей – закрытого и открытого. Сделать это можно локально на сервере с помощью утилиты opendkim-genkey, но для начала создадим отдельный каталог с необходимыми правами и выставим нужного владельца:

А теперь создаем ключи:

Примечание: уже на этом этапе вам надо определиться с именем селектора, в моем случае это mail. Если не знаете что это такое, почитайте статью про DKIM – см. выше. Также, если вы настраивали Postfix по моей статье – Простейший relay на Postfix для Exchange Server, то команда postconf -h mydomain вернет имя вашего домена. В противном случае вам нужно прописать домен в поле –domain=your_domain самостоятельно.

После выполнения команды будут созданы два файла – mail.private и mail.txt. Вы можете посмотреть их содержимое, если интересно. Один из этих файлов нам понадобится уже в следующей главе.

Выставим нужные права на файл закрытого ключа:

Можно создавать записи.

Записи DNS

Чтобы не тратить время впустую, ожидая распространения DNS-записей, разумно добавить DKIM-запись уже сейчас, а потом спокойно заниматься настройкой. Напомню, что потребуется создать запись TXT. Её вы можете найти в файле /etc/opendkim/mail.txt и она уже имеет нужный вид:

Примечание: напомню, что если вы упираетесь в максимальную длину записи в 255  символов и регистратор не дает создать запись длиннее, есть обходное решение 1. В противном случае обратитесь в поддержку регистратора.

Переходим к настройке.

Настройка OpenDKIM

Основные настройки OpenDKIM находятся в файле /etc/opendkim.conf. Оставим его оригинал в качестве бэкапа, а на его месте создадим новый пустой файл:

Открываем его для редактирования и вставляем содержимое:

Традиционно небольшое описание 2 каждого параметра ниже.

Каждая строка файла /etc/opendkim/KeyTable задает соответствие селектор – домен – закрытый ключ. Разумеется вы можете иметь сколько угодно доменов и селекторов:

Соответствия отправителей и селектора определяет файл /etc/opendkim/SigningTable. По сути, второе значение каждой строки SigningTable соответствует первому значению файла KeyTable:

Файл /etc/opendkim/TrustedHosts используется для двух целей одновременно. Он определяет список внутренних (InternalHosts) и внешних (ExternalIgnoreList) хостов, с которых всю почту надо подписывать, а не проверять.

На стороне OpenDKIM настройка завершена, теперь необходимо научить Postfix отдавать письма на подпись.

Настройка Postfix

Чтобы Postfix после всех манипуляций подписывал сообщение, необходимо добавить всего три строки в конфиг /etc/postfix/main.cf:

Напомню, что сам Postfix ничего не знает о DKIM и в процессе обработки сообщения лишь на время отправляет его OpenDKIM и, как только тот его подпишет, принимает его обратно и отсылает конечным получателям. В терминологии Postfix эта технология называется Milter (mail filter 3).

Добавьте проверку DKIM самой последней, но перед DMARC (если она имеется).

Проверка работы

А теперь отправим тестовое письмо и после этого проверим содержимое лог-файлов (по умолчанию /var/log/mail.log). Хочу напомнить, что моя лаба представляет из себя связку Exchange Server 2016 + релэй на Postfix, который я начал настраивать в статье Простейший relay на Postfix для Exchange Server. Итак, логи:

Примечание: если вдруг возникают сложности с поиском логов, то помните, что ваша главная задача – найти идентификатор сообщения и уже по нему фильтровать. Сразу после отправки сообщения на сервере-релэе вы можете просмотреть последние записи в логах командой:
# tail -n 40 /var/log/mail.log
Идентификатор сообщения представляет из себя десятисимвольную запись (пример – 016117F3F7). Скопируйте его и выполните уже другую команду:
# grep -e ‘016117F3F7’ /var/log/mail.log
После этого вы получите все записи, связанные с обработкой сообщение, которому присвоен идентификатор 016117F3F7.

Видно, что письмо приходит с эксча, подписывается (DKIM-Signature field added), ставится в очередь на отправку и отправляется со статусом ОК. На принимающей стороне просматриваем заголовки сообщения и видим:

А также саму подпись:

Релэй правильно подписывает отсылаемые сообщения, но надо удостовериться, что он не забывает проверять подписи у сообщений, которые приходят снаружи на внутренний сервер. Пробуем отправить сообщение с любого внешнего сервера и смотрим логи:

Из логов видно, что сообщение получено, DKIM подпись проверена и является валидной, а далее сообщение направлено на конечный сервер EXCH01.

Настройка на этом завершена.

Яндекс.Метрика