Настройка DKIM, SPF и DMARC в Zimbra Collaboration Suite

Если при попытке отправить сообщение на почтовые сервера Gmail вы вдруг получили ответ:

550-5.7.1 [62.220.58.71 12] Our system has detected that this message is 550-5.7.1 likely unsolicited mail. To reduce the amount of spam sent to Gmail, 550-5.7.1 this message has been blocked. Please visit 550-5.7.1 https://support.google.com/mail/?p=UnsolicitedMessageError 550 5.7.1 for more information.

Скорее всего, это означает что у вас не настроены DKIM, SFP и DMARC. Все больше крупных почтовых серверов (mail.ru, Яндекс) требуют наличие данных записей.

  • DomainKeys Identified Mail (DKIM) - используется для защиты от спуфинга при помощи добавления цифровой подписи в заголовки исходящих сообщений.
  • Sender Policy Framework (SPF) - это расширение для протокола отправки электронной почты через SMTP, благодаря которому можно проверить, не подделан ли домен отправителя.
  • Domain-based Message Authentication, Reporting and Conformance (DMARC) - это техническая спецификация, предусматривающая механизмы для обмена информацией между отправителем и получателем о качестве фильтрации спама и фишинговых атаках.

Настроим каждую из этих систем.

Настройка DKIM в Zimbra

Метод предусматривает шифрование заголовков исходящих сообщений с помощью закрытого ключа домена, и добавление открытой версии ключа в записи DNS домена, доступного всем. MTA сервера-получателя запрашивает открытый ключ у DNS-сервера отправителя, для расшифровки заголовков входящих сообщений и проверяет, действительно ли сообщение отправлено от заявленного источника.

DKIM стал доступен начиная с версии Zimbra 8.0. Настройка подписи состоит из двух этапов (по материалам wiki.zimbra.com):

Первый этап: генерация ключей и селектора

Добавление данных DKIM к домену, у которого еще нет существующей конфигурации DKIM

# su zimbra $ /opt/zimbra/libexec/zmdkimkeyutil -a -d example.com
DKIM Data added to LDAP for domain example.com with selector ECAC22D2-DCA2-11E6-BA30-B554729FE32A
Public signature to enter into DNS:
ECAC22D2-DCA2-11E6-BA30-B554729FE32B._domainkey	IN	TXT	( "v=DKIM1; k=rsa; "
	  "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs5OCY0sX04ziF+sOHt/1kq3A7iAzAjBjb4JteaoFzu1q2uBOiQS0uyaFeY6CgSgRRbvPnq8cWLG/XMU0tM9gSGtgtWDmHOs6/+QgKp6zRmetfsyABA2Y2U+XJlVURUE5ai3KIA/njt7IGZ5yeFsdZIKmhOCAOPGCovq10xkZXHdjRwiqxbCYGXv2m3o74BcWtOLPfEvexD5PYx"
	  "aTWFbelJpGlDN7WdBCE+ObpLGkJ9co/1sVOcd3c9SHfPq3jcBAFm7oPX2ak7Fb7cslVK77lA2hBgMYqI2Sh+T64o6R33dU++Ej7CuImmv7PAqVUn5MjYr05t3LK9dwWM8Cm6aJ/QIDAQAA" )  ; ----- DKIM key ECAC22D2-DCA2-11E6-BA30-B554729FE32A for example.com

Обновить DKIM данные для домена:

$ /opt/zimbra/libexec/zmdkimkeyutil -u -d example.com

Удаление DKIM данных для домена:

$ /opt/zimbra/libexec/zmdkimkeyutil -r -d example.com

Извлечение сохраненных данных DKIM для домена:

$ /opt/zimbra/libexec/zmdkimkeyutil -q -d example.com

Второй этап: обновление DNS-записей

Публичный ключ нужно добавить как TXT-запись в домен:

$ORIGIN example.com.
ECAC22D2-DCA2-11E6-BA30-B554729FE32B._domainkey	IN	TXT	( "v=DKIM1; k=rsa; "
	  "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs5OCY0sX04ziF+sOHt/1kq3A7iAzAjBjb4JteaoFzu1q2uBOiQS0uyaFeY6CgSgRRbvPnq8cWLG/XMU0tM9gSGtgtWDmHOs6/+QgKp6zRmetfsyABA2Y2U+XJlVURUE5ai3KIA/njt7IGZ5yeFsdZIKmhOCAOPGCovq10xkZXHdjRwiqxbCYGXv2m3o74BcWtOLPfEvexD5PYx"
	  "aTWFbelJpGlDN7WdBCE+ObpLGkJ9co/1sVOcd3c9SHfPq3jcBAFm7oPX2ak7Fb7cslVK77lA2hBgMYqI2Sh+T64o6R33dU++Ej7CuImmv7PAqVUn5MjYr05t3LK9dwWM8Cm6aJ/QIDAQAA" )  ; ----- DKIM key ECAC22D2-DCA2-11E6-BA30-B554729FE32A for example.com

Обновите DNS, и проверьте результат выполнения команды:

# host -t txt SELECTOR._domainkey.DOMAIN Например: # host -t txt ECAC22D2-DCA2-11E6-BA30-B554729FE32B._domainkey.example.com ns1.example.com

Если ключ извлекается используйте /opt/zimbra/common/sbin/opendkim-testkey чтобы убедиться, что открытый ключ соответствует закрытому.

$ opendkim-testkey -d example.com -s ECAC22D2-DCA2-11E6-BA30-B554729FE32B -x /opt/zimbra/conf/opendkim.conf

Если получили ошибку:

opendkim-testkey: /opt/zimbra/conf/opendkim.conf: configuration error at line 0

Это означает, что файла /opt/zimbra/conf/opendkim.conf не существует, создать его можно командой:

$ zmprov ms `zmhostname` +zimbraServiceEnabled opendkim ./libexec/configrewrite opendkim

Если возникнет необходимость отозвать ключ подписи DKIM, установите пустой "р=" тег в записи TXT.

По умолчанию создается 1024-битный ключ (зависит от версии ZCS), изменить размер можно параметром -b.

Sender Policy Framework (SPF)

С помощью spf-записи владелец домена может указать список серверов, имеющих право отправлять email-сообщения для домена. В общем случае порядок следующий:

[версия] [механизмы] [-all | ~all | redirect]

Версия всегда spf1, модификаторы сообщают, кто может посылать почту:

  • a, mx - сервера из DNS записей A или MX соответственно,
  • ip4, ip6 - адрес сервера (можно указывать подсети, например: ip4:1.2.3.4/24),
  • include - взять данные с другого адреса

Параметр -all означает не принимать почту если проверка механизма не прошла, ~all если проверка не прошла, то действовать на усмотрение сервера получателя. Параметр redirect означает забрать правила с другого сервера.

Рассмотрим примеры.

Пример 1

example.com. IN TXT "v=spf1 ip4:62.220.58.72 a mx -all"

Для домена example.com принимать письма, отправленные с ip-адреса 62.220.58.72, так же принимать с серверов указанных в A и MX записях, сообщения с других серверов должны быть отклонены.

Пример 2

example.com. IN TXT "v=spf1 redirect:example.org"

Получить правила с домена example.com.

Пример 3

example.com. IN TXT "v=spf1 include:_spf.google.com -all"

Получать письма только с smtp-серверов компании Google.

Настройка DMARC

После создания записей SPF и DKIM необходимо настроить проверку DMARC, добавив в DNS запись типа TXT (аналогично SPF). Параметры могут быть следующими:

ТегОбязательноНазначениеПример
vДаВерсия протоколаv=DMARC1
pДаПравила для доменаp=quarantine
pctНетКакой процет сообщений, фильтроватьpct=20
ruaНетКуда присылать отчетыrua=mailto:postmaster@example.com
spНетПравила для субдоменовsp=reject
aspfНетРежим проверки соответствия для записей SPFaspf=r

Более подробно можно узнать в реестре тегов DMARC.

Правило для домена (что делать серверу-получателю, если проверка на spf и dkim не прошла) может быть одним из трех:

  • none - просто регистрировать сообщения для отчета, с самими сообщения ничего не делать;
  • quarantine – помечать такие сообщения как спам;
  • reject – отклонить получение сообщения на уровне SMTP.

Если вы хотите получать отчеты не забудьте указать адрес электронной почты в теге rua:

_dmarc.example.com IN TXT "v=DMARC1; p=none; rua=mailto:postmaster@example.com"

Результат добавления DNS-записей

Ниже показан пример dns записий, для зоны example.com:

$ORIGIN .	
$TTL 3600
example.com		IN	SOA	example.com.	hostmaster.example.com. (
					2017011011 ; serial
					3600 ; refresh [1h]
					600; retry [10m]
					1209600 ; expire [14d]
					3600 ; min TTL [1h]
					)
                NS	ns1.example.com.
		MX	10	ns1.example.com.	
		A	62.220.58.71	
		IN 	TXT 	"v=spf1 a mx ip4:62.220.58.71 ~all"
		
$ORIGIN example.com.
ECAC22D2-DCA2-11E6-BA30-B554729FE32B._domainkey	IN	TXT	( "v=DKIM1; k=rsa; "
	  "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs5OCY0sX04ziF+sOHt/1kq3A7iAzAjBjb4JteaoFzu1q2uBOiQS0uyaFeY6CgSgRRbvPnq8cWLG/XMU0tM9gSGtgtWDmHOs6/+QgKp6zRmetfsyABA2Y2U+XJlVURUE5ai3KIA/njt7IGZ5yeFsdZIKmhOCAOPGCovq10xkZXHdjRwiqxbCYGXv2m3o74BcWtOLPfEvexD5PYx"
	  "aTWFbelJpGlDN7WdBCE+ObpLGkJ9co/1sVOcd3c9SHfPq3jcBAFm7oPX2ak7Fb7cslVK77lA2hBgMYqI2Sh+T64o6R33dU++Ej7CuImmv7PAqVUn5MjYr05t3LK9dwWM8Cm6aJ/QIDAQAB" )  ; ----- DKIM key ECAC22D2-DCA2-11E6-BA30-B554729FE32B for example.com
_dmarc		IN	TXT	"v=DMARC1; p=none; rua=mailto:postmaster@example.com"
ns1             IN	A	62.220.58.71	
www      86400	IN	CNAME	example.com.

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


Защитный код
Обновить