- PVSM.RU - https://www.pvsm.ru -

OpenDKIM + Postfix = просто

OpenDKIM + Postfix = просто

В конце 2011 года разработчики проекта dkim-milter прекратили его поддержку [1] и разработку, а значит с каждым днём моя старая инструкция по настройке DKIM в Postfix на основе dkim-filter [2] теряет свою актуальность.

К счастью, на замену проекта dkim-milter пришел OpenDKIM [3], с помощью которого добавить DKIM-подпись [4] в письма так же просто.

Для этого нам потребуется сам Postfix и пакеты OpenDKIM [5]. Установим все необходимые компоненты с помощью вашего пакетного менеджера:

aptitude install opendkim opendkim-tools

Теперь нам нужно получить ключи, которые мы будем использовать для подписи писем. Ключи будем хранить рядом с конфигурационными файлами Postfix, но вы можете выбрать и другое место — это непринципиально.

mkdir /etc/postfix/dkim/

Получим ключ для домена example.com и селектора mail:

opendkim-genkey -D /etc/postfix/dkim/ -d example.com -s mail

Эта команда создаст файлы /etc/postfix/dkim/mail.private и /etc/postfix/dkim/mail.txt, с секретным и публиными ключами соответственно. Публичный ключ нужно добавить в соответствующую TXT запись [6] вашего домена.

Файлам ключей обязательно нужно дать доступ для группы, в которой работает OpenDKIM:

chgrp opendkim /etc/postfix/dkim/*
chmod g+r /etc/postfix/dkim/*

В файл конфигурации /etc/opendkim.conf записываем:

Syslog yes
SyslogSuccess yes
# на время отладки включим расширенное логгирование
LogWhy yes
X-Header yes

Canonicalization relaxed/relaxed
# подпись и проверка подписей
Mode sv
# если только подписываем
#Mode s

# список ключей -
KeyTable file:/etc/postfix/dkim/keytable
# соответствие адресов/доменов и ключей -
SigningTable file:/etc/postfix/dkim/signingtable
# если вы подписываете и на других серверах - 
#ExternalIgnoreList file:/etc/postfix/dkim/trusted
# список внутренних хостов, почта которых требует подписи -
#InternalHosts file:/etc/postfix/dkim/internal

Список имеющихся ключей укажем в файле /etc/postfix/dkim/keytable:

# формат: "название домен:селектор:/путь/до/ключа"
# в качестве названия удобно использовать имя DNS записи с ключем
mail._domainkey.example.com example.com:mail:/etc/postfix/dkim/mail.private
# ключей может быть сколько угодно
mx._domainkey.example.net example.net:mx:/etc/postfix/dkim/mx.private
# (список ключей может быть и в БД - продробней в манах)

Объясним OpenDKIM почту каких доменов какими ключами подписывать в файле /etc/postfix/dkim/signingtable:

# формат: "домен-или-адрес название-ключа"
example.com mail._domainkey.example.com
example.net mx._domainkey.example.net
# все остальные адреса тоже подписываем
* mail._domainkey.example.com
# (подробное описание формат есть в man)

В других файлах, указаных в директивах ExternalIgnoreList и InternalHosts, содержится просто список хостов и/или IP-адресов каждый на новой строке.

В файле /etc/default/dkim-filter объясним DKIM-демону где ему ждать подключений:

SOCKET="inet:8891@localhost"

Наконец, добавим в конец /etc/postfix/main.cf следующие строки:

milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

Не забываем добавить TXT запись [6] и проверить, что она на месте:

dig txt mail._domainkey.example.com

Готово!

Перезапускаем postfix и opendkim, отправляем тестовое письмо куда-нибудь на Яндекс и наслаждаемся успешным результатом проверки подписи:

OpenDKIM + Postfix = просто

Если проверка прошла успешно, то стоит формально запретить другим серверам принимать письма с вашим доменом, но без подписи, добавив ADSP запись [7]:

_adsp._domainkey IN TXT "dkim=all"

Автор: alexkbs


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/linux/15562

Ссылки в тексте:

[1] прекратили его поддержку: http://sourceforge.net/projects/dkim-milter/

[2] старая инструкция по настройке DKIM в Postfix на основе dkim-filter: http://habrahabr.ru/post/141534/

[3] OpenDKIM: http://opendkim.org/

[4] DKIM-подпись: http://habrahabr.ru/search/?q=dkim

[5] OpenDKIM: http://www.opendkim.org/

[6] в соответствующую TXT запись: http://www.zytrax.com/books/dns/ch8/txt.html

[7] ADSP запись: http://habrahabr.ru/post/106589/