OpenDKIM + SendMail на Debian установка, настройка, тестирование

OpenDKIM + SendMail на Debian установка, настройка, тестирование

Исходные данные:
Web сервер на отдельном хостинге (выделенный сервер, работает на OS Debian). Несколько сайтов с разными доменными именами.
DNS - Yandex DNS (делегированы домены).
Задача:
Заставить MTA SendMail на Web сервере отправляя почту подписывать ее DKIM подписью.
Используемое для решения ПО:
OpenDKIM

DKIM (Domain Keys Identified Mail) — это цифровая подпись, которая подтверждает подлинность отправителя и гарантирует целостность доставленного письма. Подпись добавляется в служебные заголовки письма и незаметна для пользователя. DKIM хранит 2 ключа шифрования — открытый и закрытый. С помощью закрытого ключа формируются заголовки для всей исходящей почты, а открытый ключ как раз добавляется в DNS записи в виде TXT файла.
Проверка DKIM происходит автоматически на стороне получателя. Если домен в письме не авторизован для отправки сообщений, то письмо может быть помечено подозрительным или помещено в спам, в зависимости от политики получателя.
Записей DKIM может быть несколько для каждого сервиса своя.

Синтаксис DKIM

«v» — версия DKIM, всегда принимает значение v=DKIM1;
«k» — тип ключа, всегда k=rsa;
«p» — публичный ключ, кодированный в base64.
Необязательные элементы:
«t=y» — режим тестирования. Нужно только для отслеживания результатов;
«t=s» — означает, что запись будет использована только для домена, к которому относится; не рекомендуется, если используются субдомены;
«h» — предпочитаемый hash-алгоритм, может принимать значения «h=sha1» и «h=sha256»;
«s» — тип сервиса, использующего DKIM. Принимает значения «s=email» (электронная почта) и «s=*» (все сервисы). По умолчанию «*»;
«;» — разделитель.

 

1. Устанвливаем OpenDKIM.
# apt-get install opendkim opendkim-tools

При установке создается конфигфайл - /etc/opendkim.conf, папка /etc/dkimkeys, где в последствии разместятся дополнительные конфигурационные файлы и папки с ключами. Размещение конечно можно поменять если нужно.

2. Создаем папки для каждого домена с правами (644 opendkim:opendkim) и генерируем ключи с правами на закрытый ключ (600 opendkim:opendkim) и открытый ключ (640 opendkim:opendkim).
/etc/dkimkeys/domain1.com
/etc/dkimkeys/domain2.com
...
# opendkim-genkey -s SELECTOR -d domain1.com
# opendkim-genkey -s SELECTOR -d domain2.com
...
где SELECTOR имя селектора (mail, 2021, acy, default ....) он в последствии будет использоваться при создании TXT записи в DNS.

3. Правим конфигфайл /etc/opendkim.conf
______________________________

Syslog yes
UMask 002
#Domain prfire.ru
#KeyFile /etc/dkimkeys/dkim.key
Selector 2021
Canonicalization relaxed/simple
Mode sv
#SubDomains no
Socket inet:8891@localhost
PidFile /var/run/opendkim/opendkim.pid
OversignHeaders From
TrustAnchorFile /usr/share/dns/root.key

UserID opendkim:opendkim

AutoRestart Yes
AutoRestartRate 10/1h
KeyTable file:/etc/dkimkeys/KeyTable
SigningTable refile:/etc/dkimkeys/SigningTable
InternalHosts refile:/etc/dkimkeys/TrustedHost
_____________________________

  • AutoRestart: Автоматический перезапуск фильтр при возникновении ошибок

  • AutoRestartRate: определяет максимальную скорость перезапуска фильтра, если перезагрузки начинают происходить чаще, чем определенно этим параметром, фильтр прекратит свою работу; 10 / 1h - не более десяти раз в час.

  • UMask: дает все права доступа к группе пользователей, определяемой UserID и позволяет другим пользователям читать и выполнять файлы, в данном случае это позволит создавать и изменять PID файл.

  • Syslog, SyslogSuccess, *LogWhy: эти параметры разрешают подробное протоколирование вызовов через Syslog

  • Canonicalization: определяет методы канонизации, используемые при подписании сообщения. Метод simple не позволяет почти никакого изменения сообщения, в то время как relaxed допускает незначительные изменения, такие как замена пробелов; При значении relaxed/simple заголовок сообщения будут обрабатываться с "непринужденным" алгоритмом а тело "простым".

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

  • InternalHosts: определяет перечень внутренних хостов, чьи письма не должны быть проверены, но должны быть подписаны

  • KeyTable: таблица с параметрами подписи

  • SigningTable: список подписей, чтобы применить к сообщению на основе адреса, указанному в поле "От:" заголовка

  • Mode: опрделает режим работы.В данном примере милтер работает для подписи (s) и проверки (v)

  • PidFile: путь к PID файлу, который содержит идентификационный номер процесса

  • SignatureAlgorithm: алгоритм создания подписи

  • UserID: определяет под каким пользователем должен работать процесс OpenDKIM

  • Socket: определяет параметры сервера OpenDKIM. Postfix будет отправлять сообщения на проверки и подпись через указанный в этом параметре сокет.

4. Создаем дополнительные конфигфайлы (нужны потому, что несколько доменов у нас и несколько пар ключей)

Файл - KeyTable
2021._domainkey.domain1.com domain1.com:2021:/etc/dkimkeys/domain1.com/2021.private
2021._domainkey.domain2.com domain2.com:2021:/etc/dkimkeys/domain2.com/2021.private
...

Файл - SigningTable
*@domain1.com 2021._domainkey.domain1.com
*@domain2.com 2021._domainkey.domain2.com
...

Файл - TrustedHost
127.0.0.1
localhost
domain1.com
domain2.com
...

5. Добавляем в конфифайл SendMail строку -
INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@localhost')dnl

Для PostFix (/etc/postfix/main.cf) -
# OpenDKIM
milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

6. Реконфигурируем SendMail, перезапускаем OpenDKIM и SendMail
# sendmailconfig
# service opendkim restart && service sendmail restart

7. Добавляем TXT записи с открытими ключами в DNS

8. Добавляем пользователя PostFix в группу пользователя Opendkim

9. Тестируем... Если не получается смотрим логи - 
# journalctl -xe

 

# Specify the list of keys
KeyTable file:/etc/dkimkeys/keytable
# Match keys and domains. To use regular expressions in the file, use refile: instead of file:
SigningTable refile:/etc/dkimkeys/signingtable
# Match a list of hosts whose messages will be signed. By default, only localhost is considered as internal host.
InternalHosts refile:/etc/dkimkeys/trustedhosts

 

 

 

Отправка тестового письма из консоли:
# echo "Test" | sendmail Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.

Перезапуск сервисов OpenDkim и Sendmail:
# service opendkim restart && service sendmail restart

Тест настроек OpenDkim:
# opendkim-testkey -d domain.com -s SELECTOR -vvv

Генерация открытого и закрытого ключей для DKIM подписи:
# opendkim-genkey -s SELECTOR -d domain.com

Переконфигурация SendMail с новыми настройками
# sendmailconfig

Вывод ошибок возникших при запуске OpenDKIM
# systemctl status opendkim.service
# journalctl -xe       - выводит журнал событий

 

 

Тестер DKIM и SPF записей:
 https://www.mail-tester.com/spf-dkim-check

Тестер и генератор DKIM записей:
https://dkimcore.org/tools/

Тестер писем и расселок на спам:
https://spamtest.smtp.bz/

Комментарии (0)

Здесь не опубликовано еще ни одного комментария

Оставьте свой комментарий

  1. Опубликовать комментарий как Гость.
Вложения (0 / 3)
Поделитесь своим местоположением

ТЕХНОЛОГИИ