DKIM ключ создание и установка

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

Для начала нам необходимо создать пару ключей. Делаем секретный ключ размером 1024 - 1024 обязательно! c 2048 не работает на DNS яндекса:

openssl genrsa -out sample.com.pem 1024 
Получаем публичный ключ из секретного
openssl rsa -pubout -in sample.com.pem -out sample.com.pub

Шаг 2: Ставим и настраиваем сервис opendkim.

apt install opendkim opendkim-tools
Содержимое файла конфигурации /etc/opendkim.conf:
# grep "^[^#^]" /etc/opendkim.conf
PidFile /var/run/opendkim/opendkim.pid
Mode sv
Syslog yes
SyslogSuccess   yes
LogWhy  yes
UserID  opendkim:opendkim
#Socket  /var/spool/postfix/var/run/opendkim/opendkim.sock
Socket  inet:8891@localhost
Umask   002
SendReports yes
SoftwareHeader  yes
Canonicalization relaxed/relaxed
Selector    key1
MinimumKeyBits  1024
KeyFile /etc/opendkim/keys/sample.com.pem
KeyTable file:/etc/opendkim/keytable
SigningTable refile:/etc/opendkim/signingtable
Теперь добавим ключ в файл /etc/opendkim/keytable:

key1._domainkey.sample.com sample.com:key1:/etc/opendkim/keys/sample.com.pem
В файле /etc/opendkim/signingtable прописываем:
*@sample.com key1._domainkey.sample.com
В файл /etc/opendkim/trustedhosts записываем доменные имена и внешние IP-адреса, с которых разрешено отправлять почту домена:
*.app.sample.com
*.sample.com
85.143.178.30
85.143.203.34
Теперь надо проверить права на каталоги и файлы - должны быть opendkim:opendkim. Логи сервис пишет в /var/log/syslog. При правильной настройке там будет запись вида:
Oct  5 13:54:45 sample.com opendkim[21389]: 393FE64E1: DKIM-Signature field added (s=key1, d=sample.com)

Шаг 3: Конфигурирование DNS сервера с Public Key

Делаем DNS-запись типа TXT для нашего селектора key1._domainkey.sample.com.

key1._domainkey.sample.com IN TXT
"v=DKIM1; k=rsa; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCgKOMHouZ8nWEBlL6QnQQ1sRgM4FyER1mMdvpJBhZA5iu5bbHUBDfY/ZUGLXHQRf2MLzAR10lssltHKtuT+D6MikdkkA+u7sqFRGqXZNGShbSsneWsCkiah+Pay3MZAwepEbRoVo43/hKejTz7hG8FCs8NxMEYbeBKbiGDFMR/uwIDAQAB"
В значение параметра p вставляем наш сгенерированный публичный ключ (см.приложение). После этого надо проверить статус селектора по ссылке: http://www.dnswatch.info/dns/dnslookup?la=en&host=key1._domainkey.sample.com&type=TXT&submit=Resolve

Проверка DKIM-записи:

dig default._domainkey.sample.com TXT
dig key1._domainkey.sample.com TXT

Domain name of the "From:" header address, not the SMTP "MAIL FROM": sample.com
DomainKey Selector (e.g., key1): key1
Key size in bits: 1024

Шаг 4: Сохраняем приватный ключ на почтовом сервере (MTA)

Копируем приватный ключ в каталог /etc/opendkim/keys/sample.com.pem на нашем почтовом сервере.

Шаг 5: Настройка postfix на взаимодействие с сервисом OpenDKIM

В файле /etc/postfix/main.cf добавляем или редактируем:

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

Шаг 6: Настройка SPF-записи

Чтобы почтовый сервер получатель принял почту с нашего сервера, ему надо указать с каких IP-адресов может приходить почта для этого домена. В нашем случае сайт размещен на IP 85.143.203.34, а почта отправляется через внешний IP: 85.143.178.30. Надо указать это в TXT-записи SPF: IN @ TXT

"v=spf1 include:_spf.google.com ip4:85.143.178.30 ip4:85.143.203.34 -all"

Шаг 7: Добавление DMARC-записи

Еще одна важная DNS-запись для верификации отправителя - DMARC:

v=DMARC1; p=none; sp=none; rua=mailto:no-reply@sample.com; ruf=mailto:dsa@gkomega.ru; fo=1

Шаг 8: Проверка корректности работы

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

dkim=pass header.d=sample.com
Это означает, что DKIM-запись настроена успешно.

Проверка DKIM TXT-записи для поддомена:

dig txt key1._domainkey.sample.com
Проверка DMARC TXT-записи для поддомена:
dig TXT _dmarc.sample.com
Пример DMARC-записи:
_dmarc
TXT
"v=DMARC1; p=none; sp=none; rua=mailto:sil@sample.com; ruf=mailto:dsa@sample.com; fo=1"

Хороший онлайн-сервис для контроля всех записей MxToolBox

Дополнительные рекомендации

  1. Перед установкой SPF-записи удостоверьтесь, что учтены все сервера, отправляющие письма в интернет (ключи ip4). Не забудьте про web-сервера и другие внешние почтовые службы.
  2. Правильно выбирайте механизм обработки писем (Pass, Fail, SoftFail, Neutral). При безусловной переадресации вашего письма из одной почтовой системы в другую может возникнуть проблема, так как SPF проверяет только последний «хоп».
  3. Рекомендуется создавать SPF-записи для всех доменов второго уровня, которые принадлежат вам или вашей компании, даже если вы не отправляете от их имени письма. Для таких доменов желательно использовать простую запись «v=spf1 -all», которая говорит, что никто не можем отправлять письма от этих доменов.
  4. Домены третьего уровня защитить можно с помощью wildcard-записи типа *.example.com. IN TXT «v=spf1 -all». При этом надо учесть, что wildcard работает только для непрописанных в DNS поддоменов. Подробнее описано в статье на Wikipedia и RFC 1034.
  5. SPF-записи рекомендуется создавать не только для доменов, но и для почтовых серверов, которые занимаются отправкой писем в интернет. Это необходимо, чтобы пройти HELO/EHLO Test принимающего сервера. Стандартная запись: mx.example.com. IN TXT «v=spf1 a -all».
  6. Если у вас много доменов, которые обслуживаются несколькими основными MX-серверами, то рекомендуется использовать механизм «redirect». Например, основной домен «sample.com» имеет SPF-запись «v=spf1 +a +mx -all», то остальным доменам (sample1.com, sample2.com и т.д.), для упрощения обслуживания, можно прописать запись «v=spf1 redirect=sample.com».
  7. Если у вас много доменов и много почтовых серверов отправителей, распределенных географически и организационно, то можно использовать механизм «include» и отдельную зону _spf.sample.com. Как пример можно посмотреть запись для домена gmail.com – v=spf1 redirect=_spf.google.com.
  8. Кроме защиты своих доменов рекомендуется защитить свою почтовую систему и пользователей, включив проверку SPF/DKIM/DMARC записей на ваших внешних почтовых серверах. Это будет хорошим дополнением даже для таких мощных программно-аппаратных комплексов, как Cisco IronPort.
  9. Как только полностью разберетесь с SPF, необходимо настроить подпись ваших электронных писем с помощью технологии DKIM и политики DMARC, это существенно увеличит репутацию ваших исходящих писем.

Установка dkfilter - альтернативы OpenDKIM

OpenDKIM подписывает исходящую почту DKIM-подписью. Утилита dkfilter тоже может это делать.

Исходный код и подробная инструкция на английском: DkFilter

yum -y install perl-Crypt-OpenSSL-RSA
(sudo perl -MCPAN -e 'install Crypt::OpenSSL::RSA') non complete!
cpan YAML
cpan
i /RSA/
install Mail::Address
wget http://jason.long.name/dkfilter/dkfilter-0.11.tar.gz
tar xvf dkfilter-0.11.tar.gz
cd dkfilter-0.11
./configure --prefix=/usr/local/dkfilter
make 
make install
cp sample-dkfilter-init-script.sh /etc/init.d/dkfilter
chkconfig --add dkfilter

Окончательная проверка делается скриптом send-mail-by-list.sh по списку email-адресов из разных поддоменов.

Можно просто отправить письмо на check-auth@verifier.port25.com или на check-auth2@verifier.port25.com.

Для примера, чтобы отправить результат проверки на info@sample.com надо отправить письмо на check-auth-info=sample.com@verifier.port25.com

Дополнительные инструменты

  1. Сброс кэша DNS серверов google: Cache DNS flushing
  2. Онлайн генератор DKIM ключей и советы по настройке и тестированию: Port25

Приложение 1. Публичный ключ sample.com

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCgKOMHouZ8nWEBlL6QnQQ1sRgM
4FyER1mMdvpJBhZA5iu5bbHUBDfY/ZUGLXHQRf2MLzAR10lssltHKtuT+D6Mikdk
kA+u7sqFRGqXZNGShbSsneWsCkiah+Pay3MZAwepEbRoVo43/hKejTz7hG8FCs8N
xMEYbeBKbiGDFMR/uwIDAQAB
-----END PUBLIC KEY-----