DKIM, SPF и PTR: как настроить почту чтобы не попасть в спам

DKIM, SPF и PTR: как настроить почту чтобы не попасть в спам

В статье рассказывается что такое DKIM, SPF и PTR и как с их помощью уменьшить вероятность попадания ваших писем в спам. Это может пригодится администраторам, которые настраивают свои почтовые сервера\сервисы или рассылки с сайта.

При получении какого-либо письма почтовый сервер-получатель проводит ряд проверок. Чем больше проверок будет пройдено с положительным результатом, тем меньше вероятность того, что письмо попадет в папку "Спам".

PTR запись

PTR запись - это обратная запись, которая связывает IP адрес с именем домена. Например если в консоли ввести команду "ping google-public-dns-a.google.com", то можно увидеть, что запросы посылаются к IP 8.8.8.8, это прописано в A-записи. Если же ввести команду "ping -a 8.8.8.8" то увидим что 8.8.8.8 преобразуется в "google-public-dns-a.google.com". Именно за это и отвечает PTR запись - обратно преобразовывает IP адрес в доменное имя.

В целях борьбы со спамом многие серверы-получатели почты проверяют наличие PTR записи для хоста, с которого происходит отправка и если видят не соответствие, то с высокой вероятностью помечают это письмо как спам. То есть IP адрес имени хоста (хост этим именем представляется), который постучался к серверу-получателю на "почтовый" порт для передачи письма, должен преобразоваться в это имя.

in-addr.arpa — специальная доменная зона, для определения имени хоста по его IPv4-адресу, используя PTR-запись. Адрес хоста AAA.BBB.CCC.DDD транслируется в обратной нотации и превращается в DDD.CCC.BBB.AAA.in-addr.arpa. Благодаря иерархической модели управления именами появляется возможность делегировать управление зоной владельцу диапазона IP-адресов. Для этого в записях авторитативного DNS-сервера указывают, что за зону CCC.BBB.AAA.in-addr.arpa (то есть за сеть AAA.BBB.CCC/24) отвечает отдельный сервер.

Итак подытожим, для прохождения проверки на PTR запись у нас должны быть две записи:

  • A-запись которая говорит что, например, mailserver.elims.org.ua это ip 1.2.3.4
  • PTR запись которая говорит что, например, 1.2.3.4 это mailserver.elims.org.ua

Если письма из Вашей организации посылаются через чужие почтовые сервера, то Вам ничего настраивать не нужно, нужно лишь проверить что PTR корректно настроена и попросить администраторов этих чужих серверов почтовых серверов (а значит и доменных зон) настроить PTR запись, если она не корректна.

Если же у Вас в локальной сети есть свой почтовый сервер, то для своей доменной зоны прописываем A-запись на IP-адрес, под которым будет виден Ваш почтовый сервер в интернете и просим чтобы Ваш провайдер прописал у себя соответствующую PTR-запись.

Посмотреть PTR через команду:

  • nslookup: nslookup -type=PTR 46.4.26.19
  • dig: dig -x 46.4.26.19

Ссылка по теме: PTR записи

SPF запись

SPF позволяет владельцу домена указать в TXT-записи домена специальным образом сформированную строку, указывающую список серверов, имеющих право отправлять email-сообщения с обратными адресами в этом домене. Если проще: в этой записи мы сообщаем с каких почтовых серверов можно посылать письма от имени сотрудников\сервисов нашей компании.

В SPF записях можно использовать следующие опции:

  • "v=spf1" - версия SPF.
  • "+" - принимать письма (Pass). Этот параметр установлен по умолчанию. Тоесть, если никаких параметров не установлено, то это "Pass";
  • "-" - Отклонить (Fail);
  • "~" - "мягкое" отклонение (SoftFail). Письмо будет принято, но будет помечено как СПАМ;
  • "?" - нейтральное отношение;
  • "mx" - включает в себя все адреса серверов, указанные в MX-записях домена;
  • "ip4" - опция позволяет указать конкретный IP-адрес или сеть адресов;
  • "a" - IP-адрес в A-записи
  • "include" - включает в себя хосты, разрешенные SPF-записью указанного домена;
  • "all" - все остальные сервера, не перечисленные в SPF-записи.
  • "ptr" - проверяет PTR-запись IP-адреса отправителя. Если она сходится с указанным доменом, то механизм проверки выдает положительный результат. Тоесть, разрешено отправлять всем IP-адресам, PTR-запись которых направлены на указанный домен.
  • "exists" - выполняется проверка, резолвится ли домен на какой-либо IP-адрес. Тоесть, по существу, выполняется проверка работоспособности доменного имени. Не имеет значения, на какой IP-адрес, даже если это "серые" сети (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) или loopback (127.0.0.1).
  • "redirect" - указывает получателю, что нужно проверять SPF-запись указаного домена, вместо текущего домена.

Простой пример SPF-записи:

elims.org.ua. IN TXT "v=spf1 +a +mx -all"

Расшифровываем:

  • "+a" - разрешает прием писем от хоста, IP-адрес которого указан в A-записи для elims.org.ua;
  • "+mx" -  разрешает прием писем, если отправляющий хост указан в одной из MX-записей для elims.org.ua;
  • "-all" - все остальные письма не принимать.

Еще один пример:

elims.org.ua. IN TXT "v=spf1 ip4:124.31.25.75 mx/24 a:test.com.ua/24 +a:smtp.mail.ru include:gmail.com ~all"

Расшифровываем:

  • "ip4:124.31.25.75" - принимать письма, отправленные с IP-адреса 124.31.25.75;
  • mx/24" - в список разрешенных отправителей входят все IP-адреса, находящихся в тех же сетях класса С, что и MX-ы домена
  • "a:test.com.ua/24" - в список разрешенных отправителей входят все IP-адреса, находящихся в тех же сетях класса С, что и А-записи домена test.com.ua;
  • "+a:smtp.mail.ru" - то же, что и a:smtp.mail.ru. Принимать от smtp.mail.ru;
  • "include:gmail.com" - принимать письма с серверов, разрешенных SPF-записями gmail.com;
  • "~all" - принимать письма со всех остальных серверов, но помечать их как СПАМ
elims.com. IN TXT "v=spf1 redirect:elims.org.ua ~all"

Расшифровываем: для домена elims.com. следовать тем же инструкциям которые описаны в spf для домена elims.org.ua

DKIM

DomainKeys Identified Mail (DKIM)  — для определения отправителя письма в него добавляется цифровая подпись, которую можно проверить открытым ключем шифрования указанным в текстовой записи домена.

Для работы с DKIM нужно выполнение следующих пунктов:

  • Поддержка DKIM почтовым сервером для подписывания отправляемой почты - например бесплатный почтовый сервер под windows hMailServer;
  • Создание приватного и публичного ключа шифрования
  • Занесение в DNS домена записей связанных с DKIM

Создание приватного и публичного ключа шифрования

Генерация приватного ключа при помощи утилиты openssl:

openssl.exe genrsa -out tstpriv.pem 1024

Генерация публичного ключа из приватного ключа при помощи утилиты openssl:

openssl.exe rsa -pubout -in tstpriv.pem -out tstpub.pem

Занесение в DNS домена записей связанных с DKIM

Прописываем эту запись:

_domainkey.example.com. TXT "t=s; o=~;"

Прописываем публичный ключ:

ТутПишитеЧтоХотите._domainkey.example.com. TXT "k=rsa\; t=s\; p=MIGfMA0GCSqGSIb3DQEBAQUAИЕЩЕМНОГОБУКВ"

Где:

  • ТутПишитеЧтоХотите - так называемый domain selector, которых может быть несколько, например для каждого почтового сервера, если их у Вас несколько
  • p= - публичный ключ

Не обязательная запись, которая говорит что делать с не подписанными письмами:

_adsp._domainkey.example.com. TXT "dkim=all"

"dkim=" может принимать следующие значения:

  • all - отправка неподписанных сообщений запрещена
  • discardable - все неподписанные сообщения должны быть заблокированы на стороне получателя
  • unknown - отправка неподписанных сообщений разрешена (значение по умолчанию)

Используемые источники и полезные ссылки:

  • SPF Policy Tester - проверка spf: указываете почтовый адрес с которого хотите отправлять и ip-адрес почтового сервера. Если все хорошо, то внизу теста должна быть зеленная надпись PASS
  • muff.kiev.ua - статья "SPF-запись - проверяем валидность отправителя"
  • habrahabr.ru - DKIM — это просто
  • wikipedia.org - DomainKeys Identified Mail
Понравилось? =) Поделись с друзьями:

Обсуждение записи “DKIM, SPF и PTR: как настроить почту чтобы не попасть в спам”

  1. Yaromax says:

    Осенью 2015 наткнулся на DKIM — перестали уходить письма на некоторые адреса, пришлось обновить почтовый сервер и подписать доменное имя.

  2. Владимир Демянович (elims.org.ua) says:

    Полезный навык =)

Обсудить