SPF запись для почтового сервера добавляется DNS доменного имени для ограничения количества серверов с которых могут отправляться письма подписываемые доменом.
Каждый раз сервер, принимающий почту делает запрос к DNS и выясняет имеется ли запись типа SPF — если запись есть он анализирует ее и поступает с полученным письмом так как запись предписывает.
Как проверяется SPF запись DNS
Записи SPF задаются в конфигурационном файле BIND или, на практике, часто в личном кабинете компании на NS серверы которого делегировано доменное имя.
Для домена example.com запись может выглядеть так:
. | IN TXT | v=spf1 mx -all |
SPF добавляется в виде TXT записи. Правила записи могут отличаться в зависимости от принципов работы интерфейса провадера DNS (чаще всего, это относится к наличию или отсутствию кавычек), их всегда следует уточнять, но в общем случае запись формируется по одному и тому же принципу
v=spf1 — указывает версию, данный элемент присутствует всегда
mx— говорит о том, что письма могут отправляться от всех хостов заданных в MX записях домена, аналогом может быть a:mail.example.com, т.е. указание определенного доменного имени. mx используется значительно чаще.
-all — предписывает отвергать все письма, поступающие с хостов, включение которых не предполагается mx/a тэгами. Альтернативой является задание ~all с тильдой в качестве первого знака, письма при этом будут доставляться, но в служебных заголовках будет пометка о том, что отправитель подделан. Эта опция используется чаще поскольку снижает риск потери нужным писем.
SPF запись в отличие от DKIM может присутствовать в DNS при отсутствии конфигурации Postfix, в случае с DKIM добавлять запись не рекомендуется.
Добавление SPF записи для почтового сервера на примере Postfix
Настройки позволят почтовому серверу осуществлять проверку наличия SPF записи и её значения.
Операционная система сервера команды для которого приведены ниже — Debian/Ubuntu.
Прежде всего установим необходимые пакеты:
apt-get install postfix-policyd-spf-python postfix-pcre
Открываем для редактирования файл /etc/postfix/master.cf в его конец дорбавляем две строки, которые обеспечат поддержку policyd-spf
mcedit /etc/postfix/master.cf
policyd-spf unix — n n — 0 spawn
user=policyd-spf argv=/usr/bin/policyd-spf
Также увеличим таймаут Postfix, это не даст пакету завершить процесс принудительно если транзакция выполняется слишком долго
mcedit /etc/postfix/main.cf
policyd-spf_time_limit = 3600
В этот же конфигурационный файл добавим check_policy_service entry:
smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination,check_policy_service unix:private/policyd-spf
Значения лучше указывать друг за другом через запятую без пробелов, иначе могут возникать ошибки. Опция reject_unauth_destination обязательна должна идти перед check_policy_service unix:private/policyd-spf
Перезапускаем Postfix
/etc/init.d/postfix restart
Чтобы проверить все ли получилось отправляем письмо из командной строки
mail [email protected] -s 'testing SPF' < /dev/null
Получив письмо просматриваем служебные заголовки — spf=pass будет свидетельствовать об успехе. SPF запись для почтового сервера добавлена.