SPF-запись - проверяем валидность отправителя

  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:866852b8e91665e50ec6996403f6eb2e' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtejustify\">Как всем известно, протокол отправки электронной&nbsp;почты SMTP, подразумевает, что в качестве отправителя можно указать любой почтовый ящик. Таким образом можно послать письмо, подставив в поле &quot;From&quot; вымышленное значение. Процесс такого почтового обмана называется Спуфинг (e-mail spoofing). Чтобы бороться с этим явлением, был разработан и введен в действие стандарт SPF &ndash; <em><strong>Sender Policy Framework (структура политики отправителя).</strong></em></p>\n<p class=\"rtejustify\">SPF позволяет владельцу домена указать в TXT-записи&nbsp;домена специальным образом сформированную строку, указывающую список серверов, имеющих право отправлять email-сообщения с обратными адресами в этом домене.</p>\n<p class=\"rtejustify\">Рассмотрим простой пример SPF-записи.</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\">\nexample.org. IN TXT &quot;v=spf1 +a +mx -all&quot;</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Теперь более детально о допустимых опциях. Рассмотрим варианты поведения получателя, в зависимости от используемых опций:</p>\n<ul>\n<li class=\"rtejustify\"><strong>&quot;v=spf1&quot;</strong> - используемая версия SPF.</li>\n<li class=\"rtejustify\"><strong>&quot;+&quot;</strong> - принимать корреспонденцию (Pass). Этот параметр установлен по умолчанию. Тоесть,&nbsp;если никаких параметров не установлено,&nbsp;то это &quot;Pass&quot;;</li>\n<li class=\"rtejustify\"><strong>&quot;-&quot;</strong> - Отклонить (Fail);</li>\n<li class=\"rtejustify\"><strong>&quot;~&quot;</strong> - &quot;мягкое&quot; отклонение (SoftFail). Письмо будет принято, но будет помечено как СПАМ;</li>\n<li class=\"rtejustify\"><strong>&quot;?&quot;</strong> - нейтральное отношение;</li>\n<li class=\"rtejustify\"><strong>&quot;mx&quot;</strong> - включает в себя все адреса серверов,&nbsp;указанные в MX-записях домена;</li>\n<li class=\"rtejustify\"><strong>&quot;ip4&quot;</strong> - опция позволяет указать конкретный IP-адрес или сеть адресов;</li>\n<li class=\"rtejustify\"><strong>&quot;a&quot;</strong> - указываем поведение в случае&nbsp;получения письма от конкретного домена;</li>\n<li class=\"rtejustify\"><strong>&quot;include&quot;</strong> - включает в себя хосты, разрешенные SPF-записью указанного домена;</li>\n<li class=\"rtejustify\"><strong>&quot;all&quot;</strong> - все остальные сервера,&nbsp;не перечисленные в SPF-записи.</li>\n</ul>\n<p class=\"rtejustify\">Итак, попробуем разобраться, что же значит SPF-запись, указанная выше.</p>\n<ul>\n<li class=\"rtejustify\"><strong>&quot;+a&quot;</strong> - разрешает прием писем от узла, IP-адрес которого совпадает с IP-адресом в A-записи для example.org;</li>\n<li class=\"rtejustify\"><strong>&quot;+mx&quot;</strong> -&nbsp; разрешает прием писем, если отправляющий хост указан в одной из MX-записей для example.org;</li>\n<li class=\"rtejustify\"><strong>&quot;-all&quot;</strong> - все сообщения, не прошедшие верификацию с использованием перечисленных механизмов, следует отвергать.</li>\n</ul>\n<p class=\"rtejustify\">Для лучшего понимания того, как работает SPF, рассмотрим еще один,&nbsp;более сложный&nbsp;пример.</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\">\nexample.org. IN TXT &quot;v=spf1 mx ip4:195.3.159.250 +a:smtp.mail.ru include:gmail.com ~all&quot;</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Теперь более подробно о используемых опциях...</p>\n<ul>\n<li class=\"rtejustify\"><strong>&quot;mx&quot;</strong> - принимать письма от серверов, указанных в MX-записях;</li>\n<li class=\"rtejustify\"><strong>&quot;ip4:195.3.159.250&quot;</strong> - принимать письма, отправленные с IP-адреса <strong>195.3.159.250</strong>;</li>\n<li class=\"rtejustify\"><strong>&quot;+a:smtp.mail.ru&quot;</strong> - то же, что и <strong>a:smtp.mail.ru</strong>. Принимать от <strong>smtp.mail.ru</strong>;</li>\n<li class=\"rtejustify\"><strong>&quot;include:gmail.com&quot;</strong> - принимать письма с серверов,&nbsp;разрешенных SPF-записями <strong>gmail.com</strong>;</li>\n<li class=\"rtejustify\"><strong>&quot;~all&quot;</strong> - принимать письма со всех остальных серверов, но помечать их как СПАМ</li>\n</ul>\n<p class=\"rtejustify\">А теперь рассмотрим еще более &quot;экзотичный&quot; пример. В описании возможных опций указывалось,&nbsp;что возможно указание сетей ip-адресов. Стоит отметить,&nbsp;что это применимо и к записям &quot;a&quot; и &quot;mx&quot;. Рассмотрим следующий пример.</p>\n<p>&nbsp;</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\">\nexample.org. IN TXT &quot;v=spf1 mx/24 a:muff.kiev.ua/24 -all&quot;</pre></td>\n</tr>\n</tbody>\n</table>\n<ul>\n<li class=\"rtejustify\"><strong>&quot;mx/24&quot;</strong> - в список разрешенных отправителей входят все IP-адреса, находящихся в тех же&nbsp;сетях&nbsp;класса С, что и MX-ы домена;</li>\n<li class=\"rtejustify\"><strong>&quot;a:muff.kiev.ua/24&quot;</strong> - в список разрешенных отправителей входят все IP-адреса, находящихся в тех же сетях класса С, что и А-записи домена muff.kiev.ua;</li>\n<li class=\"rtejustify\"><strong>&quot;-all&quot;</strong> - всех остальных отправителей - блокируем.</li>\n</ul>\n<p class=\"rtejustify\">Иногда можно встретить следующие записи (очень редко):</p>\n<ul>\n<li class=\"rtejustify\"><strong>&quot;ptr&quot;</strong> - проверяет PTR-запись IP-адреса отправителя. Если она сходится с указаным&nbsp;доменом, то механизм проверки выдает положительный результат. Тоесть, разрешено отправлять всем IP-адресам,&nbsp;PTR-запись которых направлены на указанный домен. Серьезным недостатком даного метода есть то, что генерируется очень большое количество DNS-запросов;</li>\n<li class=\"rtejustify\"><strong>&quot;exists&quot;</strong> - выполняется проверка, резолвится ли домен на какой-либо IP-адрес. Тоесть, по существу,&nbsp;выполняется проверка работоспособности доменного имени. Кстати, не имеет значения, на какой IP-адрес резолвится домен, даже если это &quot;серые&quot; сети (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) или loopback (127.0.0.1).</li>\n</ul>\n<p class=\"rtejustify\">Пример использования:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\">\nexample.org. IN TXT &quot;v=spf1 ptr:example.org exist:example.org -all&quot;</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Также не будет излишним ознакомиться со следующими опциями: <strong>redirect</strong> и <strong>exp</strong>.</p>\n<p class=\"rtejustify\"><strong>&quot;redirect&quot;</strong> - указывает получателю,&nbsp;что нужно проверять SPF-запись указаного домена,&nbsp;вместо текущего домена. Пример:</p>\n<p>&nbsp;</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\">\nexample.org. IN TXT &quot;v=spf1 redirect:example.com ~all&quot;</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">&nbsp;В даном примере&nbsp;будет проводится проверка SPF-записи домена <strong>example.com</strong>, а не <strong>example.org</strong>.</p>\n<p class=\"rtejustify\"><strong>&quot;exp&quot;</strong> - использование даной опции позволяет задать сообщение о ошибке, которое будет передано отправителю при возникновении таковой. Размещается в конце&nbsp;SPF-записи,&nbsp;даже после&nbsp;опции <strong>all</strong>.&nbsp;Рассмотрим более детально механизм работы опции <strong>exp</strong>.</p>\n<p class=\"rtejustify\">Допустим, что у домена example.org следущая SPF-запись:</p>\n<p>&nbsp;</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\">\nexample.org. IN TXT &quot;v=spf1 +a +mx -all exp=spf.example.org&quot;</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">&nbsp;</p>\n<p class=\"rtejustify\">Теперь содаем TXT-запись для домена spf.example.org:</p>\n<p>&nbsp;</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>\n<pre class=\"rtejustify\">\nspf.example.org. IN TXT &quot;You host not allowed e-mail to me from this domain!&quot;</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">&nbsp;</p>\n<p class=\"rtejustify\">В результате этих шаманских действий SPF-запись будет контролировать, чтобы почта доставлялась только от валидных хостов,&nbsp;а всем остальным будет отправляться сообщение о ошибке, прописанное в TXT-записи домена spf.example.org.</p>\n<p class=\"rtejustify\">На этой позитивной ноте, пожалуй, статью можно закончить. Азы использования SPF-записи описаны, а механизм работы можно&nbsp;изучить более детально&nbsp;при практическом использовании.</p>\n', created = 1767602557, expire = 1767688957, headers = '', serialized = 0 WHERE cid = '2:866852b8e91665e50ec6996403f6eb2e' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:4c480fd05cdc2dc8f0f685dd868d6cf0' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Привет вот читал на досуге наткнулся, вопрос&nbsp;spf.example.org. IN TXT &quot;You host not allowed e-mail to me&quot; может все же from this domain ?&nbsp;</p>\n', created = 1767602557, expire = 1767688957, headers = '', serialized = 0 WHERE cid = '2:4c480fd05cdc2dc8f0f685dd868d6cf0' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:a2e2185db39b6aac3c61ef099ae8b1f6' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Согласен, так будет более информативно. Откоректировал запись.</p>\n', created = 1767602557, expire = 1767688957, headers = '', serialized = 0 WHERE cid = '2:a2e2185db39b6aac3c61ef099ae8b1f6' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>&nbsp;</p>\n<p>&nbsp;</p>\n', created = 1767602557, expire = 1767688957, headers = '', serialized = 0 WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:ea7975b8ba5f8f874929c8b866b89a75' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>А можно ли добавлять в SFP-запись реального домена ip4:127.0.0.1 ? Не нарушает ли это какие-то стандарты/правила? Это для того, чтобы из веб-морды можно было почту отправлять, которая на том же сервере крутится, где и MTA.</p>\n', created = 1767602557, expire = 1767688957, headers = '', serialized = 0 WHERE cid = '2:ea7975b8ba5f8f874929c8b866b89a75' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:a9e4757ff2e0fc38e7de4c694c69cd5a' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>127.0.0.1 не должно фигурировать... Если в заголовках имеем данный IP, значить &quot;что-то пошло не так...&quot;.</p>\n<p>Настройте веб-интерфейс на работу с &quot;правильным&quot; IP, вот и все.</p>\n', created = 1767602557, expire = 1767688957, headers = '', serialized = 0 WHERE cid = '2:a9e4757ff2e0fc38e7de4c694c69cd5a' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>&nbsp;</p>\n<p>&nbsp;</p>\n', created = 1767602557, expire = 1767688957, headers = '', serialized = 0 WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:482b1a461676835d5af6614017b3e98d' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Действительно, спасибо за подсказку. Так и сделал, теперь работает и без 127.0.0.1 в SPF-записи.</p>\n', created = 1767602557, expire = 1767688957, headers = '', serialized = 0 WHERE cid = '2:482b1a461676835d5af6614017b3e98d' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:dcd324da879dd1f9f74256928435f74c' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Есть проблемка, на сервере написано так (домены и ip заменил):</p>\n<p>$ dig txt @ns1.site.ua site.com.ua+short<br />\n&quot;v=spf1 a mx ip4:200.200.100.50 ~all&quot;</p>\n<p>&nbsp;</p>\n<p>в toolbox.googleapps.com выдает ошибку spf:</p>\n<p>&nbsp;</p>\n<div>\n<div>\n<div>В записи SPF должно быть указано, что серверы Google могут отправлять почту от имени домена.</div>\n</div>\n</div>\n<div>\n<div>Decisiondomain owner discourages use of this hostRecordv=spf1 a mx ip4:200.200.100.50 ~all</div>\n<div>&nbsp;</div>\n<div>Что не так?</div>\n</div>\n', created = 1767602557, expire = 1767688957, headers = '', serialized = 0 WHERE cid = '2:dcd324da879dd1f9f74256928435f74c' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:bc771ffad5e99939435d1e99cb863212' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Скорее всего Google хочет видеть свои сервера в составе прочих:</p>\n<p>&quot;v=spf1 a mx ip4:200.200.100.50<strong> </strong>include:_spf.google.com ~all&quot;</p>\n<p>&nbsp;</p>\n', created = 1767602557, expire = 1767688957, headers = '', serialized = 0 WHERE cid = '2:bc771ffad5e99939435d1e99cb863212' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a class=\"thickbox\" href=\"/files/imagepicker/1/wake_up_ua.png\"><img alt=\"Вставай, Україно!\" class=\"imgp_img\" src=\"/files/imagepicker/1/thumbs/wake_up_ua.png\" style=\"height:200px; width:150px\" /></a></p>\n', created = 1767602557, expire = 1767688957, headers = '', serialized = 0 WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:cc913d232116f0426090404133377d88' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a href=\"http://muff.kiev.ua/rss.xml\"><img alt=\"RSS\" width=\"160\" height=\"60\" src=\"http://muff.kiev.ua/files/muf-rss.png\" /></a></p>\n', created = 1767602557, expire = 1767688957, headers = '', serialized = 0 WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:39649256b636e3d5ded656bc52bd8c01' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
Версия для печатиОтправить другуPDF version

Как всем известно, протокол отправки электронной почты 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:195.3.159.250 +a:smtp.mail.ru include:gmail.com ~all"

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

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

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

 

example.org. IN TXT "v=spf1 mx/24 a:muff.kiev.ua/24 -all"
  • "mx/24" - в список разрешенных отправителей входят все IP-адреса, находящихся в тех же сетях класса С, что и MX-ы домена;
  • "a:muff.kiev.ua/24" - в список разрешенных отправителей входят все IP-адреса, находящихся в тех же сетях класса С, что и А-записи домена muff.kiev.ua;
  • "-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 from this domain!"

 

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

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

Ваша оценка: Нет Средняя: 4.8 (67 голосов)

Re: SPF-запись - проверяем валидность отправителя

Привет вот читал на досуге наткнулся, вопрос spf.example.org. IN TXT "You host not allowed e-mail to me" может все же from this domain ? 

Re: SPF-запись - проверяем валидность отправителя

Согласен, так будет более информативно. Откоректировал запись.

Re: SPF-запись - проверяем валидность отправителя

А можно ли добавлять в SFP-запись реального домена ip4:127.0.0.1 ? Не нарушает ли это какие-то стандарты/правила? Это для того, чтобы из веб-морды можно было почту отправлять, которая на том же сервере крутится, где и MTA.

Re: SPF-запись - проверяем валидность отправителя

127.0.0.1 не должно фигурировать... Если в заголовках имеем данный IP, значить "что-то пошло не так...".

Настройте веб-интерфейс на работу с "правильным" IP, вот и все.

Re: SPF-запись - проверяем валидность отправителя

Действительно, спасибо за подсказку. Так и сделал, теперь работает и без 127.0.0.1 в SPF-записи.

Re: SPF-запись - проверяем валидность отправителя

Есть проблемка, на сервере написано так (домены и ip заменил):

$ dig txt @ns1.site.ua site.com.ua+short
"v=spf1 a mx ip4:200.200.100.50 ~all"

 

в toolbox.googleapps.com выдает ошибку spf:

 

В записи SPF должно быть указано, что серверы Google могут отправлять почту от имени домена.
Decisiondomain owner discourages use of this hostRecordv=spf1 a mx ip4:200.200.100.50 ~all
 
Что не так?

Re: SPF-запись - проверяем валидность отправителя

Скорее всего Google хочет видеть свои сервера в составе прочих:

"v=spf1 a mx ip4:200.200.100.50 include:_spf.google.com ~all"

 

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вставай, Україно!

Литература

Если Админ Вас не слушает - значит, у него работает firewall на внешний трафик!