Thank you for reading this post, don't forget to subscribe!
SPF и DKIM — это механизмы верификации почтового сервера, позволяющие проверить его подлинность. Многие почтовые сервера используют их при получении почты, чтобы быть уверенным в том, что получаемая почта не является спамом. Если вы организуете рассылку со своего почтового сервера, например, периодическую рассылку, либо рассылку писем от вашего интернет-магазина, вам, скорее всего, придется настраивать оба механизма, поскольку это позволит быть уверенным в том, что ваши письма доставляются и автоматически не определяются как спам.
Настройка SPF (Sender Policy Framework).
Настройка SPF является достаточно простой. Для этого достаточно создать записи DNS, определяющие, с каких серверов разрешена отправка почты для данного домена. Использоваться могут два типа записи — TXT и SPF.
1 2 3 |
domain.ru TXT "v=spf1 a mx ip4:<ip-адрес-почтового-сервера> -all" domain.ru SPF "v=spf1 a mx ip4:<ip-адрес-почтового-сервера> -all" </ip-адрес-почтового-сервера></ip-адрес-почтового-сервера> |
В данном примере указывается, что отправка почты данного домена разрешена только с хоста с адресом <ip-адрес-почтового-сервера>, для которого есть записи типа A и MX, со всех остальных отправка запрещена.</ip-адрес-почтового-сервера>
Для своего домена можно сгенерировать SPF-запись, например, здесь.
Поправка: Microsoft прикрыл лавочку, поэтому рекомендую официальную страницу OpenSPF, на которой можно подробно почитать о структуре записи SPF на английском языке.
После добавления записей не забудьте изменить serial для зоны DNS и перезагрузить информацию о доменной зоне. Если вы всё сделали правильно, то при отправке письма на другой домен, например, на gmail.com, в заголовках письма вы увидите следующий заголовок:
1 |
Received-SPF: pass |
Настройка DKIM (DomainKeys Identified Mail).
Настройка DKIM несколько сложнее, чем настройка SPF. Для работы этого механизма необходимо следующее:
— Почтовый сервер должен уметь подписывать письма
— Должны быть созданы приватный и публичный ключи
— Должны присутствовать записи в DNS, указывающие на наличие поддержки DKIM
Генерация ключей.
Ключи можно сгенерировать при помощи OpenSSL. Генерация приватного ключа:
1 2 3 4 5 6 |
# openssl genrsa -out dkimprivate.key 1024 Generating RSA private key, 1024 bit long modulus .++++++ .....................++++++ e is 65537 (0x10001) |
После генерации приватного ключа необходимо изменить права доступа к нему:
1 |
chmod 400 /etc/ssl/private/dkimprivate.key |
Генерация публичного ключа:
1 2 3 |
# openssl rsa -pubout -in dkimprivate.key -out dkimpublic.key writing RSA key |
Ключи готовы. Их можно разместить в директории, где хранятся другие ключи. Для Debian’а это директория /etc/ssl/private. Сгенерировать их можно также при помощи программы opendkim-genkey, входящую в пакет opendkim-tools. Теперь надо добавить записи в DNS. Записей будет две.
1 2 3 4 |
_domainkey.domain.ru. TXT "o=~;" mail._domainkey.domain.ru. TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCoCH8kcKOUHIx1Gbv461a9iZYaqS3LfjGLHR1aJEQkAChMEB5xc74UeEcTWo0rx5sBAgbhUj/5nefL4K4cxFLnFIKkPZZp/e2euTsKd0c3kE3Go5vu9jERzXnsb0jAQO0K85Jfw/gQahTC4qDOce5B5REsXtMtUR8r9J+dnACpzQIDAQAB" _adsp._domainkey.domain.ru. TXT "dkim=all" |
То, что идет после «p=» — это ключ, содержащийся в файле dkimpublic.key, он записывается в одну строчку. А запись «_adsp._domainkey.domain.ru» определяет, должны ли подписываться письма. Возможные варианты:
«dkim=all» — все письма должны подписываться
«dkim=discardable» — неподписанные письма не должны приниматься
«dkim=unknown» — то же самое, что и отсутствие такой записи.
После создания записей изменяем serial и перезагружаем настройки bind’а, если у вас установлен он. И теперь осталось последнее — настроить почтовый сервер. В качестве почтового сервера возьмем Postfix.
Настройка поддержки DKIM почтовым сервером Postfix.
Последняя и, пожалуй, самая важная часть — включение подписи писем почтовым сервером. Самое первое, что нужно сделать на этом этапе, — это установить opendkim:
1 |
yum install opendkim |
Теперь необходимо настроить этот сервис. Первым делом поменяем файл /etc/default/opendkim. Впишем туда следующую строчку:
1 2 |
SOCKET="inet:10024@localhost" |
Теперь наш сервер будет запускаться на порту 10024 на loopback-интерфейсе. Следующий файл, который необходимо изменить, — это /etc/opendkim.conf.
Раскомментируем строчку со словом Domain, вписываем название нашего домена:
1 2 |
Domain domain.ru |
Теперь указываем файл с приватным ключом:
1 2 |
KeyFile /etc/sll/private/dkimprivate.key |
После этого указываем селектор, который мы использовали для сгенерированного ранее публичного ключа, указывая его в записи DNS. В нашем случае это «mail»:
1 2 |
Selector mail |
Дописываем строчку:
1 2 |
Background yes |
Теперь можно рестартовать opendkim:
1 2 |
service opendkim restart |
И последний шаг — настройка непосредственно Postfix’а. Изменяем файл /etc/postfix/main.cf. Добавим туда следующие строчки:
1 2 3 4 5 |
milter_default_action = accept milter_protocol = 2 smtpd_milters = inet:localhost:10024 non_smtpd_milters = inet:localhost:10024 |
Теперь перезапускаем postfix и отправляем письмо. После получения смотрим заголовки письма. В них должен присутствовать следующий заголовок:
1 2 3 4 |
Authentication-Results: mx.google.com; spf=pass (google.com: domain of user@domain.ru designates 62.113.208.35 as permitted sender) smtp.mail=user@domain.ru; dkim=pass header.i=@domain.ru |
Если вы видите строчки «spf=pass» и «dkim=pass», значит вы все сделали правильно и ваш почтовый сервер теперь будет значительно лучше восприниматься другими почтовыми серверами, с чем я вас и поздравляю.