Как работает 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=