Photo by Sollange Brenis
DKIM запись

DKIM запись для почтового сервера Postfix

9.04.23
22.08.23

Как работает DKIM?

Основная идея заключается в применении ассинхронного шифрования. Т.е. генерация открытого и закрытого ключей. DKIM (DomainKeys Identified Mail) это метод аутентификации писем, основанный на проверке подлинности цифровой подписи. Закрытый ключ хранится на почтовом сервере, а открытый помещается в DNS запись. Когда электронное письмо отправляется авторизованным пользователем почтового сервера, сервер использует сохраненный закрытый ключ для создания цифровой подписи сообщения, которая вставляется в сообщение в качестве заголовка, и электронное письмо отправляется как обычно. Почтовый сервис адресата может проверять, является ли отправитель тем, которым себя выдает или нет. Т.е. защищает получателя письма от различных фишинговых писем. 

Итак, приступим к установке. Установку и настройку почтового сервера рассматривали тут, думаю, что всё уже установлено и работает. Прикрутить DKIM к почтовому серверу можно установив специальный пакет opendkim

Установка opendkim

Установка на Ubuntu-server 20.04 (и более поздние версии) крайне проста, пакеты есть в репозитории

# apt opendkim opendkim-tools

Генерируем пару ключей

Если у вас на сервере несколько доменов, то надо генерировать ключи по следующей схеме:

mkdir -p /etc/opendkim/keys/
cd /etc/opendkim/keys/
opendkim-genkey -r -s your_key_name -d domain.tld
  • -r ограничивает использование ключа только для подписи электронной почты. По умолчанию ключ разрешается использовать для любой службы.
  • -s задаёт имя для генерируемых файлов. По умолчанию (если не указывать) будет два файла: default.private и default.txt
  • -d это имя домена

Данная команда создаст два файла: your_key_name.private и your_key_name.txt Закрытый ключ для почтового сервера и ДНС-запись соответственно.

Далее, установим права доступа

chown -R opendkim:opendkim /etc/opendkim
chmod go-rw /etc/opendkim/keys

Настройка OpenDKIM

Надо отредактировать два файла конфигурации:

# /etc/default/opendkim
SOCKET=inet:8891@localhost

Остальное оставьте как есть (другие сокеты закомментируйте). И ещё

# /etc/opendkim.conf
Mode     sv
Socket   inet:8891@localhost
KeyTable        refile:/etc/opendkim/keytable
SigningTable   refile:/etc/opendkim/signingtable
ExternalIgnoreList      refile:/etc/opendkim/trustedhosts
InternalHosts   refile:/etc/opendkim/trustedhosts

Далее создадим /etc/opendkim/keytable файл следующего содержания:

your_key_name._domainkey.domain.tld domain.tld:your_key_name:/etc/opendkim/keys/your_key_name.private

И ещё файл /etc/opendkim/signingtable следующего содержания:

*@domain.tld your_key_name._domainkey.domain.tld

И, наконец, создадим файл /etc/opendkim/trustedhosts с записями доменов:

mail.domain.tld
domain.tld

Конфигурация Postfix

Далее, отредактируйте конфигурационный файл POSTFIXа /etc/postfix/main.cf добавьте следующие строки:

smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

Далее, запустите (перезапустите) opendkim:

systemctl restart opendkim.service

TXT запись в DNS сервер

После конфигурации приватного ключа opendkim-genkey также сформирует файл для DNS записи /etc/opendkim/keys/example.com/default.txt :

default._domainkey      IN      TXT     ( "v=DKIM1; k=rsa; s=email; "
"p=MIG...................AB" )  ; ----- DKIM key default for example.com

Тестирование DKIM

Проверить работу можно такой командой

mail -vs "Test DKIM" my_test_email@gmail.com < /dev/null

В принятом письме найдите строчку «DKIM-Signature» должна выглядеть примерно так:

DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=example.com;
	s=default.private; t=1502378963;
	bh=f............8=;
	h=Date:From:Message-Id:To:Subject;
	b=M6.........................qWY=