Установка и настройка OPENDKIM на почтовом сервере для домена (на примере Postfix и Debian)

Материал из support.qbpro.ru
Версия от 17:17, 28 июля 2023; Vix (обсуждение | вклад) (Новая страница: «Данная статья подразумевает, что у вас уже есть настроенный рабочий почтовый сервер (Postfix), и освещает лишь настройку SPF и DKIM. SPF и DKIM в целом похожие технологии, и выполняют схожу задачу - подтверждают валидность сервера отправителя. Работают они через з...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Данная статья подразумевает, что у вас уже есть настроенный рабочий почтовый сервер (Postfix), и освещает лишь настройку SPF и DKIM.

SPF и DKIM в целом похожие технологии, и выполняют схожу задачу - подтверждают валидность сервера отправителя. Работают они через записи на DNS сервере. Принцип работы очень простой:


Сервер получателя получает письмо с адреса info@example.com, с сервера mx.example.com; Сервер получателя делает запрос к DNS для домена example.com и ищет записи SPF и DKIM; В случае если записей нет, письму проставляется статус neutral (конкретно по этим проверкам) и письмо проверяется дополнительными фильтрами; В случае если записи обнаружены, проверяется, разрешено ли серверу mx.example.com отправлять почту домена example.com; Если mx.example.com не найден в списке разрешенных, то письмо или отбрасывается, или проставляется статус neutral; Если mx.example.com найден в списке разрешенных, письму проставляется статус pass и повышается рейтинг письма при прохождении других фильтров.

Настройка SPF записи SPF расшифровывается как – Sender Policy Framework дословно - структура политики отправителя. В SPF-записи указываются все сервера, с которых могут быть отправлены сообщения.


SPF запись необходимо прописать на DNS-сервере обслуживающим ваш домен. Это строка, типа TXT, которая указывает список серверов, имеющих право отправлять email-сообщения с обратными адресами в вашем домене.

Если вы отправляете сообщения только с одного сервера (почтовые клиенты не считаются), то в SPF-записи будет достаточно указать IP-адрес этого сервера: example.com. IN TXT "v=spf1 +a +mx ip4:12.34.56.78 -all"

Описание опций:

"v=spf1" - используемая версия SPF. "+" - принимать корреспонденцию (Pass). Этот параметр установлен по умолчанию. То есть, если никаких параметров не установлено, то это "Pass"; "-" - Отклонить (Fail); "~" - "мягкое" отклонение (SoftFail). Письмо будет принято, но будет помечено как СПАМ; "?" - нейтральное отношение; "mx" - включает в себя все адреса серверов, указанные в MX-записях домена; "ip4" - опция позволяет указать конкретный IP-адрес или сеть адресов; "a" - указываем поведение в случае получения письма от конкретного домена; "include" - включает в себя хосты, разрешенные SPF-записью указанного домена; "all" - все остальные сервера, не перечисленные в SPF-записи.


Расшифруем нашу запись:

"+a" - разрешает прием писем от узла, IP-адрес которого совпадает с IP-адресом в A-записи для mydomen.ru; "+mx" - разрешает прием писем, если отправляющий хост указан в одной из MX-записей для mydomen.ru; "ip4:" - тут мы указали ip адрес нашего почтового сервера; "-all" - все сообщения, не прошедшие верификацию с использованием перечисленных механизмов, следует отвергать.


С настройкой SPF записи всё довольно просто.

Проверка SPF записей Обновление DNS записей обычно занимает от 30 минут до 4 часов - стоит подождать некоторое время, чтобы записи успели обновиться.

Затем идем сюда и вбиваем доменное имя, для которого вы прописали записи. Жмем SPF Record Lookup и смотрим результат.


Настройка DKIM DKIM расшифровывается как – DomainKeys Identified Mail. Настройка DKIM немного сложнее, так как предварительно нужно сгенерировать ключи для подписи сообщений.

Для этого на почтовом сервере необходимо установить opendkim:

  1. apt-get update
  2. apt-get install opendkim opendkim-tools

Создадим директории где будут храниться ключи для каждого домена (если ваш почтовый сервер обслуживает несколько доменов):

  1. mkdir /etc/opendkim/keys/
  2. mkdir /etc/opendkim/keys/example.com/
  3. mkdir /etc/opendkim/keys/example.org/

Создаем ключи для наших доменов и селектор (здесь домен example.com и example.org, а селектор mail. Селектор может быть любой. Это всего лишь название для ссылки на ключ):

  1. opendkim-genkey -D /etc/opendkim/keys/example.com/ -d example.com -s mail
  2. opendkim-genkey -D /etc/opendkim/keys/example.org/ -d example.org -s mail

Выше указанная команда создаст файлы /etc/opendkim/example.com/mail.private и /etc/opendkim/example.com/mail.txt (и аналогично для каждого домена), с секретным и публичными ключами соответственно.

Содержимое файла mail.txt (для соответствующего домена) является публичным ключом, который надо разместить на DNS-сервере в TXT записи для того домена для которого он был создан.

Пример данной записи:

mail._domainkey IN TXT "v=DKIM1;k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAdfmWEGERbLGARxEFI9Ibwx79tk1kMi36rFeAT4aLu4iI3ctPUWa7y0WcuMZGCBQMMutolT8IM9EGEHYT/rbKlhoeiA0r8qJZiIX/NkjkLIXzR+9h1i47dD5zCu4uEFWRHETJAERWGQaC9hSHCcCwzosSRwBpaxIMZuRGQIDAQAB"


Владельцем ключей делаем opendkim (иногда из-за этого бывают ошибки): chown opendkim:opendkim -R /etc/opendkim/keys

Создадим 3 необходимых файла конфигурации:

  1. touch /etc/opendkim/KeyTable
  2. touch /etc/opendkim/SigningTable
  3. touch /etc/opendkim/TrustedHosts

Содержимое файла /etc/opendkim/KeyTable (здесь все слова mail меняем на ваш селектор, в данном файле прописываются домены и пути к секретным ключам): mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private mail._domainkey.example.org example.org:mail:/etc/opendkim/keys/example.org/mail.private

Содержимое файла /etc/opendkim/SigningTable:

  • @example.com mail._domainkey.example.com
  • @example.org mail._domainkey.example.org

Файл /etc/opendkim/TrustedHosts - в этом файле определяем так называемые ExternalIgnoreList и InternalHosts, т.е. хосты, домены и ip адреса, сообщения от которых будут доверенными и будут подписываться.

Так как в основном конфигурационном файле мы укажем, что файл TrustedHosts имеет тип refile (файл с регулярными выражениями), мы можем использовать регулярные выражения в нем. Например * .example.com означает, что сообщения, поступающие от поддоменов example.com будут тоже доверенными.

Пример файла /etc/opendkim/TrustedHosts: 127.0.0.1 localhost

1

192.168.0.1/24

  • .example.com
  • .example.org

Настроим opendkim. Для этого внесем следующие настройки в конфигурационный файл /etc/opendkim.conf:

Syslog yes UMask 002 OversignHeaders From Mode s LogWhy yes SyslogSuccess yes Canonicalization relaxed/simple KeyTable /etc/opendkim/KeyTable SigningTable refile:/etc/opendkim/SigningTable Socket inet:8891@localhost ReportAddress root AutoRestart Yes AutoRestartRate 10/1h ExternalIgnoreList refile:/etc/opendkim/TrustedHosts InternalHosts refile:/etc/opendkim/TrustedHosts PidFile /var/run/opendkim/opendkim.pid SignatureAlgorithm rsa-sha256 UserID opendkim:opendkim


Расшифровка:

AutoRestart: автоматический перезапуск в случае ошибки;

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

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

Syslog, SyslogSuccess, *LogWhy: эти параметры настраивают ведение логов с помощью syslog.

Canonicalization: определяет методы преобразования, используемые при подписании сообщения. Метод simple не позволяет практически никаких изменений, в то время как метод relaxed допускает незначительные изменения (например замена пробела и т.д.). Значение relaxed/simple указывает, что заголовок сообщения будет обрабатываться методом relaxed, а тело сообщения - методом simple.

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

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

KeyTable: файл-карта названий и путей к секретным ключам.

SigningTable: список подписей, которые будут применяться на основании заголовка письма, указанного в "From:".

Mode: режимы работы; в данном случае выступает в качестве milter (фильтрация писем до попадания в очередь сообщений, прописывается в postfix в main.cf, см. ниже) подписывающего (s) и верификатора (v). В нашем случае мы будем только подписывать.

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

SignatureAlgorithm: алгоритм подписи.

UserID: указывает под каким пользователем и группой должен работать процесс opendkim.

Socket: milter будет слушать на сокете указанном здесь, Posfix будет отправлять сообщения opendkim для подписи и проверки через этот сокет. В нашем случае будет использоваться localhost и 8891 порт (8891@localhost).


Подробное описание всех атрибутов тут - http://www.opendkim.org/opendkim.conf.5.html

Запускаем opendkim:

  1. /etc/init.d/opendkim start

Пропишем в Postfix в main.cf строчки: smtpd_milters = inet:localhost:8891 non_smtpd_milters = inet:localhost:8891 milter_default_action = accept milter_protocol = 2

Если у вас уже используется milter (например, для SpamAssasin), тогда эти же строчки будут выглядеть так: smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:8891 non_smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:8891 milter_default_action = accept milter_protocol = 2

После внесения изменений в конфигурационный файл Postfix перезапустим его:

  1. service postfix reload

Определим политику DKIM (ADSP - Author Domain Signing Practices) Для этого надо разместить на DNS-сервере в TXT записи для каждого домена для которого используется DKIM следующую строчку: _adsp._domainkey IN TXT "dkim=unknown"

Значения могут быть следующими:

unknown: значение по умолчанию (аналогично тому, что вышеуказанной DNS записи вообще нет).

  Данное значение говорит почтовым серверам (на которые вы будете отправлять письма) о том,
  что письма могут быть как с подписью DKIM, так и без подписи;

all: говорит, что все письма будут подписаны; discardable: говорит, что все письма будут подписаны, а если письмо не подписано или подпись

  не верна - то его следует удалить.


Проверка DKIM Для проверки DKIM можно отправить письмо на адрес check-auth@verifier.port25.com и дождаться ответа.

Пример ответа, что DKIM настроен корректно:

The results are as follows:

DKIM Signature validation: pass
DKIM Author Domain Signing Practices: (


Также для проверки можно отправить письмо (например, себе же на какой-нибудь e-mail на yandex), открыть его исходник и найти 
там строчки:

Authentication-Results: mxfront1g.mail.yandex.net; spf=pass (mxfront1g.mail.yandex.net:
domain of example.com designates 12.34.56.78 as permitted sender) smtp.mail=tester@example.com;
dkim=pass header.i=@example.com

и

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=example.com; s=mail;
t=1484724874; bh=LGgFxMGKg3waFbi+enIwqHYdnPLt2IsuxgR6s1EEHvg=;
h=From:To:Subject:Date:From;
b=fvFO2qXwC3VRfbUVaG4SW3vtmBJbW8+1kKbKuP25/w/UZ7TLq1TruOYhgoCPpk6B/
 tz93DY5/1mzbPDTiBuEJoh371t34yJDTWUGqMucoOhXXhHBdtCfns+L6lW5oI+stMP
 5g+xUYyz7/a3oy0MstIFJnhjpJlRwgeS/JPjPfuQ=


На этом все! Настройка завершена.