Что такое DKIM
DKIM (DomainKeys Identified Mail) — это технология аутентификации электронной почты, которая позволяет получателю проверить, действительно ли письмо было отправлено от имени указанного домена и не было ли оно изменено по пути.
Как работает DKIM
- Отправляющий сервер формирует заголовки письма и его тело.
- Вычисляется хеш от указанных заголовков и тела.
- Хеш подписывается закрытым ключом.
- В письмо добавляется заголовок DKIM-Signature, содержащий подпись.
- Получатель извлекает подпись, получает открытый ключ из DNS и проверяет её.
Пример DKIM-заголовка в письме
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=example.com; s=s1; h=from:to:subject:date; bh=QW6fV5OSn...; b=MT7XN3kpv...;
Формат DKIM-записи в DNS
DKIM-запись добавляется в DNS домена как TXT-запись по следующему имени:
селектор._domainkey.домен
Пример:
s1._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw..."
Параметры DKIM-записи
Параметр | Назначение | Пример значения |
---|---|---|
v | Версия протокола DKIM | v=DKIM1 |
k | Тип криптографического ключа | k=rsa |
p | Открытый ключ в base64 | p=MIIBIjAN… |
Дополнительно можно использовать (реже):
t | Тестовый режим (только отчётность) | t=y |
n | Комментарий для администраторов | n=тестовая подпись |
Генерация DKIM-ключей
С помощью OpenSSL:
openssl genrsa -out private.key 2048 openssl rsa -in private.key -pubout -out public.key
Преобразование в формат DNS:
openssl rsa -in private.key -pubout -outform PEM | \ sed '1d;$d' | tr -d '\n' > dkim.txt
Проверка DKIM-подписи
* Через консоль:
dig TXT s1._domainkey.example.com
* Онлайн-инструменты:
Рекомендации
- Используйте длину ключа 2048 бит (не менее 1024).
- Придумывайте уникальные селекторы для разных почтовых сервисов (например, `google`, `m365`, `mailjet`).
- Ротируйте ключи регулярно (пример: раз в год).
- Убедитесь, что почтовый сервер корректно подписывает все исходящие письма.
- Используйте DKIM вместе с SPF и DMARC для максимальной защиты.