Постановка задачи: Борьба со спамом продолжается. В этот раз, мы настроим сервис OpenDKIM чтобы проверять входящую и/или подписывать всю нашу исходящую почту цифровой подписью DKIM, что отправитель письма соответствует полю From в заголовках письма. Практика показывает, что это приводит к значительному улушению рейтинга нашего почтового сервера, а также этот механизм, де-факто, любит Google... Также включим механизм SPF, чтобы подсказать другим почтовым серверам, кто есть авторизованный отправитель почты на нашем домене...
Более подробно вы можете прочести на википедии wiki: DomainKeys Identified Mail. Установим пакеты opendkim и opendkim-tools:
server:/# apt-get install opendkim opendkim-tools
Создадим отдельную папку для OpenDKIM и перенесем файл конфигурации в эту папку. Для совместимости, оставим ссылку на прежнем месте.
server:/# mkdir /etc/opendkim server:/# chown opendkim:opendkim /etc/opendkim server:/# mv /etc/opendkim.conf /etc/opendkim/opendkim.conf server:/# ln -s /etc/opendkim/opendkim.conf /etc/opendkim.conf
Отредактируем конфигурацию и добавим необходимые параметры:
server:/# vim /etc/opendkim/opendkim.conf SyslogSuccess yes LogWhy yes Selector mail Canonicalization relaxed/relaxed Mode sv SubDomains no KeyTable file:/etc/opendkim/KeyTable SigningTable file:/etc/opendkim/SigningTable AutoRestart yes DNSTimeout 5 Socket inet:8891@localhost #Socket local:/var/run/opendkim/opendkim.sock ExternalIgnoreList file:/etc/opendkim/TrustedHosts InternalHosts file:/etc/opendkim/TrustedHosts Statistics /var/log/dkim-stats
Создаем необходимые файлы и папки (инвентарь) для нашего почтового сервера, персонально... В дальнейшем, каждого нового клиента будем добавлять аналогичным образом.
server:/# mkdir /etc/opendkim/demon.of.by server:/# chown opendkim:opendkim /etc/opendkim/demon.of.by
Создадим непосредственно ключи для домена demon.of.by а также сменим владельца ключей на пользователя opendkim:
server:/# cd /etc/opendkim/demon.of.by server:/# opendkim-genkey -s mail -d demon.of.by server:/# chown opendkim:opendkim *
Обновляем DNS - настраиваем DKIM. Данная часть наверное наиболее трудоёмкая, так как Вы должны понимать как и где изменить DNS-записи для Вашего домена.
server:/# cat /etc/opendkim/demon.of.by/mail.txt mail._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5yWaifpAyB4cX5SJMpxJeWQJ2UzmoCkFVg0y4jQTE2g1m75vP6Qkd8+rolJAVhxxklPAgB9rYgKv1gGsVR6cnOvt0/m89S6dh8VcnvoXVBBe8fIIGHEbQ/VvHU60O/i1krT9HR6zZ3EV26m27ZRS/zhkFbTOnnF6Gjj3dFyUEDsC9vBli2lmR6DiGxz9LsfxrszcqruJCV/+iF" "TpyIR1LY68MpkXZM/4SBJID+++8gvsNhUk1RFDU8sJgQ0Zei0mUbyyYwc3JASRVvEvl366C3VB1So5IWMsdroFrcq0ugThNKKgByyuG/21epp0fB+GMA5ksepme5Z0W99llpIv8QIDAQAB" ) ; ----- DKIM key mail for demon.of.by
Отсюда берем содержимое в кавычках, объединяем его в одну строчку и помещаем в DNS запись TXT нашего домена:
mail._domainkey.demon.of.by. IN TXT "v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5yWaifpAyB4cX5SJMpxJeWQJ2UzmoCkFVg0y4jQTE2g1m75vP6Qkd8+rolJAVhxxklPAgB9rYgKv1gGsVR6cnOvt0/m89S6dh8VcnvoXVBBe8fIIGHEbQ/VvHU60O/i1krT9HR6zZ3EV26m27ZRS/zhkFbTOnnF6Gjj3dFyUEDsC9vBli2lmR6DiGxz9LsfxrszcqruJCV/+iFTpyIR1LY68MpkXZM/4SBJID+++8gvsNhUk1RFDU8sJgQ0Zei0mUbyyYwc3JASRVvEvl366C3VB1So5IWMsdroFrcq0ugThNKKgByyuG/21epp0fB+GMA5ksepme5Z0W99llpIv8QIDAQAB"
Дополнительно прописываем запись для серверов, у которых не настроен DKIM (для всех клиентов данная директива – одинаковая)
_adsp._domainkey.demon.of.by. IN TXT "dkim=unknown"
Примечание: В данном примере Вы должны заменить домен demon.of.by на Ваш собственный, например example.com
Конфигурируем службу OpenDKIM для обслуживания домена demon.of.by. Добавляем новый ключ в файл с ключами:
server:/# vim /etc/opendkim/KeyTable # 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. mail._domainkey.demon.of.by demon.of.by:mail:/etc/opendkim/demon.of.by/mail.private
Указываем службе каким ключем подписывать почу для какого домена
server:/# vim /etc/opendkim/SigningTable demon.of.by mail._domainkey.demon.of.by
Указываем службе наши доверенные хосты
server:/# vim /etc/opendkim/TrustedHosts # 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 be the first entry in this file. 127.0.0.1 demon.of.by
Не забудем указать на каком порту должен слушать наш OpenDKIM в конфигурационном файле или в /etc/default/opendkim:
server:/# vim /etc/default/opendkim SOCKET="inet:8891@localhost" # By default - listen on loopback on port 8891
В нашем случае это порт 8891.
Дабы не валилось "/var/log/dkim-stats: fopen(): Permission denied" - создадим заблаговременно фаил статистики и выставим ему правильные права
server:/# touch /var/log/dkim-stats && chown opendkim:opendkim /var/log/dkim-stats
Перезапускаем OpenDKIM
server:/# /etc/init.d/opendkim restart Mar 3 15:01:26 ip-10-71-153-106 opendkim[8303]: OpenDKIM Filter v2.6.8 starting (args: -x /etc/opendkim.conf -u opendkim -P /var/run/opendkim/opendkim.pid -p inet:8891@localhost)
Финальный аккорд, добавляем OpenDKIM в Postfix. Для этого отредактируем /etc/postfix/main.cf и добавим следующий строки:
server:/# vim /etc/postfix/main.cf # DKIM milter_default_action = accept milter_protocol = 2 smtpd_milters = inet:localhost:8891 non_smtpd_milters = inet:localhost:8891
Примечание: Если Вы используете несколько обработчиков (например Postfix/DomainKeys), Вы можете добавить несколько одновременно, как показано ниже:
milter_default_action = accept milter_protocol = 2 smtpd_milters = inet:localhost:8891,inet:localhost:8892 non_smtpd_milters = inet:localhost:8891,inet:localhost:8892
Перезапускаем Postfix
server:/# /etc/init.d/postfix restart
Отсылаем письма-пустышки на адреса:
- check-auth@verifier.port25.com
- autorespond+dkim@dk.elandsys.com
Внимательно анализируем ответы.
Комментарии 9
- 1
Алексей — Jan 21, 2016 at 10:41 PM
Огромнейшее спасибо за столь подробные инструкции! DKIM=pass
Владимир — Dec 08, 2015 at 05:56 PM
Почему в заголовках исходящих писем дважды просматривается Dkim-Signature?
Дмитрий Владимирович — Mar 16, 2015 at 03:29 PM
Виталий, к сожалению я не знаю имя вашего почтовика. Не могу проверить DNS. (скиньте его имя на почту).
Если все ок с DKIM, то в первую очередь я бы порекомендовал проверить наличие PTR-записи - на команду nsloolup xx.yy.zz.xx должно отдаваться каноническое имя вашего почтового сервера.
Если все ок - то тогда нужно писать запрос в саппорт.
Виталий — Mar 15, 2015 at 06:40 PM
Добрый день!
тестирую езде, и везде все отлично.
тут https://www.mail-tester.com из 10/10
spf=pass
dkim=pass
но в GMAIL упорно идет в СПАМ ((
Помогите, вдруг, что увидите, пожалуйста.
user — Nov 14, 2014 at 08:37 PM
Спасибо за ответ, Дмитрий Владимирович. :)
Дмитрий Владимирович — Nov 14, 2014 at 11:36 AM
DomainKey это устаревший стандарт, который фактически так и не был принят официально и его поглотил стандарт DKIM в итоге. Делать его поддержку необязательно, так как он тут сохранен только для тех систем, которые еще не переведены на DKIM и используют старый формат DomainKey.
Просто игнорируйте.
user — Nov 13, 2014 at 08:11 PM
==========================================================
Summary of Results
==========================================================
SPF check: pass
DomainKeys check: neutral
DKIM check: pass
Sender-ID check: pass
SpamAssassin check: ham
DomainKeys check: neutral - так и должно быть?
Дмитрий Владимирович — Nov 03, 2014 at 03:10 PM
Rafael, не обязательно но рекомендовано. В принципе это и есть значение по умолчанию.
ADSP (Author Domain Signing Practices) -- указывает как относиться к наличию подписей у почты другим почтовикам, в частности когда указано "dkim=unknown" -- значит "подпись не обязательна". Если поставите "dkim=all" -- значит вся исходящая почта обязана быть подписана DKIM.
Вот и все дела.
Rafael — Oct 20, 2014 at 03:51 PM
Скажите, а обязательно ли прописывать это:
_adsp._domainkey.demon.of.by. IN TXT "dkim=unknown"
и что это дает? Спасибо!