Больше нет писем в папке Spam: настройка SMTP-сервера

Проблема почтового спама сейчас стоит достаточно остро. Спаммеры часто подделывают электронные письма, указывая в качестве отправителя e-mail произвольного пользователя. SPF (Sender Policy Framework) — простой стандарт, помогающий отличить настоящие письма от подделки. SPF работает только при условии, что в DNS-записи о домене отправителя присутствует специальное поле. В настоящей статье описывается как с помощью этой технологии защитить письма с собственного домена от подделки.

Стандарт отправки электронной почты SMTP позволяет указывать произвольный адрес в качестве адреса отправителя. Такая незащищенность приводит к массовым злоупотреблениям. Для защиты от неавторизованной отправки писем в 2003 году был предложен стандарт SPF, а в апреле 2006 года SPF принят в качестве стандарта RFC-4408 . Сейчас SPF поддерживается подавляющим большинством интернет-провайдеров и крупных интернет-компаний.

Идея стандарта состоит в следующем: в DNS-запись домена добавляется специальное поле типа TXT, содержащее информацию о серверах, которым разрешено или запрещено отправлять почту от имени данного домена. Кроме того, запись может содержать описание политики поведения для всех посторонних серверов. Рассмотрим пример SPF-записи для домена сайт

@ IN TXT "v=spf1 +mx +ip4:77.91.227.90/26 +a:mail.2x4.ru +a:sendmail.2x4.ru +ip4:92.241.168.112 include:gmail.com include:yandex.ru ~all"

Запись начинается с v=spf1, а затем следует перечень серверов или групп серверов с указанием политики поведения (в форме модификатора). Возможны 4 модификатора:

  • + принять (модификатор по умолчанию)
  • - отклонить
  • ~ мягкое отклонение, пометить как возможный спам
  • ? отнестить нейтрально (поведение по умолчанию, если сервер не соответствует ни одному выражению).

После модификатора указывается идентификатор механизма верификации. Перечислим несколько наиболее часто используемых механизмов:

  • mx - относится к почтовым серверам данного домена
  • ip4 - задает ip-адрес или подсеть ip-адресов
  • a - задает доменное имя сервера
  • include - разрешает отправку писем серверам, разрешенным SPF-записью другого домена
  • all - любой сервер; указывают обычно последним, задавая таким образом политику по умолчанию.

Подробное описание синтаксиса записей доступно на английском языке на официальном сайте SPF .

При получении письма, согласно стандарту, принимающий письмо сервер должен запросить текстовые DNS-записи домена отправителя. Если существует текстовая запись, начинающаяся с v=spf1, то принимающий сервер последовательно проверяет сервер, от которого получено письмо на соответствие с выражениями в строке. Если произошло совпадение, то процесс сравнения останавливается и дальнейшее поведение определяется модификатором совпавшего выражения. Например, в приведенном выше примере, отправка разрешена для почтового сервера домена, серверов c ip-адресом или доменным именем среди заданных, а также для всех серверов, разрешенных SPF-записью доменов gmail.com и yandex.ru. Политика по умолчанию - мягкое отклонение.

Определив SPF-запись вы снижаете вероятность ошибочного отнесения ваших писем к числу спама. Чем более жесткая политика по умолчанию, тем больше доверие к письмам с данного домена. Если указать в конце записи "-all", то все письма с неавторизованных серверов должны отклоняться принимающим сервером. Задавая столь жесткую политику, необходимо быть уверенным, что никто из пользователей не отправляет почту через сервер локального провайдера, отсутствующий в списке. После настройки SPF обязательно протестируйте отправку писем разными способами разным адресатам. Не забудьте также, что сайт обычно тоже отправляет письма.


. Перепечатка в интернет-изданиях разрешается только с указанием автора и прямой ссылки на оригинальную статью. Перепечатка в печатных изданиях допускается только с разрешения редакции.

Серверов, с которых разрешена отправка электронной почты. Это необходимо для защиты репутации домена и снижения вероятности попадания писем в спам. Дело в том, что при отправке письма, можно подставить абсолютно любой адрес отправителя в поле "From:" , чем и пользуются злоумышленники при рассылке спама и фишинга от чужого имени. Такие рассылки могут значительно навредить репутации вашего домена, и создать проблемы с доставкой электронной почты с вашего домена. А вот IP адреса почтового сервера, с которого была произведена отправка, подделать нельзя. Соответственно если SPF запись для домена есть, то почтовые службы сначала проверят с того ли IP адреса идет рассылка и если не с того, то будут действовать согласно правилам указанным в SPF.

Как создать SPF запись

Как уже писалось выше, SPF это обычная текстовая запись, но данные указываются с использованием определенного синтаксиса, который мы сейчас и рассмотрим.
Пример SPF записи: " v=spf1 +a +mx -all " . Означает эта запись следующее — принимать почту с IP адресов, которые указаны в DNS записях типа A и MX для этого же домена (имеется ввиду домен, для которого это запись указана), со всех остальных почту отклонить. Можно ее немного укоротить и написать так: " v=spf1 a mx -all " , результат работы будет тот же. Рассмотрим синтаксис более детально.
  • "v=spf1" — используемая версия SPF. На текущий момент она одна, первая версия.
  • "+" — принимать почту. Этот параметр установлен по умолчанию, его отсутствие означает то же самое, что и его наличие.
  • "-" — отклонять почту.
  • "~" — принимать почту, но помещать ее в спам.
  • "?" — относится нейтрально. То есть, принимать как обычное письмо.
  • "mx" — содержит IP адреса всех серверов, указанных в DNS записях типа MX для домена.
  • "ip4" — позволяет указать конкретные IPv4 адреса .
  • "ip6" — то же, что и "Ip4", только указывается IPv6 адрес .
  • "a" — указывает на IP адреса, которые указаны в DNS записях типа A для домена.
  • "include" — разрешает получение почты, согласно SPF другого домена.
  • "all" — все остальные, не перечисленные в SPF записи.

Рассмотрим сложный пример SPF записи

"v=spf1 mx a ip4:154.56.125.94 a:some-domain.com mx: some-domain.com include: some-domain .com ~all"
mx — принимать почту со своих почтовых серверов.
a — принимать почту с серверов, которые указаны в записях типа A для своего домена.
ip4:154.56.125.94 — принимать почту отправленную с IP 154.56.125.94. Также можно указывать подсети в формате 154.56.125.0/24.
a:some-domain.com — принимать почту с серверов, которые указаны в записях типа A для домена some-domain.com. Здесь также есть возможность указать подсеть в формате some-domain.com/24.
mx:some-domain.com — принимать почту с почтовых серверов, указанных в записях типа MX для домена some-domain.com. Возможно указание подсети аналогично с a:some-domain.com.
include:some-domain.com — разрешает получать почту согласно правилам, указанным в SPF для домена some-domain.com.
~all — помещать в спам все письма, отправленные с адресов, не указанных в SPF. Если указать -all, почта будет отклонятся.
Это наиболее часто используемые конструкции для создания SPF, но есть и другие, редко используемые, но о которых стоит знать.​
  • "ptr" — проверяется PTR запись IP адреса отправителя на совпадение с указанным доменом.
    "v=spf1 ptr:your-domain.com -all"
  • "exists" — проверяется резолвится ли домен по какому либо IP адресу, причем IP адрес может быть абсолютно любой.
    "v=spf1 exists:your-domain.com -all"
  • "redirect" — говорит о том, что правила в SPF записи необходимо проверять на другом домене, а не на текущем.
    "v=spf1 redirect:some-domain.com -all"
  • "exp" — позволяет указать текст, который будет отправляеться отправителю письма в случае не соответствия правил, указанных в SPF. Указывается самым последним.
    "v=spf1 a mx -all exp=spferror.your-domain.com"
    Небольшое пояснение, для того, что бы отдавался текст ошибки, необходимо создать домен spferror.your-domain.com и добавить для него TXT запись с желаемым текстом.

SPF-запись — проверка отправителя.

Как всем известно, протокол отправки электронной почты SMTP, подразумевает, что в качестве отправителя можно указать любой почтовый ящик. Таким образом можно послать письмо, подставив в поле «From» вымышленное значение. Процесс такого почтового обмана называется Спуфинг (e-mail spoofing). Чтобы бороться с этим явлением, был разработан и введен в действие стандарт SPF – Sender Policy Framework (структура политики отправителя).

SPF позволяет владельцу домена указать в TXT-записи домена специальным образом сформированную строку, указывающую список серверов, имеющих право отправлять email-сообщения с обратными адресами в этом домене.

Рассмотрим простой пример SPF-записи:

example.org. IN TXT «v=spf1 +a +mx -all»

Теперь более детально о допустимых опциях. Рассмотрим варианты поведения получателя, в зависимости от используемых опций:

  • «v=spf1» — используемая версия SPF.
  • «+» — принимать корреспонденцию (Pass). Этот параметр установлен по умолчанию. Тоесть, если никаких параметров не установлено, то это «Pass»;
  • «-» — Отклонить (Fail);
  • «~» — «мягкое» отклонение (SoftFail). Письмо будет принято, но будет помечено как СПАМ;
  • «?» — нейтральное отношение;
  • «mx» — включает в себя все адреса серверов, указанные в MX-записях домена;
  • «ip4» — опция позволяет указать конкретный IP-адрес или сеть адресов;
  • «a» — указываем поведение в случае получения письма от конкретного домена;
  • «include» — включает в себя хосты, разрешенные SPF-записью указанного домена;
  • «all» — все остальные сервера, не перечисленные в SPF-записи.

Итак, попробуем разобраться, что же значит SPF-запись, указанная выше.

  • «+a» — разрешает прием писем от узла, IP-адрес которого совпадает с IP-адресом в A-записи для example.org;
  • «+mx» — разрешает прием писем, если отправляющий хост указан в одной из MX-записей для example.org;
  • «-all» — все сообщения, не прошедшие верификацию с использованием перечисленных механизмов, следует отвергать.

Для лучшего понимания того, как работает SPF, рассмотрим еще один, более сложный пример:

example.org. IN TXT «v=spf1 mx ip4:78.110.50.123 +a:mail.ht-systems.ru include:gmail.com ~all»

Теперь более подробно о используемых опциях...

  • «mx» — принимать письма от серверов, указанных в MX-записях;
  • «ip4:78.110.50.123» — принимать письма, отправленные с IP-адреса 78.110.50.123;
  • «+a:mail.ht-systems.ru» — то же, что и a:mail.ht-systems.ru. Принимать от mail.ht-systems.ru;
  • «include:gmail.com» — принимать письма с серверов, разрешенных SPF-записями gmail.com;
  • «~all» — принимать письма со всех остальных серверов, но помечать их как СПАМ

А теперь рассмотрим еще более «экзотичный» пример. В описании возможных опций указывалось, что возможно указание сетей ip-адресов. Стоит отметить, что это применимо и к записям «a» и «mx». Рассмотрим следующий пример:

example.org. IN TXT «v=spf1 mx/24 a:hts.ru/24 -all»

«mx/24» — в список разрешенных отправителей входят все IP-адреса, находящихся в тех же сетях класса С, что и MX-ы домена;
«a:hts.ru/24» — в список разрешенных отправителей входят все IP-адреса, находящихся в тех же сетях класса С, что и А-записи домена hts.ru;
«-all» — всех остальных отправителей — блокируем.

Иногда можно встретить следующие записи (очень редко):

«ptr» — проверяет PTR-запись IP-адреса отправителя. Если она сходится с указаным доменом, то механизм проверки выдает положительный результат. Тоесть, разрешено отправлять всем IP-адресам, PTR-запись которых направлены на указанный домен. Серьезным недостатком даного метода есть то, что генерируется очень большое количество DNS-запросов;
«exists» — выполняется проверка, резолвится ли домен на какой-либо IP-адрес. Тоесть, по существу, выполняется проверка работоспособности доменного имени. Кстати, не имеет значения, на какой IP-адрес резолвится домен, даже если это «серые» сети (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) или loopback (127.0.0.1).

Пример использования:

example.org. IN TXT «v=spf1 ptr:example.org exist:example.org -all»

Также не будет излишним ознакомиться со следующими опциями: redirect и exp.

«redirect» — указывает получателю, что нужно проверять SPF-запись указаного домена, вместо текущего домена. Пример:

example.org. IN TXT «v=spf1 redirect:example.com ~all»

В даном примере будет проводится проверка SPF-записи домена example.com, а не example.org.

«exp» — использование даной опции позволяет задать сообщение о ошибке, которое будет передано отправителю при возникновении таковой. Размещается в конце SPF-записи, даже после опции all. Рассмотрим более детально механизм работы опции exp.

Допустим, что у домена example.org следущая SPF-запись:

example.org. IN TXT «v=spf1 +a +mx -all exp=spf.example.org»

Теперь содаем TXT-запись для домена spf.example.org:

spf.example.org. IN TXT «You host not allowed e-mail to me»

В результате этих шаманских действий SPF-запись будет контролировать, чтобы почта доставлялась только от валидных хостов, а всем остальным будет отправляться сообщение о ошибке, прописанное в TXT-записи домена spf.example.org.

Так же стоит обратить внимание, что любое решение о блокировке или маркировке письма как спам, решает программа которая обрабатывает получение почты на сервере, иногда даже почтовые программы это тоже делают.

В настоящее время почтовые сервисы всё больше уделяют внимания системам для борьбы со СПАМом. Но всё чаше сообщения которые ждут от нас наши клиенты попадают в СПАМ. В большинстве случаев это происходит потому что почтовый сервер на который мы отправили почту не может распознать действительно ли почту отправили мы а не кто то посторонний.

Есть несколько способов как это исправить, самый простой это добавление SPF-записи. SPF-запись добавляется к описанию домена и показывает, с каких серверов можно отправлять почту от имени домена.

Для этого нам потребуется:

    Доступ к редактированию наших DNS записей.

    Знать адрес сервера с которого отправляются сообщения.

Начнём с конца.

Основы SPF

В SPF используется 3 блока:

  1. Префикс-механизм

    Модификатор

Версия на данный момент только одна - “v=spf1”.

Префиксы:

    "+" Pass - принимать сообщения. Параметр по умолчанию

    "-" Fail - не принимать сообщения

    "~" SoftFail - отправлять в СПАМ

    "?" Neutral - нейтральное отношение, требуется дополнительная проверка.

Основные механизмы:

    all - любой сервер

    ip4, ip6 - адрес сервера,

    a, mx - сервер из DNS записи A или MX соответственно

    include - взять данные с другого адреса

Модификаторы:

    redirect - использовать данные другого адреса

Примеры

Игнорировать всю почту с домена.

v=spf1 +a +mx -all

Принимать сообщения с серверов указанных в A и MX записях, сообщения с остальных серверов должны быть отклонены.

Принимать сообщения с серверов указанных MX записях, сообщения с остальных серверов будут приняты, но отправлены в СПАМ.

v=spf1 redirect:example.com

Забрать все правила с домена example.com.

v=spf1 ip4:example.com/24 -all

Доверять всей почте из адресного пространства example.com класса C (например, есле example.com имеет ip адрес 10.123.41.12, то доверие будет всем 10.123.41.). Остальная почта будет проигнорирована.

Какие могут быть серверы отправки почты?

Условно серверы отправки почты можно разделить на 3 группы:

    Популярные почтовые сервисы, к которым вы привязали свой домен. Например: Google App, Yandex PDD, Mail.ru для бизнеса.

  1. Собственный почтовый сервер

SPF для популярных сервисов.

На момент написания статьи они выглядят следующим образом.

“v=spf1 include:_spf.google.com ~all”

“v=spf1 redirect=_spf.yandex.ru”

“v=spf1 redirect=_spf.mail.ru”

Как подобрать SPF для собственного почтового сервера или хостинга.

Для начала Вы можете заглянуть в настройки своего почтового клиента и посмотреть какой используется для отправки почты (SMTP сервер). Но этот адрес не всегда может соответствовать адресу сервера с которого действительно будет отправлено сообщение.

Самый верный вариант, это просмотреть исходное сообщение полученного письма и найти там информацию о сервере отправителя.

Например:

Received: from gateway08.websitewelcome.com (gateway08.websitewelcome.com. )

Из этого сообщения мы можем понять имя сервера “gateway08.websitewelcome.com” и ip адрес 67.18.36.18. IP адрес лучше не использовать, т.к. он может изменяться очень часто. Домен 3-го уровня в этом случае то же лучше не использовать, т.к. из его названия понятно что он не один, и следующее письмо может быть отправлено уже с другого домена. Лучше просто взять “websitewelcome.com”.

$ dig TXT websitewelcome.com

В ответе найдём:

websitewelcome.com. 19117 IN TXT "v=spf1 a mx ip4:64.5.0.0/16 ip4:67.18.0.0/16 ip4:69.41.0.0/16 ip4:69.56.0.0/16 ip4:69.93.0.0/16 ip4:70.85.0.0/16 ip4:74.52.0.0/16 ip4:174.132.0.0/16 ip4:174.120.0.0/16 ip4:173.192.100.229 ip4:173.192.111.0/24 include:spf.websitewelcome.com"

Данная запись выглядит вполне жизнеспособной, можем просто забрать её:

“v=spf1 redirect=websitewelcome.com”

Заключение

SPF позволяет ограничить с каких серверов может отправляться почта от имени Вашего домена. При настройке, необходимо быть внимательным что бы не дать “лишним” адресам разрешения. Так же Вы можете воспользоваться конструктором , который поможет сгенерировать SPF запись.