«DKIM (DomainKeys Identified Mail)» — метод E-mail аутентификации, разработанный для обнаружения подделывания сообщений, пересылаемых по email. Dkim дает возможность получателю проверить, что письмо действительно было отправлено с заявленного домена.

Устанавливаем пакет OpenDKIM. Он выполняет операции шифрования заголовков для DKIM.

apt-get install opendkim opendkim-tools  

Далее, создаем сертификат для домена, для этого воспользуемся opendkim-genkey и сформируем его, создаем каталог для размещения ключей:

mkdir /etc/opendkim  

Сгенерируем ключи командой:

opendkim-genkey -D /etc/opendkim/ --domain testing.ru --selector dkim  
  • testing.ru - домен, с которого будет отправляться почта, dkim - имя селектора, оно может быть любым.

В папке /etc/opendkim/ должно появиться два файла с расширениями .private (закрытый ключ) и .txt (txt-запись).

Зададим группу владельца opendkim для созданных ключей:

chown :opendkim /etc/opendkim/*  

Задаем права для группы владельца:

chmod g+rw /etc/opendkim/*  
useradd opendkim -m -s /sbin/nologin  

Разрешим чтение группе владельцу:

chmod g+r /etc/opendkim/*  

Далее настроим DNS.

Смотрим содержимое файла txt:

cat /etc/opendkim/dkim.txt  

Используя данное содержимое, в панели управления DNS создаем TXT-запись следующего формата:

dkim._domainkey IN  TXT ( "v=DKIM1; k=rsa; "  
"p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDM+aKFwMV4FHLhghuhQs4vEIIIigO0KzRwQojURHI8QV0m/aHt6AqO2JDhXpl54d3uXJj7QWE9653McQZxPQZa6Hu34RY70ap9OZQ664fWeVuyUAZ+VeQ7gGXQBCxPF6nAlnBIsYak+KV/s1HtaUuySVMiwIDAQAB"
  • dkim - название нашего селектора, p=MIGfMA0GCSqG...uySVMiwIDAQAB - сокращенная запись открытого ключа.

Настройка OpenDKIM и Postfix

Открываем конфигурационный файл opendkim.

nano /etc/opendkim.conf  

И приводим его к следующему виду:

AutoRestart             Yes  
AutoRestartRate         10/1h  
Umask                   002  
Syslog                  yes  
SyslogSuccess           Yes  
LogWhy                  Yes  
Canonicalization        relaxed/simple  
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts  
InternalHosts           refile:/etc/opendkim/TrustedHosts  
KeyTable                refile:/etc/opendkim/KeyTable  
SigningTable            refile:/etc/opendkim/SigningTable  
Mode                    sv  
PidFile                 /var/run/opendkim/opendkim.pid  
SignatureAlgorithm      rsa-sha256  
UserID                  opendkim:opendkim  
Socket                  inet:10021@localhost  
  • все параметры можно оставить, как в примере, Socket - можно указать другой порт, вместо 10021.

Создаем файл доверенных узлов. В него войдут имена хостов, доменов и IP-адресов, которые будут приняты, как доверенные и подписаны.

nano /etc/opendkim/TrustedHosts  

И вносим следующее:

127.0.0.1  
localhost  
*.testing.ru
  • где testing.ru — почтовый домен.

Создаем таблицу KeyTable. В ней хранится список соответствий между селекторами, доменами и файлами с закрытыми ключами. Формат записей:
<селектор>._domainkey.<домен> <домен>:<селектор>:<путь к закрытому ключу>

nano /etc/opendkim/KeyTable  

И в соответствии с форматом приводим его к нужному виду:

dkim._domainkey.testing.ru testing.ru:dkim:/etc/opendkim/dkim.private  

Далее создаем SigningTable. В данной таблице хранятся соответствия между определенными email-адресами и записями в KeyTable.

nano /etc/opendkim/SigningTable  

И приводим к такому виду:

*@testing.ru dkim._domainkey.testing.ru

Запускаем службу opendkim.

service opendkim start  

Открываем конфигурационный файл Postfix .

nano /etc/postfix/main.cf  

Добавляем или редактируем:

milter_protocol = 2  
milter_default_action = accept  
smtpd_milters = inet:localhost:10021  
non_smtpd_milters = inet:localhost:10021  
  • если smtpd_milters и non_smtpd_milters присутствуют в конфигурационном файле, то приведенные в данном примере значения нужно дописать к имеющимся.
  • 10021 - порт работы opendkim, который был задан в opendkim.conf.

Перезапускаем Postfix:

service postfix restart  

Отправляем электронное сообщение на различные почтовые системы - mail.ru, gmail.com, yandex.ru.
Открываем наше письмо и смотрим заголовки (в mail.ru: Еще - Служебные заголовки).
Находим следующую строчку, которая означает что проверка домена на базе DKIM настроена:

dkim=pass header.d=testing.ru  
Обновлено 2 сентября 2019 г.