10 шокирующих причин, почему компании «забывают» DKIM и как это исправить
11 марта 2026 г.Вступление
Электронная почта остаётся главным каналом деловой коммуникации, но её надёжность часто ставится под угрозу из‑за простых, но критически важных настроек. Одной из таких настроек является DKIM — механизм цифровой подписи, позволяющий получателю убедиться, что письмо действительно отправлено от имени указанного домена. На практике многие организации, даже крупные, «настраивают и забывают» DKIM, что приводит к отклонению писем, попаданию в спам и потере репутации. В статье мы разберём, почему так происходит, какие последствия это влечёт и как избежать типичных ошибок.
«Тихий ветер шепчет: поддомены ждут подписи, а почта — лишь тень»
— японский хокку, отражающий суть проблемы.
Пересказ оригинального Reddit‑поста
Автор поста делится своим опытом работы с несколькими крупными компаниями, которым пришлось объяснять, что их сервер отклоняет письма из‑за отсутствия DKIM‑подписи на поддомене. Несмотря на то, что эти организации используют один и тот же сторонний сервис рассылки, они часто добавляют поддомен, но забывают завершить процесс настройки DKIM. Автор сам прошёл весь путь от выбора сервиса до проверки подписи, но постоянно сталкивается с тем, что другие IT‑отделы «забывают» включить DKIM, что приводит к массовым отказам доставки.
Суть проблемы и «хакерский» подход
- Неполная автоматизация. Многие компании полагаются на «set‑it‑and‑forget‑it»‑модель, но забывают, что DKIM требует не только создания записи DNS, но и её привязки к сервису рассылки.
- Теневой IT. Отделы маркетинга или продаж часто запускают кампании без участия основной ИТ‑команды, что приводит к пропуску важных шагов.
- Недостаток знаний. Как отмечают комментаторы, сотрудники часто не понимают, как работают сертификаты и подписи, поэтому игнорируют их.
- Отсутствие контроля. Без чёткой политики и мониторинга ошибки остаются незамеченными до момента массовой рассылки.
Детальный разбор проблемы с разных сторон
Техническая сторона
DKIM работает через публичный ключ, размещённый в DNS‑записи типа TXT. При отправке письма сервис подписывает его приватным ключом, а получатель проверяет подпись, сравнивая её с публичным ключом. Ошибки могут возникнуть:
- Отсутствие записи в DNS.
- Неправильный селектор (часть записи, указывающая на конкретный ключ).
- Синхронные изменения: запись обновлена, но кэш DNS ещё не успел обновиться.
- Использование разных поддоменов для разных сервисов без отдельной настройки DKIM.
Организационная сторона
Внутренние процессы часто не учитывают необходимость согласования между маркетингом, безопасностью и операционной поддержкой. Как показывают комментарии:
«Я не забыл, я настроил строгую политику, а потом позволил ей провалиться, потому что маркетинг использовал инструменты без консультации с ops.» — IN‑DI‑SKU‑TA‑BELT
«Они не понимают, как это работает… Это как сертификаты… Люди просто не знают, как работают CA.» — BlackSquirrel05
«Теневой IT. Отделы запускают без участия IT, а потом реагируют после факта.» — PlasticJournalist938
Экономическая сторона
Каждая отклонённая рассылка стоит компании не только в виде потерянных продаж, но и в виде ухудшения репутации домена, что может привести к более строгим фильтрам у получателей и росту расходов на восстановление репутации.
Практические примеры и кейсы
Кейс 1: Университет с массовой рассылкой. После года попыток IT‑отдел не смог заставить маркетинг включить DKIM. В результате крупная рассылка из 10 000 писем была отклонена, а репутация домена упала.
Кейс 2: Финансовая компания. Добавила поддомен mail.example.com для рассылок, но не создала запись DKIM. Партнёрские письма начали попадать в спам, что привело к потере нескольких крупных контрактов.
Экспертные мнения из комментариев
- IN‑DI‑SKU‑TA‑BELT: Подчёркивает, что строгие политики часто игнорируются другими отделами.
- BlackSquirrel05: Сравнивает незнание DKIM с непониманием работы сертификатов.
- PlasticJournalist938: Описывает явление «теневого IT» и его последствия.
- _haha_oh_wow_: Указывает на сопротивление вендоров, требующих «белый список», несмотря на современные стандарты.
- boli99: Приводит типичный сценарий от объяснения до массовой неудачной рассылки.
Возможные решения и рекомендации
- Внедрить чек‑лист при подключении нового сервиса рассылки. Включить в него обязательную проверку DKIM, SPF и DMARC.
- Автоматизировать проверку DNS‑записей. Скрипты, которые регулярно проверяют наличие и корректность записей.
- Обучить нетехнические отделы. Провести короткие воркшопы о том, зачем нужны подписи и как они работают.
- Назначить ответственного за «почтовую безопасность». Человек, который будет контролировать процесс от создания поддомена до проверки подписи.
- Внедрить систему мониторинга отклонений. Интеграция с SIEM‑системой, чтобы получать алерты при росте отказов доставки.
Прогноз развития ситуации
С ростом количества автоматизированных маркетинговых платформ и увеличением объёма рассылок, проблема «забытых» DKIM‑записей будет только усиливаться. Однако, ожидается, что поставщики облачных сервисов начнут предлагать более «прозрачные» интеграции, где настройка DKIM будет включена в процесс onboarding. Кроме того, регуляторы могут ввести обязательные требования к проверке подлинности писем, что заставит компании более ответственно относиться к DKIM, SPF и DMARC.
Практический пример на Python
Ниже представлен скрипт, который проверяет наличие и корректность DKIM‑записей для заданного домена и селектора. Он использует библиотеку dnspython и может быть включён в CI‑pipeline или плановое задание.
# -*- coding: utf-8 -*-
"""
Проверка DKIM‑записей для домена.
Автор: технический блогер‑аналитик.
"""
import dns.resolver
import sys
def fetch_dkim_record(domain: str, selector: str) -> str:
"""
Получить DKIM‑запись из DNS.
:param domain: Домен, для которого проверяется запись (например, example.com)
:param selector: Селектор, указанный в настройках сервиса рассылки
:return: Текст записи или пустую строку, если запись не найдена
"""
# Формируем полное имя записи: selector._domainkey.domain
dkim_name = f"{selector}._domainkey.{domain}"
try:
# Запрашиваем TXT‑записи
answers = dns.resolver.resolve(dkim_name, 'TXT')
# Возвращаем первую найденную запись (обычно их одна)
for rdata in answers:
# rdata.strings может быть кортежем байтов; объединяем их
return b"".join(rdata.strings).decode('utf-8')
except (dns.resolver.NoAnswer, dns.resolver.NXDOMAIN):
# Запись отсутствует
return ""
except Exception as e:
# Любая другая ошибка – выводим в stderr и завершаем
sys.stderr.write(f"Ошибка DNS‑запроса: {e}\\n")
return ""
def validate_dkim(domain: str, selector: str) -> bool:
"""
Проверить, что DKIM‑запись существует и содержит публичный ключ.
:return: True, если запись найдена и выглядит корректно, иначе False
"""
record = fetch_dkim_record(domain, selector)
if not record:
return False
# Простейшая проверка: наличие строки "p=" (публичный ключ)
return "p=" in record
if __name__ == "__main__":
# Пример использования: python dkim_check.py example.com default
if len(sys.argv) != 3:
sys.stderr.write("Использование: python dkim_check.py \\n")
sys.exit(1)
dom = sys.argv[1]
sel = sys.argv[2]
if validate_dkim(dom, sel):
print(f"DKIM‑запись найдена и выглядит корректно для {sel}._domainkey.{dom}")
else:
print(f"DKIM‑запись НЕ найдена или некорректна для {sel}._domainkey.{dom}")
Скрипт можно запускать в автоматическом режиме, передавая домен и селектор, используемый в вашем сервисе рассылки. При отсутствии записи он выдаст предупреждение, позволяя быстро отреагировать и добавить нужную запись в DNS.
Оригинал