Компания
297,94
рейтинг
7 августа 2013 в 12:37

Разработка → DKIM в Яндекс.Почте для доменов — как развивается безопасность электронной почты

Недавно и в Яндекс.Почте для доменов у писем появилась цифровая подпись DKIM — DomainKeys Identified Mail.

DKIM — это технология, которая удостоверяет подлинность отправителя письма с помощью добавления цифровой подписи, связанной с именем домена. По статистике Яндекс.Спамообороны, в настоящее время уже половина приходящих на сервера Яндекс.Почты писем содержат верную цифровую подпись. И постепенно их становится всё больше — два года назад такие письма составляли 35% ото всех.

В Яндекс.Почте цифровая подпись служит для борьбы со спамом и фишингом. До появления DKIM одним из факторов, с помощью которых Спамооборона понимала нежелательность письма, была верификация отправителя при помощи SPF — Sender Policy Framefork, над которым за время его существования успело поработать множество рабочих групп, включая рабочую группу MARID в IETF.

Для того чтобы определить подлинность письма, DKIM весьма элегантно использует современные криптографические достижения. Под катом — о том, как реализована DKIM в Почте для доменов, какие недостатки есть у SPF и почему, несмотря на них, мы продолжим использовать обе технологии.

Для формирования и проверки подписи DKIM используется классическая асимметричная криптографическая схема проверки электронной цифровой подписи.

Закрытая часть доменного ключа размещается на сервере и применяется для формирования цифровой подписи. В неё при этом может включаться не только само тело письма, но и некоторые заголовки. Сама подпись также добавляется к письму в виде заголовка.

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru;
	s=mail; t=1369929893;
	bh=1W1A4HZDXIEhbsNkODdvI9WBtkyimVpsrgS/eXcB4yo=;
	h=From:To:Subject:Date;
	b=JjGcbyC2qfrH4Fs8IsyvOOoxHt7hc5GYdESJ7RCoiBo899c/pvSXu2sCA30HvHGi/
x4v06f8bq6vOxDptBQ+8xZkbWoZbQ1EQOH0Q5Ntl9QnwFVUY9E18ZxG2xlTEFqbhNm
	 aJcsWkHPWIIg+vfHfwmJMFsaSwuEeioBvDUPTbeg=


Открытая часть ключа загружается в виде TXT-записи в DNS-зону домена и служит для проверки сгенерированной подписи. Её результат может использоваться, когда примается решение о дальнейшей судьбе письма: невалидная подпись говорит о том, что оно либо было отправлено с другого домена, либо было изменено в процессе пересылки. В любом случае это тревожный знак.

Валидная подпись позволяет гарантировать соответствие домена-отправителя и домена, указанного в письме, и, таким образом, формировать репутацию доменов в интернете. В общем случае включение DKIM на домене позволяет улучшить «доставляемость» писем.



Мы постарались сделать так, чтобы включение DKIM происходило с минимальным участием администратора. Для доменов, делегированных на Яндекс, DKIM включается автоматически. Для всех остальных достаточно добавить соответствующую TXT запись с открытым ключом в DNS зону.

На стороне Яндекс.Почты при подтверждении нового домена для него сразу же создается пара ключей, необходимых для формирования DKIM подписи. Если домен делегирован на DNS сервера Яндекса, то в зоне автоматически создается TXT-запись, содержащая открытый ключ. Если домен делегирован на другие сервера, в интерфейсе его администратора отображается подсказка с текстом записи, которую необходимо добавить в зону домена.

При очередной проверке статуса домена, которые происходят каждый час, сервера ПДД получают информацию о наличии в зоне записи о DKIM, либо о том, что существовавшая запись из зоны пропала. Список этих изменений распространяется на кластер отправки писем вместе с закрытыми ключами. После распространения новые домены начинают подписываться DKIM подписью так же, как это происходит со всеми письмами Яндекс.Почты.

Большинство современных систем антиспама срабатывают по репутационным критериям и критериям массовости. Например, сервис Яндекса Спамооборона-1024 (бесплатное решение для фильтрации корпоративной почты от спама), который прекращает свою работу с 1 сентября этого года, использует такие критерии. Довольно удобно иметь гарантию того, что письмо было отправлено именно с указанного домена.

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

Этот механизм имеет один большой недостаток: в случае пересылки (Forward) письма с сервера на сервер проверка SPF на принимающей стороне завершится неудачно. Кроме того, SPF не позволяет однозначно сказать, было ли письмо отправлено с указанного в нем домена. DKIM решает эту проблему, добавляя криптографическую подпись на тело письма и заголовки.

Тем не менее, возможны ситуации, когда часть хороших писем от домена приходит вовсе без подписи, то есть, ориентироваться только на DKIM не получится, равно как и выстраивать репутацию для таких доменов.

В будущем, вероятно, помимо SPF и DKIM более широкое распространение получит сравнительно новая технология DMARC — Domain-based Message Authentication, Reporting & Conformance, которая объединяет в себе не только средства проверки происхождения письма, но и средства обмена информацией о спаме между почтовыми системами. Яндекс.Почта уже более года использует DMARC в качестве дополнительной защиты ящиков от спама и фишинга.
Автор: @vsadm
Яндекс
рейтинг 297,94

Комментарии (79)

  • +3
    Кстати, только у Яндекса видел специальный значок для верных цифровых подписей DKIM — очень удобная вещь. Спасибо за это! :-)

    Было бы ещё интересно почитать про DMARC (знаю, он у вас тоже есть).
    • +3
      Да, DMARC у нас есть. В целом мы активно участвуем в разных рабочих группах по улучшению взаимодействия между почтовыми системами и защите от спама и прочей гадости. Подумаем, чтобы написать про это более подробно.
      • –4
        Да, пожалуйста, подумайте, что бы написать про это более подробно.
      • 0
        Кстати, а как обстоит дело с FBL (Feedback loop) в Yandex-почте? Используете эту технологию?
        А то судя по комментарию годичной давности — тогда ещё пока е' у вас не было.
    • 0
      только у Яндекса видел специальный значок для верных цифровых подписей DKIM


      Gmail тоже показывает:
      image
      • +1
        Ага, но только после клика в нужном месте ;-)
        • 0
          Это уже детали, главное, функциональность есть, а кому её надо отображать значком — ну, поставит юзерскрипт.
          • +5
            Для UI эти детали на первом месте. Это удобство для пользователи и информативность интерфейса.
            Функционал такой есть у всех. Но у Яндекса он реализован ИМХО лучше других.
            Ведь вы не готовы смотреть заголовки каждого сообщения для определения его достоверности, верно же?
            • –2
              Ну, мне как-то и не надо проверять достоверность каждого сообщения, а для тех, которые надо — я обязательно посмотрю ВСЕ заголовки.
              • +1
                Ещё раз — смотрите первый абзац моего ответа)

                Дело не в том, что у кого-то нету возможно проверить достоверность сообщения, а в том, что Яндекс показывает это сразу без необходимости что-то кликать.
                • –2
                  А если бы он сразу без необходимости кликать показывал погоду на Марсе — тоже было бы клёво? Дай Бог один юзер из сотни понимает к чему этот значок, а интерфейс загромождает всем.
                  • +5
                    1. Информация о достоверности письма — важная и нужная (особенно для не очень опытных пользователей"), в отличии от погоды на других объектах Солнечной системы!

                    2. Посмотрите внимательно на скриншот (либо откройте Яндекс-почту, если таковая имеется) и откройте для себя, что значёк занимает не нужное, функциональное пространство, а то место, что у других почтовых провайдеров просто пустует без дела.

                    image
                    • 0
                      Да ладно, пусть себе будет. Меня просто позабавила мысль о том, что дизайнерское решение рисовать значок кем-то воспринимается как «у яндекса эта фича есть, а у других — нет». Одно дело наличие\отсутствие фичи, другое дело её визуальное оформление.
                      • 0
                        Одного позабавило, а миллионам других пользователей поможет понятнее и эффективнее работать с почтой.
                        Значок очень классный, я бы сказал, гениальный с точки зрения UI.

                        Кроме того, если уж брать аналогии, то попасть из точки А в точку В вы можете как на Мерседесе, так и на ВАЗ-2101 (одинаковый функционал, правда ведь?). Интерфейс не менее важен, чем функциональность для любого приложения. А DKIM давно уже поддерживается всеми основными почтовыми провайдерами, и не является такой уже и фичей.
                  • +13
                    А если бы он сразу без необходимости кликать показывал погоду на Марсе — тоже было бы клёво?

                    Показывает же!

                    image
            • 0
              У gmail сейчас если подписанное DKIM письмо не прошло проверку, оно попадает в спам.
    • 0
      про DMARC полгода назад mail.ru хорошо написал — если интересно, читайте тут. В посте есть и схема — очень наглядно.
  • +1
    DKIM — безусловно хорошо. Но почините лучше Я.Деньги уже
    • +4
      А что у Вас не работает в Яндекс.Деньгах? Давайте обсудим.
      • 0
        Только я было сел поудобнее для обсуждения, как обнаружил, что уже заработало. Спасибо )
        • +3
          Мы ничего не делали :) Если что, пишите!
          • +9
            *Добавил Kirby в закладки браузера с заголовком «Починить Яндекс.Деньги»
      • 0
        Например, при включенном AdBlock Яндекс.Деньги не дают сделать оплату, потому что после ввода платежного пароля тебе говорят, что счет заблокирован, т.к. ты воспользовался новым устройством. Получаешь SMS, вводишь код разблокировки, пытаешься отправить снова, рекурсия.
        • 0
          Это защита от мошенничества (захода с незнакомых устройств), вероятно, AdBlock каким-то образом Вас анонимизирует :)
          Во-первых, в самое ближайшее время Яндекс.Деньги немного изменят настройки, и проблема, скорее всего, решится сама собой. Во-вторых, если Вам удобно получать SMS, и Вы хотите заодно получше защитить счёт, лучше перейти на бесплатные SMS-пароли — если у пользователя включена усиленная авторизация, эта защита с подтверждением по SMS не включается. Предполагается, что Ваш счёт и так неплохо защищён.
          • –5
            AdBlock не анонимизирует, AdBlock режет рекламу и это не должно влиять на работу такой системы как Яндекс.Деньги. Это работает в Chrome + AdBlock, можете проверить сами. Комбинация такая стоит не у такого уж маленького количества людей, но не все могут догадаться с чем связано такое неадекватное поведение системы. Я-то это уже пофиксил, отключив AdBlock на домене Яндекс.Денег, тем не менее вам стоит этот баг рассмотреть и принять какие-то меры по его устранению, имхо.
            • 0
              А Вы не могли бы написать всё про браузер и версию AdBlock'а?
              • 0
                AdBlock v2.6.4, Chrome 28.0.1500.95, хотя последний раз я проверял это на 26 или 27 версии, это было месяц/два назад.

                Кроме AdBlock'а стоят также (вдруг важно):
                Awesome Screenshot: Capture & Annotate 3.4.4
                Disconnect 5.6.0
                Discover DevTools Companion 0.2.13
                Evernote Web Clipper 5.9.19
                Image Properties Context Menu 0.7.6
                Magic Actions for YouTube™ 6.0.3
                Vimium 1.43
                Web Developer 0.4.3
                YouTube HQ Thumb 1.3.4
                • 0
                  Может быть Disconnect виноват?
                  • 0
                    Тогда бы все заработало после отключения Disconnect :) А начинает работать именно после отключения AdBlock, Disconnect при этом не мешает никак.
  • 0
    в случае пересылки (Forward) письма с сервера на сервер проверка SPF на принимающей стороне завершится неудачно

    Подозреваю, что в наше время случаи пересылки крайне редки.
    • 0
      Не совсем так. Их, конечно, мало в процентном отношении, но в абсолютных числах все равно получается довольно много.
  • +1
    Спамооборона-1024 1 сентября всё? Понятно что от коробочной версии вы отказались, но оставьте хотя бы платный сервис, ну пожалуйста.
  • 0
    Я тут как-то планировал сделать нормальный сервис для проверки SPF и DKIM, с объяснениями, зачем это нужно и как настроить, но что-то забросил. Часто, в SPF ставят на -all, а ~all, что, я считаю, не всегда верно. Сейчас работает только spf.valdikss.org.ru/
    • +1
      Gmail почему-то игнорирует -all и помещает письмо отправленное с постороннего IP-адреса во входящие даже не помечая.
  • 0
    Насколько я понял, ПДД выдаёт TXT-запись, которая является публичным ключом. А даст ли сервис закрытый ключ, если я захочу с него уйти?
    • +3
      Сгенерируйте новый, делов то.
      • 0
        Разве не получится в таком случае ситуации, что старые, отправленные ещё с серверов «Яндекса» письма будут вызывать предупреждения о несоответствии подписи?
        • +1
          Вообще не получится. Подпись DKIM проверяется в момент получения и дальше сервер следует ранее принятому решению.
    • +2
      По запросу мы отдаем закрытый ключ, конечно же. Это бывает нужно еще и в том случае, если Вы хотите отправлять почту не только с серверов Яндекса.
      • 0
        Про отправку почту «не только с серверов яндекса» — это вы, простите за выражение, загнули немного: в dkim можно много прописывать селекторов, к которым привязывается подпись (у вас селектор s=mail почему-то вместо s=yandex, кстати — возможно, когда делали, не до конца вникли, зачем нужны селекторы). Нужен еще один сервер отправки — нет проблем: он просто подписываетс другим селектором. Так что отдача приватногот ключа с технической точки зрения не нужна (гугл его и не отдает, например, и селектор у него s=google).
        • 0
          спасибо
        • 0
          Можно так, можно иначе. В целом, конечно, закрытый ключ вряд ли пригодится администратору домена, но мы не делаем из него тайны и можем его отдать, если зачем-то будет нужно.
      • 0
        По запросу мы отдаем...

        А принять по запросу можете?
        К примеру если я делаю рассылку через Amazon SES как можно правильно настроить dkim на обоих системах?
        • 0
          Как выше уже посоветовали, можно использовать селекторы. В принципе, можем и принять ключ, если это зачем-то нужно.
    • 0
      Дело даже не в уходе. Ситуация — почту надо отправлять с другого хоста и хочется иметь DKIM. Неделю назад обратился в поддержку Яндекс.Почты, обещали помочь с закрытыми ключами (доменов несколько).
      Для одного домена пришлось сгенерировать новый (опять же учтите ограничение записи в 256 символов!)
  • 0
    Не в тему, но совсем немного: IPv6 не внедряете в почту для доменов тоже из-за безопасности (неизученности протокола в частности и реальной ситуации с ним в общем)?
    $ dig -t AAAA mx.yandex.ru +short $
    • +3
      Постепенно будет поддержка IPv6. Следите за новостями.
  • 0
    А если используем свой почтовый сервер для отправки почты и на нем уже настроен dkim? Как настроить dkim для отправки писем и через интерфейс яндекса? (выше ответили)

    upd: Куда написать для получения закрытого ключа?
    • +2
      В службу помощи или на pdd@yandex-team.ru
    • +1
      Выше я написал про селекторы, приватный ключ от яндекса не должен быть нужен.
  • 0
    Можно ли сделать, чтобы при отправке через SMTP тоже была валидная подпись? Это не критично, но если возможно, то хорошо.

    И ещё вопрос, не уверен что по адресу, но тоже про яндекс почту. Я пользуюсь списками рассылки (mailing list), и письма, отправленные в них, находятся в собственно «Отправленных», а также во «Входящих», т.к. копия приходит обратно, причём они идентичны. Если создана папка для этого списка рассылки с соответствующим правилом («кому» = адрес рассылки), то эти письма в ней дублируются. Можно ли как-то этого избежать? Например, gmail показывает только одно такое письмо.
    • 0
      У меня отправленные через SMTP письма получают DKIM-подпись.
      image
    • 0
      Если не сложно, напишите побольше подробностей в нашу службу помощи.
  • 0
    Добрый день!

    Подскажите как подключить DKIM для домена, если он не делигрован на яндекс?

    Есть ли возможность прописать собственный секретный ключ, если у нас почта рассылается одновременно и с собственного сервера и через почту для домена?

    Для уведомлений с сайта у нас заведен поддомен, но сотрудникам в некоторых случаях удобнее высылать письма напрямую из CRM системы не заходя в почту. В данный момент такое письмо просто отправляется нашим сервером и оно уходит подписанное DKIM. Можно ли передать яндекс.почте для домена секретный ключ чтобы там тоже письма отправлялись подписанные?
    • 0
      Вы можете использовать 2 подписи, указал разные селекторы (например mail и mail2). Подпись яндекса видна в правой нижней части панели «почта для домена».
      • 0
        Да, точно, использовать другой селектор вариант.
        Подпись не вижу:
        Скрытый текст

    • +1
      Можно и секретный ключ ваш положить, напишите в службу помощи — поможем.
  • +5
    Яндекс тут хорошо сработали: год назад сами мне написали что желательно включить для нашего домена DKIM и отписаться когда всё сделаем. Я сделал, отписался, и живой человек ответил мне с благодарностью на e-mail.

    А вот пробиться в поддержку гугла и попросить объяснить почему письма с регистрацией на форум попадают в спам — почти нерешаемая задача.

    Не реклама, просто мысли вслух.
  • 0
    О, теперь можно будет и на Яндексе проверять подлинность писем со взломанных ящиков.
    • 0
      Это и раньше можно было делать. А вот с ПДД доставляемость улучшилась немного.
  • 0
    dkim на прошлой неделе подключал, впечатляет, спасибо! Вопрос есть по «иконкам», для большинства сервисов они от яндекса, а вот для своих ящиков, как понимаю, они с gravatar цепляются, правильно?
    • 0
      Если речь идёт об обычных пользовательских ящиках, то портрет берётся либо из настроек, либо из сети. Год назад мы писали о том, как Яндекс.Почта извлекает информацию об отправителях из социальных сетей и разных хранилищ портретов. Среди таких мест есть и Gravatar.

      Но если речь идёт о различных рассылках, то иконки таким письмам присваиваются в зависимости от типа рассылки, персональных иконок крайне мало. Тип письма определяется автоматическими алгоритмами Спамообороны в процессе проверки на спам по совокупности признаков в тексте. Об этом мы тоже рассказывали недавно в отдельном посте.
  • 0
    А не собираетесь ли вы убрать x-originating-ip из заголовков писем на яндексе и доменах?
    Современные системы фильтрации спама, по-моему, в этом уже не нуждаются.
    В gmail таких заголовков очень давно нет, если отправлять письма через браузер, однако ж в Google Apps for Domain еще есть почему-то.
  • 0
    Тем, кто использует Google Apps (GMail) на своём домене, нужно озаботиться настройкой DKIM полусамостоятельно, следуя инструкциям.
    • 0
      Вот ведь, а!
      Сижу настраиваю DKIM + exim на всех своих серверах и доменах, обновляю ключи, пробую разную длину, играю с NS записями. Тестирую на yandex, (удобно видеть сразу зеленый значок). Дай думаю отвлекусь, хабр почитаю… А тут опять DKIM o_O ) День DKIM какой-то прям.
      А вообще не помню точно, но точно еще год назад озадачился этим вопросом на своих серверах, и у вас уже был зеленый значок в ответ на корректный DKIM.

      Вопрос Яндекс
      Вот тока интересует вопрос. В одном и том же случае, при некорректном DKIM yandex выдавал dkim=neutral, а гугл и yahoo =fail (bad_format).
      Не могли бы вы написать, в каком случае вы ставите письмам =neutral?
  • 0
    И плохая, имхо, идея — использовать селектор по-умолчанию mail._domainkey.
    Я так подозреваю, очень многие не утруждают себя сменой селектора из копипаста с мануалов, и у многих NS уже будет такой селектор. От недостаточного понимания вопроса, многие просто добавят или перезатрут запись с ключом и у них откажет свой родной DKIM.
  • +1
    Скажите, а как управлять серой иконкой по типу favicon у письма? Такие иконки почему--то есть у твиттера, фэйсбука, вк и у некоторых других популярных сервисов.
    • +1
      Персональные иконки есть только в нескольких самых крупных честных рассыльщиков уведомлений. Для присвоения иконок другим рассылкам Яндекс.Почта использует алгоритмы Спамообороны и технологию «Маркер», которая по различным признакам определяет тип рассылки (социальная сеть, скидочный сервис, авиабилеты и т.п.) и присваивает соответствующую типу иконку. Если Вашей рассылке не присвоена иконка, сообщите об этом в службу поддержки по адресу mail@support.yandex.ru, прислав примеры писем, отправляемых Вашим сервисом, в виде eml-файлов.
  • 0
    Супер. Особенно понравилась иконка — хорошее решение, ИМХО.

    Для тех, кто пользуется Thunderbird, есть расширение «DKIM Verifier», позволяющее автоматически проверять подписи приходящих доменов.

    Среди самой недавней корреспонденции, DKIM есть у m.bn.com, paypal, steam, Humble Bundle, Facebook.
    Удивило отсутствие его у Украинского Альфа-Банка и ODesk.
  • 0
    Коллеги, кто хорошо разобрался с DKIM, помогите настроить для домена на PDD от Яндекс?
    • 0
      Здравствуйте! DKIM настраивается достаточно легко по инструкции на странице help.yandex.ru/pdd/additional/dkim.xml — нужно либо делегировать домен на DNS Яндекса, либо создать на друих DNS, на которые домен делегирован сейчас, TXT запись с содержимым, генерируемым в панели управления доменом.
      • 0
        Решилась проблема, обращением в суппорт.

        Есть один ещё вопрос: для каждого сервиса рассылки (epochta/mailchimp/unisender) нужно подписывать письма DKIM?
        • 0
          Каждый отправляющий сервер ставит DKIM самостоятельно в момент отправки письма. Соответственно, при отправке писем со сторонних сервисов нужно договариваться с их системными администраторами о настройке отправляющих серверов.
      • 0
        Вчера пробовал настраивать DKIM с вашим ключом — не получилось. Сегодня решил попробовать еще раз, но ключа в указанном разделе уже нету. Даже упоминания о DKIM нету. Вы прекратили поддержку цифровой подписи?
        • 0
          Поддержка не прекращена, все письма, отправляемые с серверов Яндекса, подписываются DKIM. Увидеть значение нужной записи можно на странице управления доменом pdd.yandex.ru/domain/ИМЯ_ДОМЕНА в правом нижнем углу под ссылкой «Показать содержимое записи».
  • 0
    Василий, вопрос к вам по DKIM.
    Хочу подключить «Почтовый офис» Яндекса.
    Исходные данные:
    MX — Google — входящая почта вся через них
    SMTP — Google, Amazon, Timeweb и Яндекс планируется
    SPF настроен: v=spf1 include:amazonses.com ip4:92.53.116.0/22 ip4:92.53.96.0/22 ip4:92.53.112.0/22 ip4:92.53.104.0/22 include:_spf.google.com include:_spf.yandex.ru ~all
    Нужно DKIM настроить, но не понятно, как правильно записывать несколько ключей DKIM?
    Создавать несколько поддоменов и для каждого делать TXT запись в DNS?
    В одном поддомене делать несколько TXT записей?
    TXT записи с SPF отдельно должны быть или вместе с DKIM писать?
    • 0
      Главное, чтобы сервер, который подписывает письма, в самой подписи указывал тот же поддомен, на котором Вы создадите TXT с ключом. Соответственно, Вам надо подстраиваться под каждую систему, которой Вы пользуетесь для отправки. И если у какой-то из них поддомен для DKIM в требованиях будет совпадать с другой системой, одна из них не будет работать (на Ваш выбор).
      А вообще спамить через Яндекс — плохо :)
      • 0
        Вы не поняли вопроса, ну это уже и не актуально — все настроено и работает.
        Спамить вообще плохо, а через яндекс и не возможно, т.к. его нельзя использовать в качестве smtp только, нужно еще и почту на него переносить в этом случае, т.е. MX на него должна указывать.
        Не ясно, при чем тут вообще спам, вопрос не об этом был.
        • 0
          В Вашем комментарии пишется, что Вы собирались использовать SMTP Яндекса, а ещё ниже в SPF делается include:_spf.yandex.ru, поэтому я и подумал, что Вы собираетесь, как и написали, использовать серверы Яндекса для отправки писем.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разработка