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

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

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

  1. Сервер получателя получает письмо с адреса info@example.com, с сервера mx.example.com;
  2. Сервер получателя делает запрос к DNS для домена example.com и ищет записи SPF и DKIM;
  3. В случае если записей нет, письму проставляется статус neutral (конкретно по этим проверкам) и письмо проверяется дополнительными фильтрами;
  4. В случае если записи обнаружены, проверяется, разрешено ли серверу mx.example.com отправлять почту домена example.com;
  5. Если mx.example.com не найден в списке разрешенных, то письмо или отбрасывается, или проставляется статус neutral;
  6. Если 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:

# apt-get update
# apt-get install opendkim opendkim-tools

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

# mkdir /etc/opendkim/keys/
# mkdir /etc/opendkim/keys/example.com/
# mkdir /etc/opendkim/keys/example.org/

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

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

Выше указанная команда создаст файлы /etc/opendkim/keys/example.com/mail.private и /etc/opendkim/keys/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 необходимых файла конфигурации:

# touch /etc/opendkim/KeyTable
# touch /etc/opendkim/SigningTable
# 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:

# /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 перезапустим его:

# 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=

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

 

ИСТОЧНИКИ:

http://3beep.ru/dkim-i-spf-dlya-pochtovogo-domena/
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy
https://mindbox.fogbugz.com/?W504#toc_4

Рубрики: Postfix

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *