Настройка DKIM подписи

На примере сервера на CentOS.

Установка и настройка opendkim

Устанавливаем opendkim:

yum install opendkim

Создаем ключи:

cd /etc/opendkim/keys/
mkdir site.ru
opendkim-genkey -D site.ru -d site.ru -s default
chown -R opendkim:opendkim .

В итоге создаются 2 файла:

  • site.ru/default.private - приватный ключ
  • site.ru/default.txt - публичный ключ

Редактируем конфигурационные файлы:

/etc/opendkim/KeyTable
# OPENDKIM KEY TABLE
# To use this file, uncomment the #KeyTable option in /etc/opendkim.conf,
# then uncomment the following line and replace example.com with your domain
# name, then restart OpenDKIM. Additional keys may be added on separate lines.
 
default._domainkey.site.ru site.ru:default:/etc/opendkim/keys/site.ru/default.private
/etc/opendkim/SigningTable
# WILDCARD EXAMPLE
# Enables signing for any address on the listed domain(s), but will work only if
# "refile:/etc/opendkim/SigningTable" is included in /etc/opendkim.conf.
# Create additional lines for additional domains.
 
*@site.ru default._domainkey.site.ru

DMARC

Редактируем список доверенных хостов: IP адресов, hostname и CIDR диапазонов:

/etc/opendkim/TrustedHosts
# OPENDKIM TRUSTED HOSTS
# To use this file, uncomment the #ExternalIgnoreList and/or the #InternalHosts
# option in /etc/opendkim.conf then restart OpenDKIM. Additional hosts
# may be added on separate lines (IP addresses, hostnames, or CIDR ranges).
# The localhost IP (127.0.0.1) should always be the first entry in this file.
127.0.0.1
::1
#host.example.com
#192.168.1.0/24
site.ru

Редактируем основной конфигурационный файл /etc/opendkim.conf, я отметил главные изменения:

/etc/opendkim.conf
Mode    sv # добавляем опцию s - чтобы подписывать
# раскомментировать следующие опции
KeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts

Настройка Sendmail

Добавить следующую опцию:

/etc/mail/sendmail.mc
INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@localhost')dnl

Пересобрать конфигурацию:

cd /etc/mail/
m4 sendmail.mc > sendmail.cf

Добавить запись DNS

Добавить запись DNS тип TXT для субдомена default._domainkey.site.ru, взяв содержимое из файла site.ru/default.txt.

default._domainkey.site.ru

Проверить успешность добавления можно так:

dig TXT default._domainkey.site.ru

Запустить

service opendkim start
service sendmail restart
chkconfig opendkim on

Проверить на то, что сервисы «висят»:

netstat -nlp | grep -P 'sendmail|opendkim'

netstat sendmail opendkim

Проверить

Проверить можно отправкой на адрес популярных почтовиков (Яндекс, Гмыло), в примере email@yandex.ru:

test-dkim.php
echo var_dump(mail("email@yandex.ru", "test", "message text", "From: info@site.ru\nContent-Type: text/plain; charset=windows-1251\nContent-Transfer-Encoding: 8bit", "-finfo@site.ru"));

DKIM yandex.ru

А в исходном теле будет запись вида

Authentication-Results: mxfront6j.mail.yandex.net; spf=pass (mxfront6j.mail.yandex.net: domain of site.ru designates 100.100.100.100 as permitted sender) smtp.mail=info@site.ru; dkim=pass header.i=@site.ru

Главные проверки должны быть пройдены: spf=pass и dkim=pass