«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