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 

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

    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)

Добавить комментарий для Юрий Отменить ответ

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