VestaCP и pdd.yandex.ru. Отправка писем. DKIM и игнорирование «локальных» ящиков

Столкнулся с 2 проблемами при использовании сервиса PDD от Яндекса с VestaCP.

 

Проблема #1. Использование секретного DKIM ключа от Яндекса.

Описание проблемы: Требуется корректная DKIM подпись для отправки как из почтового интерфейса Яндекса, так и для отправки  с нашего сервера.

Решение:

  1. Получение секретного ключа DKIM
    Получаем токен для управления доменом через
    API: https://pddimp.yandex.ru/api2/admin/get_token
    Далее с помощью токена можно получить секретный ключ DKIM. Подробности тут: https://tech.yandex.ru/pdd/doc/reference/dkim-status-docpage/
    Теперь этот ключ надо подменить в нашей конфигурации Exim для домена.
  2. Установка нового ключа DKIM взамен сгенерированного самой панелью Vesta
    Мы предполагаем, что домен уже добавлен в панели управления (вкладка MAIL) с включенным DKIM.
    Нужно положить(заменить) полученный у Яндекса секретный ключ в файл /etc/exim4/domains/{ВАШ_ДОМЕН}/dkim.pem
  3. Проверяем правильность установки ключа. Для проверки я обычно отправляю письмо на ящик на Яндексе и проверяю наличие флажка
    2016-03-29_16-13-31-b99e34f7bd968318-sPA0P

 

Проблема #2. После создания mail домена у VestaCP все письма, отправленные на ящики вида user@domain падают в локальную почту.

Но так как мы используем PDD от яндекса, нам в большинстве случаев это не требуется, так как интерфейс яндекса в большинстве случаев удобнее и привычнее RoundCube (да и защита от спама посерьезнее).
В нашем случае ящики user@domain создаются для менеджеров, которые с Яндексом хорошо знакомы, поэтому он более предпочтителен.

Решение.
Для решения проблемы потребуется чуть-чуть изменить конфиги Exim. Ранее я использовал не очень красивое решение, но потом нашел решение получше.
В обоих случаях мы будем изменять файл конфига Exim, который располагается по пути /etc/exim4/exim4.conf.template

Решение #1. «В лоб».

Находим в указанном выше файле блок ROUTERS CONFIGURATION и чуть ниже строчки:

dnslookup:
 driver = dnslookup
 domains = !+local_domains
 transport = remote_smtp
 no_more

Правило в строке domains = !+local_domains пропускает все существующие в VestaCP домены (mail домены). Мы можем закомментировать эту строчку для быстрого решения. ВНИМАНИЕ: данное «решение» можно применять  ТОЛЬКО в том случае, если вы не собираетесь использовать внутреннюю локальную почту!

Решение #2.

Находим в указанном выше файле блок ROUTERS CONFIGURATION и перед правилом dnslookup добавляем еще одно:

dnslookup2:
 driver = dnslookup
 transport = remote_smtp
 condition = ${if exists{/etc/exim4/domains/$domain/remote_always}{true}{false}}
 no_more

Теперь мы можем «управлять» поведением. Если требуется, чтобы почта на user@domain «уходила» с сервера на удаленный сервер (в данном случае в яндекс), то надо всего лишь создать пустой файл remote_always в папке /etc/exim4/domains/{ВАШ_ДОМЕН}/

Не забудьте перезагрузить Exim (service exim4 restart).

 

В логах можно увидеть следующее (письмо отправляется на 3 ящика)

2016-03-29 15:56:52 1aktCW-0003J6-E8 <= no-reply@{DOMAIN} U=user P=local S=1018 id=9334fe7094b267139e89cb4005007491@{DOMAIN}
2016-03-29 15:56:53 1aktCW-0003J6-E8 => user_user@yandex.ru R=dnslookup T=remote_smtp H=mx.yandex.ru [213.180.204.89] X=TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256 C="250 2.0.0 Ok: queued on mxfront9j.mail.yandex.net as 1459256213-e8YZDBmRmN-ur1KgWJk"
2016-03-29 15:56:54 1aktCW-0003J6-E8 => manager@{DOMAIN} R=dnslookup2 T=remote_smtp H=mx.yandex.net [93.158.134.89] X=TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256 C="250 2.0.0 Ok: queued on mxfront5m.mail.yandex.net as 1459256214-sJw1dJeXUh-urn0ojhT"
2016-03-29 15:56:54 1aktCW-0003J6-E8 -> tatiana@{DOMAIN} R=dnslookup2 T=remote_smtp H=mx.yandex.net [93.158.134.89] X=TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256 C="250 2.0.0 Ok: queued on mxfront5m.mail.yandex.net as 1459256214-sJw1dJeXUh-urn0ojhT"
2016-03-29 15:56:54 1aktCW-0003J6-E8 Completed

Для ящиков user@domain сработает правило dnslookup2, для остальных dnslookup 

9 Комментарии “VestaCP и pdd.yandex.ru. Отправка писем. DKIM и игнорирование «локальных» ящиков

  1. Добрый день, спасибо за статью застрял на этом моменте.
    Далее с помощью токена можно получить секретный ключ DKIM. Подробности тут: https://tech.yandex.ru/pdd/doc/reference/dkim-status-docpage/

    как все-таки получить ключ, не совсем понимаю как делать запрос. Подскажите.

    1. Для выполнения запроса нужен REST клиент. Я пользуюсь встроенным в IDE. Вам могу предложить на выбор 2 варианта.
      1. Использовать CURL на сервере, если есть. Строка запроса есть в документации под «примером запроса».
      2. REST клиент — расширение для хрома https://chrome.google.com/webstore/detail/dhc-rest-client/aejoelaoggembcahagimdiliamlcdmfm?hl=ru или любое другое по запросу REST.
      Для получения ключа нужно вбить правильно параметры. Установил расширение сейчас, по пунктам:
      а) HTTP поменять на HTTPS
      б) url — pddimp.yandex.ru/api2/admin/dkim/status?domain=domain.com&secretkey=yes
      Меняем домен на ваш
      в) чуть ниже слева под Headers нажимаем плюсик, появится 2 инпута, слева PddToken, справа ваш токен
      г) отправить запрос (Send)

  2. Добрый день.
    Подскажите пожалуйста.
    1. Я хочу использовать движок Opencart и выставить настройки не отправки через функцию PHP, а отправку через mail самого сервера. Просто коряво там работает отправка писем, а точнее один модуль не хочет слать через настройки самого OpenCart письма.
    На одном сервер я вышел из положения настроив MSMTP (SSMTP) на Яндекс почту. И в принципе работает, но получается все домены шлют с одного и того же адреса письма в таком случае (и казалось бы в MSMTP / SSMTP есть настройка, которая должна это предотвращать или типо того, но там чет не пашет).
    В общем все это время меня не покидает мысль настроить по нормально сервер VestaCP, чтобы и Cron и письма из самой системы и с сайтов можно было бы настроить на работу с Яндекс почтой.

    2. Сейчас поднял новый сервер с VestaCP, но exim параметр при установке выбрал «NO». В системе все равно он присутствует.

    Вопрос.
    Данная инструкция подойдет для моей задачи? Просто в голове никак не могу картинку правильную сложить … какая должна быть правильная схема в моем случае, если поднимать почтовый сервер мне по факту не нужно локально, я использую только Яндекс почту? Т. е. мне нужно как-то скармливать exim логин, пароль от яндекса в зависимости от разных доменов и отправлять почту через яндекс почту.

    P. S. извините за длинный текст 🙂

  3. Чисто теоретически.
    Допустим в SPF я добавлю свой сервак вместе с яндексовскими.
    DKIM приватный ключ получу и подсуну своему хостингу.
    Но вот у меня с PTR загвоздка. Я не смогу своему серваку зарегистрировать PTR запись у провайдера. Тут как бы проблема не с технической стороны.
    Как мне быть в моем случае? Можно как-то exim настроить или остается только MSMTP / SSMTP?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *