SPF, DKIM и DMARC являются основными настройками, призванными защитить почтовый сервер от рассылок вредоносных писем, которые могут быть сгенерированы мошенниками от вашего имени. Настройка записей SPF и DKIM не даст произвести отправку нежелательных рассылок. Также SPF и DKIM подскажут сервисам, что почтовые сообщения приходят именно от вас. В свою очередь DMARC – это определённый сценарий обработки писем, который является дополнительной защитой ваших рассылок.
Настройка SPF-записи
SPF (Sender Policy Framework) — это DNS-запись, содержащая список доверенных серверов, с которых может отправляться почта данного домена, и сведения о механизме обработки писем, отправленных с других серверов. Корректная настройка SPF позволит снизить вероятность рассылки спама злоумышленниками от вашего имени.
В панели управления DNS записями необходимо добавить TXT запись с параметрами SPF.
Если TXT-запись с параметрами SPF уже создана, необходимо ее отредактировать. Не рекомендуется создавать несколько SPF-записей для домена, так как это может вызывать проблемы с доставкой почты.
SPF-запись выглядит следующим образом:
v=spf1 include:_spf.timeweb.ru ~all
Основной синтаксис
Любая SPF-запись начинается с v=spf1, этот параметр не изменяется. Он указывает на версию записи, и в настоящее время поддерживается только spf1.
Далее указываются параметры (механизмы). Чаще всего используются следующие: all, ip4, ip6, a, mx, include, redirect. Также существуют, но используются значительно реже: ptr, exists, exp. Они все будут рассмотрены ниже.
Помимо механизмов используются префиксы (определители):
- + Pass, принимать почту. Прописывать этот параметр необязательно, он установлен по умолчанию (т.е. значения «+a +mx» и «a mx» — идентичны).
- — Fail, отклонять почту.
- ~ SoftFail, «мягко» отклонять (принимать почту, но помещать ее в «Спам»).
- ? нейтрально (обрабатывать как обычное письмо).
all
Параметр «all» подразумевает все серверы, не упомянутые отдельно в SPF-записи. «All» задает обработку полученных с них писем и указывается в конце записи.
Например:
v=spf1 ip4:174.23.147.0/24 ~all
— принимать почту только из подсети 174.23.147.0/24,; письма с других адресов должны быть помечены как спам.
v=spf1 a -all
— отвергать все письма с домена. Такую настройку можно использовать для доменов, с которых не должна отправляться вообще никакая почта.
ip4 / ip6
Используется для указания конкретных адресов и подсетей, из которых могут отправляться письма. Синтаксис для IPv4 и IPv6 идентичен.
v=spf1 ip4:174.23.147.0/24 ~all
— принимать почту из подсети 174.23.147.0/24.
v=spf1 ip6:2005:da8::12 ~all
— принимать почту с IPv6-адреса 2005:da8::12.
a
IP отправителя проверяется на соответствие A-записи домена.
v=spf1 a ~all
— принимать почту с A-записи текущего домена.
v=spf1 a:sub.domain.ru ~all
— принимать почту с A-записи домена sub.domain.ru.
mx
IP отправителя проверяется на соответствие IP-адресам серверов, указанных в MX-записях домена. На текущий день для многих современных сервисов эта директива уже не так важна, так как серверы входящей и исходящей почты зачастую имеют разные IP.
v=spf1 mx mx:sub.domain.ru -all
— принимать почту с MX-серверов текущего домена и домена sub.domain.ru.
v=spf1 mx/24 -all
— принимать почту из подсети, в которую входят MX-серверы текущего домена.
include
Позволяет учитывать в SPF-записи настройки SPF другого домена.
v=spf1 a include:other-domain.ru -all
— принимать почту с A-записи текущего домена и серверов, указанных в SPF-записи домена other-domain.com.
При такой настройке проверяется SPF домена other-domain.ru; если это, допустим, «v=spf1 a -all», то далее IP отправителя проверяется на соответствие A-записи домена other-domain.ru.
redirect
Технически, redirect является модификатором, а не механизмом. Он выполняет одну основную функцию: сообщает, что необходимо применять настройки SPF другого домена.
v=spf1 redirect=other-domain.ru
— почта должна приниматься или отклоняться согласно настройкам домена other-domain.ru.
Прочие механизмы
Здесь мы рассмотрим оставшиеся механизмы, которые используются в настройках значительно реже.
ptr
PTR-запись IP-адреса отправителя проверяется на соответствие указанному домену. Данный механизм требует большого количества DNS-запросов при проверке, поэтому без острой необходимости использовать его в SPF не рекомендуется.
v=spf1 ptr:other-domain.ru -all
— принимать почту со всех адресов, PTR-запись которых направлена на домен other-domain.ru.
exists
Запрашивается А-запись указанного домена; если она существует, проверка считается пройденной. Другими словами, проверяется, резолвится ли домен на какой-либо (любой) IP-адрес.
v=spf1 exists:mydomain.ru -all
— принимать почту, если существует A-запись домена mydomain.ru.
exp
Параметр «exp» применяется для отправки сообщения об ошибке отправителю письма. С помощью «exp» в SPF прописывается определенный поддомен, в TXT-записи которого указан текст сообщения об ошибке. Имя поддомена и текст ошибки может быть любым.
Параметр «exp» всегда указывается в конце записи (после all).
Например:
v=spf1 mx -all exp=error-spf.mydomain.ru
При этом TXT-запись домена error-spf.mydomain.ru содержит: «Not authorized to send mail for this domain».
Примеры настроек
Настройка SPF для «Почты для доменов» от mail.ru
Если вы отправляете почту только с серверов mail.ru:
v=spf1 redirect=_spf.mail.ru
Если вы отправляете почту так же и с других серверов (укажите IP-адреса или подсети вместо IP1, IP2 и т.д.):
v=spf1 ip4:IP1 ip4:IP2 ip4:IP3 include:_spf.mail.ru ~all
Настройка SPF для Яндекс.Почты
При использовании только серверов Яндекса:
v=spf1 redirect=_spf.yandex.net
При использовании также и других серверов (укажите IP-адреса или подсети вместо IP1, IP2 и т.д.):
v=spf1 ip4:IP1 ip4:IP2 ip4:IP3 include:_spf.yandex.net ~all
Настройка SPF для Google
При использовании только серверов Google:
v=spf1 include:_spf.google.com ~all
При использовании также и других серверов (укажите IP-адреса или подсети вместо IP1, IP2 и т.д.):
v=spf1 ip4:IP1 ip4:IP2 include:_spf.google.com ~all
Другие примеры
v=spf1 a ip4:174.25.203.1 include:domain2.ru -all
— принимать почту с IP-адресов, соответствующих A-записям текущего домена, с IP-адреса 174.25.203.1 и серверов, указанных в SPF-записи domain2.ru; прочие письма отклонять.
v=spf1 mx/24 a:domain2.ru/24 ~all
— принимать почту из подсети, в которую входят MX-серверы текущего домена, и из подсети, в которую входят A-записи домена domain2.ru; прочие письма помещать в спам.
Настройка DKIM
Для писем, отправляемых с сервера функцией php mail(), указать DKIM-подпись очень сложно. На помощь в данном случае приходит библиотека PHPMailer или же специальные плагины для отправки писем в CMS.
В этом случае для того, чтобы письма, отправляемые с сервера виртуального хостинга, проходили проверку DKIM, необходимо выполнить следующую настройку:
- Подключиться к серверу по SSH.
- Сгенерировать закрытый ключ командой ниже, указав вместо domain.ru имя вашего домена:
openssl genrsa -out domain.ru.private 1024
- Сохранить путь к сгенерированному ключу — файлу
domain.ru.private(путь потребуется ввести в процессе настройки далее). Файл будет создан в той же директории, откуда выполнялась команда. - Сгенерировать открытый ключ командой ниже, указав вместо domain.ru имя вашего домена:
openssl rsa -in domain.ru.private -out domain.ru.public -pubout
Содержимое файла domain.ru.public после генерирования ключа будет следующим:
-----BEGIN PUBLIC KEY-----
ключ
-----END PUBLIC KEY-----
5. В разделе «Домены и поддомены» в настройках домена создать TXT-запись для поддомена mail._domainkey.domain.ru со следующим содержимым:
v=DKIM1; k=rsa; p=ключ_из_предыдущего_пункта
Ключ должен быть указан в одну строку, без BEGIN и END.
- В настройках скрипта библиотеки PHPMailer или используемого для отправки писем плагина CMS указать полный путь к файлу domain.ru.private, который был сгенерирован в пункте 2 (например, /home/u/user/domain.ru.private).
В случае если вы используете PHPMailer, необходимо указать путь в параметре DKIM_private; в параметре DKIM_selector указать mail.
<?php
// config.php
return [
'mail_tpls' => 'emails/',
'mail' => [
'from' => '[email protected]',
'name' => 'robot'
],
'dkim' => [
'enabled' => true,
'domain' => 'domain.ru',
'private' => '/root/keys/domain.ru.private',
'selector' => 'mail',
'passphrase' => ''
],
];
// метод класса для отправки почты
function sendMail($recipient, $subj, $message, $files = null) {
$mail = new PHPMailer(true);
try {
// убираем заголовки PhpMailer из письма
$mail->XMailer = null;
$mail->setLanguage('ru');
$mail->CharSet = PHPMailer::CHARSET_UTF8;
$mail->setFrom($this->config['mail']['from'], $this->config['mail']['name']);
$mail->addAddress($recipient);
$mail->isHTML(true);
$mail->Subject = $subj;
$mail->Body = $message;
if ($files && count($files)) {
foreach ($files as $file) {
$filename = basename($file);
$mail->addEmbeddedImage($file, $filename);
}
}
if ($this->config['dkim'] && $this->config['dkim']['enabled']) {
$mail->DKIM_domain = $this->config['dkim']['domain'];
$mail->DKIM_private = $this->config['dkim']['private'];
$mail->DKIM_selector = $this->config['dkim']['selector'];
$mail->DKIM_passphrase = $this->config['dkim']['passphrase'];
$mail->DKIM_identity = $mail->From;
}
$res = $mail->send();
} catch (Exception $e) {
$res = "Message could not be sent. mailer Error: {$mail->ErrorInfo}";
}
return $res;
}
Настройка DMARC
DMARC (Domain-based Message Authentication, Reporting and Conformance) — это техническая спецификация, созданная группой организаций для борьбы со спамерами, подделывающими адреса отправителей.
Благодаря настройке DMARC владельцы доменов могут создавать правила обработки писем, которые поступили с доменов, не прошедших авторизацию. Воспользуйтесь нашей статьей для того, чтобы продумать все этапы настройки политики DMARC заранее.
Подготовка к настройке DMARC
Перед настройкой DMARC необходимо:
- Настроить SPF-запись;
- Настроить DKIM-подпись.
Это связано с тем, что технология DMARC использует данные средства. Если отправленное сообщение не прошло проверку DKIM и SPF, то оно не пройдет и DMARC. Если же сообщение успешно прошло хотя бы одну проверку (DKIM или SPF), то и проверку DMARC сообщение пройдет успешно.
Настройка DMARC
Чтобы настроить политику DMARC:
- Перейдите на сайт провайдера, у которого находится DNS-зона управления вашим доменом;
- Введите логин и пароль для входа в «Панель управления»;
- Перейдите в раздел управления DNS-зонами необходимого домена.
- Добавьте новую TXT-запись вида _dmarc.example.com (где вместо example.com должен быть ваш домен), соответствующую выбранной политике.
Пример записи: «v=DMARC1;p=none;rua=mailto:[email protected];ruf=mailto:[email protected];fo=s»
Некоторые провайдеры ставят кавычки для TXT-записи самостоятельно. Вы можете уточнить необходимость кавычек у хостинг-провайдера или взять за образец другую ТХТ-запись домена, если она есть.
В TXT-записи можно использовать следующие теги:
| Название тега | Назначение | Пример | Требуется | Дополнительно |
|---|---|---|---|---|
| v | Версия протокола | v=DMARC1 | да | |
| p | Правила для домена | p=reject | да | none — не принимать никаких действий quarantine — отправлять сообщения в спам reject — не принимать сообщения |
| aspf | Режим проверки соответствия для SPF-записей | aspf=s | нет | r (relaxed) — разрешать частичные совпадения, например субдоменов данного домена s (strict) — разрешать только полные совпадения |
| pct | Сообщения, подлежащие фильтрации (в %) | pct=40 | нет | |
| sp | Правила для субдоменов | sp=reject | нет | none — не принимать никаких действий quarantine — отправлять сообщения в спам reject — не принимать сообщения |
| rua | Адрес для сводных отчетов | rua=mailto:[email protected] | нет |
Если вы хотите получать отчеты (rua) на домен, который отличается от домена DMARC, необходимо разместить TXT запись для почтового домена специального вида. Например, если домен с DMARC — example.com, а получать отчеты вы хотите на домен test.ru, необходимо в DNS домена test.ru добавить следующую TXT-запись: example.com._report._dmarc.test.ru со значением «v=DMARC1»
Примеры:
- Отклонять все сообщения, не прошедшие проверку DMARC: «v=DMARC1; p=reject»
- Отклонять все сообщения, не прошедшие проверку DMARC, и отправлять все отчеты на ящик [email protected]: «v=DMARC1; p=reject; rua=mailto:[email protected]»
- 30% сообщений, которые приходят от вашего домена, но не проходят проверки DMARC, помещаются в карантин: «v=DMARC1; p=quarantine; pct=30»
Политика DMARC: «v=DMARC1; p=none» не защищает вас от спуфинга. Используйте ее только как промежуточный этап при настройке DMARC.
По материалам сайта timeweb.com
Проверка настроек
https://www.mail-tester.com/?lang=ru