DKIM ключ создание и установка
Шаг 1: Создаем ключи
Для начала нам необходимо создать пару ключей. Делаем секретный ключ размером 1024 - 1024 обязательно! c 2048 не работает на DNS яндекса:
Получаем публичный ключ из секретногоШаг 2: Ставим и настраиваем сервис opendkim.
Содержимое файла конфигурации /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
:
В файле /etc/opendkim/signingtable
прописываем:
В файл /etc/opendkim/trustedhosts
записываем доменные имена и внешние IP-адреса, с которых разрешено отправлять почту домена:
Теперь надо проверить права на каталоги и файлы - должны быть 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
Шаг 7: Добавление DMARC-записи
Еще одна важная DNS-запись для верификации отправителя - DMARC:
Шаг 8: Проверка корректности работы
Проверяем заголовки письма. Открываем наше письмо и смотрим заголовки (в mail.ru: Еще - Служебные заголовки). Среди них мы должны увидеть следующую строчку:
Это означает, что DKIM-запись настроена успешно.Проверка DKIM TXT-записи для поддомена:
Проверка DMARC TXT-записи для поддомена: Пример DMARC-записи:Хороший онлайн-сервис для контроля всех записей MxToolBox
Дополнительные рекомендации
- Перед установкой SPF-записи удостоверьтесь, что учтены все сервера, отправляющие письма в интернет (ключи ip4). Не забудьте про web-сервера и другие внешние почтовые службы.
- Правильно выбирайте механизм обработки писем (Pass, Fail, SoftFail, Neutral). При безусловной переадресации вашего письма из одной почтовой системы в другую может возникнуть проблема, так как SPF проверяет только последний «хоп».
- Рекомендуется создавать SPF-записи для всех доменов второго уровня, которые принадлежат вам или вашей компании, даже если вы не отправляете от их имени письма. Для таких доменов желательно использовать простую запись «v=spf1 -all», которая говорит, что никто не можем отправлять письма от этих доменов.
- Домены третьего уровня защитить можно с помощью wildcard-записи типа
*.example.com. IN TXT «v=spf1 -all»
. При этом надо учесть, что wildcard работает только для непрописанных в DNS поддоменов. Подробнее описано в статье на Wikipedia и RFC 1034. - SPF-записи рекомендуется создавать не только для доменов, но и для почтовых серверов, которые занимаются отправкой писем в интернет. Это необходимо, чтобы пройти HELO/EHLO Test принимающего сервера. Стандартная запись:
mx.example.com. IN TXT «v=spf1 a -all»
. - Если у вас много доменов, которые обслуживаются несколькими основными MX-серверами, то рекомендуется использовать механизм «redirect». Например, основной домен «sample.com» имеет SPF-запись «v=spf1 +a +mx -all», то остальным доменам (sample1.com, sample2.com и т.д.), для упрощения обслуживания, можно прописать запись «v=spf1 redirect=sample.com».
- Если у вас много доменов и много почтовых серверов отправителей, распределенных географически и организационно, то можно использовать механизм «include» и отдельную зону
_spf.sample.com
. Как пример можно посмотреть запись для домена gmail.com –v=spf1 redirect=_spf.google.com
. - Кроме защиты своих доменов рекомендуется защитить свою почтовую систему и пользователей, включив проверку SPF/DKIM/DMARC записей на ваших внешних почтовых серверах. Это будет хорошим дополнением даже для таких мощных программно-аппаратных комплексов, как Cisco IronPort.
- Как только полностью разберетесь с 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
Дополнительные инструменты
- Сброс кэша DNS серверов google: Cache DNS flushing
- Онлайн генератор DKIM ключей и советы по настройке и тестированию: Port25