FreeBSD - настройка OpenDKIM + Postfix

Теория

Технология DKIM обеспечивает целостность и аутентичность почтовых сообщений, используя систему шифрования с открытым ключом. Т.е. гарантирует, что сообщение не подделали и его могли отправить только с почтового сервера, имеющего закрытый ключ.
Вкратце, как это работает:

  1. почтовый сервер отправителя генерирует пару ключей - закрытый и открытый. Открытый ключ помещается в TXT-запись домена отправителя и доступен всем. Закрытый ключ остается на сервере и должен храниться в тайне
  2. почтовый сервер отправителя подписывает сообщение - берет хэш (RSA-SHA256 или RSA-SHA1) определенных заголовков сообщения и зашифровывает хэш закрытым ключом
  3. полученную ЭЦП (Электронную Цифровую Подпись) почтовый сервер отправителя добавляет в заголовок почтового сообщения и отсылает получателю
  4. Почтовый сервер получателя принимает сообщение и выполняет проверку целостности и аутентичности: берет хэш определенных заголовков сообщения и расшифровывает хэш открытым ключом. Если полученная последовательность данных совпадает с ЭЦП, которая была в сообщении - значит проверка прошла успешно. Т.к. асимметричное шифрование гарантирует однозначность расшифрованных данных.

Задача

В рамках технологии DKIM настроить подписывание ключом исходящих почтовых сообщений для домена, например, test.com

Установка OpenDKIM

Будем считать, что postfix уже установлен и запущен.

portmaster mail/opendkim

Настройка OpenDKIM

Создадим файл /usr/local/etc/mail/opendkim.conf

AutoRestart	Yes
AutoRestartRate	5/1h
LogWhy		yes
ReportAddress		"DKIM Error Postmaster" <admin-email>
SendReports	Yes
KeyTable	/usr/local/etc/mail/KeyTable
SigningTable	/usr/local/etc/mail/SigningTable
Socket		/var/run/milteropendkim/opendkim.sock
Syslog		Yes
SyslogSuccess	Yes
UMask		002

Создадим файл /usr/local/etc/mail/KeyTable

mail._domainkey.% %:mail:/var/db/dkim/%/mail.private

Создадим файл /usr/local/etc/mail/SigningTable

test.com mail._domainkey.%

Сгенерируем закрытый и открытый ключи для проверки DKIM

mkdir -m 750 /var/db/dkim ; mkdir -m 750 /var/db/dkim/test.com/
opendkim-genkey -D /var/db/dkim/test.com -d test.com -s mail
chown -R mailnull:mailnull /var/db/dkim/

В результате мы получим закрытый и открытый ключи

ls -l /var/db/dkim/test.com/
total 3
-rw-------  1 mailnull  mailnull  887 Feb 10 13:30 mail.private
-rw-------  1 mailnull  mailnull  324 Feb 10 13:31 mail.txt

Открытый ключ необходимо добавить в ДНС-запись домена test.com

opendkim может хранить несколько ключей для разных доменов. Для создания пары ключей для нового домена необходимо добавить соответствующую запись в SigningTable и сгенерировать пару ключей.

Если ваш домен делегирован на ДНС-сервера Yandex и в домене уже сгенерирована DKIM-запись, закрытый ключ можно получить через yandex api следующей командой:

curl -H 'PddToken: XXX' 'https://pddimp.yandex.ru/api2/admin/dkim/status?domain=test.com&secretkey=yes'


PddToken можно получить по адресу: https://pddimp.yandex.ru/api2/registrar/get_token

Проверка работы ключей:

opendkim-testkey -vvv -d test.com -s mail -k /var/db/dkim/test.com/mail.private
opendkim-testkey: key loaded from dkim/test.com/mail.private
opendkim-testkey: checking key 'mail._domainkey.test.com'
opendkim-testkey: key OK

Добавим строки в /etc/rc.conf

milteropendkim_enable="YES"
milteropendkim_uid="mailnull:mail"

Настройка postfix

Добавим в main.cf

## DKIM
smtpd_milters = unix:/var/run/milteropendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

Запустим сервисы

/usr/local/etc/rc.d/milter-opendkim start
/usr/local/etc/rc.d/postfix restart

Ссылки

Комментарии

 
blog/2015/02/10-freebsd_-_настройка_opendkim_postfix.txt · Последние изменения: 2015/08/26 12:20 — Антон Бугреев · []