Установка и настройка OPENDKIM на почтовом сервере для домена (на примере Postfix и Debian)
Данная статья подразумевает, что у вас уже есть настроенный рабочий почтовый сервер (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:
- 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/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 необходимых файла конфигурации:
- 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=
На этом все! Настройка завершена.