Технология DKIM для почтового сервера

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


Если вам интересна тематика почтовых серверов, рекомендую обратиться к соответствующей рубрике на моем блоге — Mail Servers.


Технология DKIM для почтового сервера

Эта статья лишь кратко освещает некоторые нюансы технологии DKIM. Если вы хотите получить более подробную информацию из первоисточника, обратитесь к RFC 6376.

Рекомендую к прочтению перечень статей ниже:

Начинаем разбираться с DKIM.

Введение

DKIM — DomainKeys Identified Mail — технология, позволяющая обнаружить подделку сообщений и, таким образом, защититься от спуфинга. Но обо всем по порядку.

Дело в том, что заголовки сообщений достаточно легко подделываются, а базовые технологии электронной почты не предоставляют никакого механизма проверки подлинности отправителя.

Именно этот пробел призвано устранить внедрение DKIM путем гарантии того, что тело письма и некоторые его критически важные заголовки не были изменены или подделаны третьей стороной.

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

А теперь подробнее о самих заголовках.

Заголовки сообщения

Они бывают двух типов — заголовки самого сообщения и заголовки конверта.

Заголовки сообщения устанавливает его автор (вернее программа, в которой он пишет письмо), например:

С точки зрения передачи сообщения серверу-получателю эти заголовки не имеют никакого смысла и во время передачи не используются (как так, спросите вы? А вот…). Важны лишь заголовки MAIL FROM и RCPT TO (и другие), которые сервер-отправитель объявляет серверу-получателю во время SMTP-сессии, но для пользователя они скрыты. Эти заголовки называются заголовками конверта. Впоследствии, во время цикла передачи сообщения между серверами, информация внутри этих заголовков «замаскируется» в заголовках Received, которых обычно имеется по несколько штук в каждом сообщении (они показывают всю цепочку движения сообщения):

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

Более того, заголовок MAIL FROM (его другие название — Return-Path или Envelope From) может вообще содержать адрес, отличный от содержимого заголовка From. В некоторых случаях это не будет являться признаком недобросовестных отправителей (например когда отчет о недоставке сообщения нужно отправить на другой адрес 1 или когда используется переадресация).

Вот такая интересная ситуация. Неудивительно, что для устранения такого «беспорядка» понадобился отдельный стандарт — DKIM, о котором пришло время рассказать подробнее.

Базовые понятия

В основе DKIM лежит ассиметричный алгоритм шифрования RSA 2. Сообщения подписываются закрытым ключом, который хранится у отправляющего (подписывающего) сервера, а открытый публикуется в TXT-записи на серверах DNS. Для извлечения открытого ключа из публичной записи необходимо «собрать» доменное имя. Оно состоит из вашего домена, обязательной части технологии DKIM — _domainkey — и имени селектора:

Как только доменное имя получено, извлекается TXT-запись, например:

Примечание: длина подписи DKIM может варьироваться, но очень часто она будет превышать 255 символов. У некоторых регистраторов админки не позволяют добавлять записи > 255 символов и это может быть проблемой. Обходное решение — разделить 3 всю запись на несколько кусков, каждый из которых не будет выходить за максимальные рамки длины. В этом случае ваша запись будет выглядеть примерно вот так:

mail._domainkey IN TXT ( «v=DKIM1; h=sha256; k=rsa; » «p=<first_part>» «<another_part>» ) ; —— DKIM key mail for bq-srv.ru

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

Пример DKIM-подписи 4 из реального сообщения:

При беглом взгляде становится понятно, что она содержит не только саму подпись, но и несколько пар ключ=значение, которые используются как инструкции для проверки. Вот что они означают:

  • v= — версия DKIM. Всегда имеет значение 1;
  • a= — алгоритм, используемый для генерации подписи;
  • c= — тип канонизации заголовка/тела сообщения. Перед подписью сообщение необходимо привести его к стандартному (канонизированному), чтобы не возникло проблем при проверке на принимающей стороне, ведь промежуточные серверы могут незначительно модифицировать сообщение. Это достаточно важный параметр, стоит обратить на него особое внимание;
  • d= — домен, который будет просматриваться на предмет наличия публичного ключа;
  • s= — селектор. Позволяет взять публичный ключ из нужной TXT-записи, если их вдруг несколько (а такое вполне может быть, если подписывающих серверов больше одного);
  • t= — отметка времени создания подписи;
  • bh= — хэш канонизированного тела сообщения;
  • h= — подписанные поля заголовков (список заголовков может варьироваться. Наличие тех или иных заголовков в подписи может защитить вас от некоторых потенциальных уязвимостей DKIM);
  • b= собственно, сама подпись.

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

Сколько селекторов надо для счастья

Исходя из анализа процесса извлечения нужной TXT-записи DKIM для домена, мы приходим к выводу, что селекторов может быть несколько. Это важная особенность архитектуры протокола, которая позволяет выдать каждому подписывающему серверу свой персональный ключ.

С точки зрения администрирования это обеспечивает следующие преимущества:

  1. Простота отзыва ключа при его компрометации — не нужно будет отзывать ключи со всех подписывающих серверов враз, а только с одного (тут и меньше даунтайм для пользователей, и меньше объем работ);
  2. Разграничение зон ответственности между админами, если вдруг разные релэи администрируют разные админы (это редкий случай, но гипотетически для больших компаний такое возможно, особенно если речь идет о разных почтовых сервисах — основных корпоративных и второстепенных — которые вынуждены отправлять с одного домена)
  3. Если кто-то у вас угнал закрытый ключ, будет сразу понятно какой сервер сломали или какой админ слил ключ;

Примечание: моменты обеспечения безопасности очень спорны, ведь озвученные выше преимущества разделения ключей позволяют лишь сузить круг поиска в случае возникновения проблем, но никак не повышают реальный уровень безопасности. Так что оставим все эти мысли для раздумья специалистам по ИБ.

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

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

Дополнительные записи

Помимо DNS-записи с селектором существуют и другие. Одна из них — запись политики 5 DKIM, другая — _adsp-запись.

Первая (запись политики) используется для информирования принимающих серверов о том, должны ли все письма домена быть подписаны (o=-) или нет (o=~), а также имеет ряд дополнительных опций (например адрес для обратной связи). Запись может выглядеть вот так:

Примечание: дело в том, что политика обработки DKIM обычно указывается в записи DMARC и, к сожалению, лично мне непонятно с какими приоритетами эти две записи будут обрабатываться (полагаю, что статус проверки DMARC будет важнее), если вдруг они вступят друг с другом в конфликт (поделитесь в комментариях, если вы в курсе).

Следующая запись — _adsp — на момент написания статьи вообще является устаревшей 6 7. Вывод: дополнительные записи DKIM на данный момент не актуальны, используйте DMARC.

Также не забывайте, что конечная цель DKIM — не заставить принимающие серверы сразу отклонять сообщения с битой подписью, а просто предоставить ещё один механизм удостоверения отправляющей стороны 8:

Thus, DKIM specifies that an assessing site is not to take a message that has a broken signature and treat it any differently than if the signature weren’t there.

Принимающая сторона должна принимать решение о блокировке сообщений на основе множества факторов и оценок (например статус проверки DKIM может быть fail, но статус DMARC — pass. Но это уже совсем другая история).

Внедрение DKIM

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

Exchange Server

Exchange на сегодняшний момент является самым распространенным корпоративным почтовым сервисом и насчитывает десятки лет истории. Несмотря на это, вот уже и в Exchange Server 2019 9 функционала DKIM не предвидится.

Примечание: тем не менее, все же существуют варианты поднять DKIM на эксче с помощью DKIM Signing Agent for Microsoft Exchange Server 10. Несмотря на отсутствие поддержки со стороны Microsoft, решение все же распространено достаточно широко и в интернете есть много гайдов по настройке 11.

На мой взгляд, этому может быть лишь одно логичное объяснение — Microsoft сосредотачивается на разработке функционала самого приложения (интеграция с другими продуктами, развитие общей экосистемы, переход в облака), а реализацию дополнительного транспортного функционала отдает на откуп сторонним разработчикам. Не зря же они открыли возможность для каждого создать собственные транспортные агенты 12.

Postfix

Postfix всего лишь MTA (агент пересылки почты) и в его функционал DKIM также не включен, но зато он реализуется с помощью пакета OpenDKIM.

В одной из ближайших статей я планирую рассказать как настроить связку Postfix + OpenDKIM, а также как её использовать в качестве релэя для Exchange Server.


UPD 19.08.2018:

А вот и статья про настройку DKIM на Postfix: Настройка DKIM на Postfix.


comments powered by HyperComments
writing a dissertation introduction
2022-07-05 16:17:20
<strong>dissertation titles https://professionaldissertationwriting.org/</strong>
dissertation title examples
2022-07-05 16:59:53
<strong>format for writing dissertation proposals https://professionaldissertationwriting.com/</strong>
dissertation format
2022-07-05 21:19:43
<strong>doctoral dissertation help qualitative https://helpwithdissertationwritinglondon.com/</strong>
dissertation uk help
2022-07-06 01:26:14
<strong>dissertation thesis writing https://dissertationhelpexpert.com/</strong>
tips for dissertation writing
2022-07-06 04:25:06
<strong>uk dissertation writing https://accountingdissertationhelp.com/</strong>
writing a dissertation abstract
2022-07-06 06:53:25
<strong>doctoral dissertation writing help https://examplesofdissertation.com/</strong>
dissertation proposal methodology example archived
2022-07-06 10:02:38
<strong>help with dissertations https://writing-a-dissertation.net/</strong>
professional writing service
2022-07-06 13:28:37
<strong>ma dissertation writing service https://bestdissertationwritingservice.net/</strong>
dissertation writing uk
2022-07-06 13:56:50
<strong>thesis dissertation https://businessdissertationhelp.com/</strong>
doctoral dissertation help usa
2022-07-06 17:03:52
<strong>writing help https://customdissertationwritinghelp.com/</strong>
dissertation topic
2022-07-06 22:11:43
<strong>disertation https://writingadissertationproposal.com/</strong>
write a dissertation abstract
2022-07-07 01:02:07
<strong>phd thesis https://dissertationhelpspecialist.com/</strong>
how to write a dissertation proposal
2022-07-07 02:47:56
<strong>writing help https://dissertationhelperhub.com/</strong>
dissertation writing
2022-07-07 05:30:15
<strong>dissertation writing service https://customthesiswritingservices.com/</strong>
no deposit bonus online casino pa
2022-07-25 20:15:46
<strong>casino online no deposit https://download-casino-slots.com/</strong>
online casino paypal
2022-07-25 22:23:02
<strong>firekeepers online casino https://firstonlinecasino.org/</strong>
online casino black jack
2022-07-26 00:06:19
<strong>free online casino games no download https://onlinecasinofortunes.com/</strong>
jumba bet online casino
2022-07-26 03:11:21
<strong>live online casino usa https://newlasvegascasinos.com/</strong>
windcreek casino online
2022-07-26 04:35:25
<strong>pa online casino no deposit bonus https://trust-online-casino.com/</strong>
new jersey online casino sites
2022-07-26 07:08:44
<strong>how to start an online casino https://onlinecasinosdirectory.org/</strong>
party casino online nj
2022-07-26 09:01:25
<strong>online bitcoin casino https://9lineslotscasino.com/</strong>
top online casino reviews
2022-07-26 13:03:43
<strong>lucky7 online casino https://free-online-casinos.net/</strong>
casino online
2022-07-26 14:51:03
<strong>mgm grand online casino https://internet-casinos-online.net/</strong>
atlantic city online casino
2022-07-26 17:28:35
<strong>resorts online casino https://cybertimeonlinecasino.com/</strong>
bogata online casino
2022-07-26 23:37:45
<strong>casino online uk https://vrgamescasino.com/</strong>
online casino free money
2022-07-27 05:42:08
<strong>play casino online https://casino-online-jackpot.com/</strong>
free online casino slot machines
2022-07-27 06:34:35
<strong>ruby fortune online casino https://onlineplayerscasino.com/</strong>
hollywood casino online
2022-07-27 10:23:16
<strong>gta online diamond casino heist https://ownonlinecasino.com/</strong>
best michigan online casino
2022-07-27 11:27:04
<strong>stardust casino online https://all-online-casino-games.com/</strong>
online real money casino usa
2022-07-27 14:26:40
<strong>best online real money casino https://casino8online.com/</strong>
secure vpn service
2022-08-07 14:19:51
<strong>hotspot shield free vpn. https://freevpnconnection.com/</strong>
free nord vpn accounts
2022-08-07 17:24:00
<strong>free vpn for kodi https://shiva-vpn.com/</strong>
free vpn for roobet
2022-08-07 20:57:39
<strong>best vpn for ios https://freehostingvpn.com/</strong>
proton vpn free
2022-08-07 22:31:06
<strong>free unlimited vpn for mac https://ippowervpn.net/</strong>
free vpn servers
2022-08-08 01:16:53
<strong>vpn to buy https://imfreevpn.net/</strong>
best vpn for business
2022-08-08 02:30:47
<strong>free vpn for chrome https://superfreevpn.net/</strong>
best vpn for windows free
2022-08-08 05:23:46
<strong>best buy vpn https://free-vpn-proxy.com/</strong>
free vpn for macbook
2022-08-08 08:21:44
<strong>vpn router buy https://rsvpnorthvalley.com/</strong>
2022-08-23 17:08:04
<strong>manhunt gay dating site website https://gayedating.com/</strong>
discreet gay dating
2022-08-23 18:25:51
<strong>dating gay https://datinggayservices.com/</strong>
top single service
2022-08-24 13:28:42
<strong>free dating sites chat https://freephotodating.com/</strong>
top free dating sites
2022-08-24 15:17:22
<strong>european singles dating sites https://onlinedatingbabes.com/</strong>
free site dating
2022-08-24 20:39:24
<strong>freedating https://adult-classifieds-online-dating.com/</strong>
our time dating website login
2022-08-24 21:20:03
<strong>deting https://online-internet-dating.net/</strong>
bbw dating sites
2022-08-25 00:12:58
<strong>best dating site online https://speedatingwebsites.com/</strong>
100% free dating sites
2022-08-25 03:22:19
<strong>absolutely free dating sites https://datingpersonalsonline.com/</strong>
lets-casual-dating
2022-08-25 05:03:38
<strong>chat singles https://wowdatingsites.com/</strong>
dateing site
2022-08-25 06:33:47
<strong>dating sites adult https://lavaonlinedating.com/</strong>
dating team
2022-08-25 10:24:23
<strong>free datings site https://freeadultdatingpasses.com/</strong>
free sites
2022-08-25 12:10:12
<strong>which online dating site is best https://virtual-online-dating-service.com/</strong>
local personals
2022-08-25 14:25:53
<strong>free dating sites no fees https://zonlinedating.com/</strong>
pof login canada
2022-08-25 16:55:26
<strong>free local dating sites https://onlinedatingservicesecrets.com/</strong>
casino games online free play
2022-08-30 08:38:13
<strong>best payout online casino https://onlinecasinos4me.com/</strong>
real money online casino usa
2022-08-30 14:21:26
<strong>firekeepers online casino michigan https://online2casino.com/</strong>
live online casino pa
2022-08-30 20:34:56
<strong>online casino with same day payout https://casinosonlinex.com/</strong>
free gay bays chat
2022-09-03 02:30:41
<strong>gay phone chat https://newgaychat.com/</strong>
local gay chat rooms
2022-09-03 07:18:12
<strong>gay video chat sites https://gaychatcams.net/</strong>
bbc gay chat room free
2022-09-03 12:49:30
<strong>sex chat gay https://gaychatspots.com/</strong>
gay phone chat
2022-09-03 18:13:54
<strong>gay chat cam ramdoom https://gay-live-chat.net/</strong>
free ohio gay chat rooms
2022-09-03 20:48:19
<strong>profile tube boys user gay chat boi https://chatcongays.com/</strong>
gay chat random alternative
2022-09-04 03:15:23
<strong>gay chat no registration https://gayphillychat.com/</strong>
gay bear chat and personals
2022-09-04 07:43:39
<strong>free chat and web cam sites for bi and gay men https://gaychatnorules.com/</strong>
free gay phone chat lines
2022-09-04 12:39:21
<strong>free gay chat fcn https://gaymusclechatrooms.com/</strong>
free gay bays chat
2022-09-04 15:38:47
<strong>free chat for gay curius people https://free-gay-sex-chat.com/</strong>
zoom cams gay sex chat
2022-09-04 21:25:00
<strong>gay chat room carneys point https://gayinteracialchat.com/</strong>
Яндекс.Метрика