Вопрос или проблема
Контекст:
• услуга электронной почты, обслуживаемая третьей стороной
• на VPS установлен postfix как сервер электронной почты только для отправки.
DNS имеет две TXT-записи с именем @
v=spf1 include:spf.someengine.com ?all
v=spf1 mx ip4:111.222.333.444 ~all
Может ли такая конфигурация создавать проблемы с почтовыми серверами? Предпочтительнее ли объединить их в одну запись, например,
v=spf1 include:spf.someengine.com mx ip4:111.222.333.444 ~all
?
Насколько мне известно и согласно соответствующему RFC, RFC 7208 – раздел 3.2, несколько SPF-записей должны приводить к ошибке. Их следует объединить в одну запись SPF TXT.
3.2. Множественные DNS-записи
Доменное имя НЕ ДОЛЖНО иметь несколько записей, которые могут привести к
проверке авторизации, выбирающей более одной записи. См. раздел 4.5
для правил выбора.
…
Если результирующий набор записей включает более одной записи, check_host() выдает результат “permerror”.
…
Правильный способ форматирования SPF-записей, чтобы они слишком длинными для одной записи DNS TXT, заключается в распределении их по нескольким уникально названным записям SPF TXT, которые объединяются в основной SPF-записи с помощью директивы include:
.
Примером этого является запись SPF для gmail.com
:
_spf.google.com. 113 IN TXT "v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all"
_netblocks.google.com. 57 IN TXT "v=spf1 ip4:35.190.247.0/24 ip4:64.233.160.0/19 ip4:66.102.0.0/20 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:74.125.0.0/16 ip4:108.177.8.0/21 ip4:173.194.0.0/16 ip4:209.85.128.0/17 ip4:216.58.192.0/19 ip4:216.239.32.0/19 ~all"
_netblocks2.google.com. 22 IN TXT "v=spf1 ip6:2001:4860:4000::/36 ip6:2404:6800:4000::/36 ip6:2607:f8b0:4000::/36 ip6:2800:3f0:4000::/36 ip6:2a00:1450:4000::/36 ip6:2c0f:fb50:4000::/36 ~all"
_netblocks3.google.com. 42 IN TXT "v=spf1 ip4:172.217.0.0/19 ip4:172.217.32.0/20 ip4:172.217.128.0/19 ip4:172.217.160.0/20 ip4:172.217.192.0/19 ip4:172.253.56.0/21 ip4:172.253.112.0/20 ip4:108.177.96.0/19 ip4:35.191.0.0/16 ip4:130.211.0.0/22 ~all"
Ответ или решение
Вопрос о возможных конфликтах SPF-записей в DNS особенно актуален, когда у вас несколько сторонних систем, участвующих в обработке и отправке электронной почты. Рассмотрим конкретную ситуацию:
Контекст:
- Ваши электронные письма обрабатываются сторонним сервисом.
- На вашем VPS установлен Postfix как отправляющий почтовый сервер.
- В DNS имеются две TXT-записи с одинаковым именем
@
:v=spf1 include:spf.someengine.com ?all
v=spf1 mx ip4:111.222.333.444 ~all
Такая конфигурация скорее всего приведет к проблемам. Согласно RFC 7208, несколько SPF-записей для одного и того же доменного имени являются ошибкой и должны будут привести к результату "permerror" при проверке авторизации.
Почему эта ситуация может быть проблематичной:
-
Конфликтующие записи: Наличие нескольких SPF-записей заставит брандмауэры и системы проверки авторизации выбрать только одну из этих записей или вообще не выбрать, что приведет к ошибке.
-
Жесткие ограничения: В случае возникновения ошибки "permerror", ваши сообщения могут быть заблокированы при отправке или попадать в папку спама, так как ни один из полисов SPF не будет применим.
Рекомендуемое решение:
Объедините эти записи в единое SPF-запись. Например:
v=spf1 include:spf.someengine.com mx ip4:111.222.333.444 ~all
Общее правило для длинных SPF-записей: Если запись слишком длинная для одного DNS TXT, используйте конструкцию с include:
, как это сделано у Gmail. Основной записью должна быть запись по умолчанию, а дополнительные длинные записи выносите под другие доменные имена.
Заключение:
Используя правильную конфигурацию SPF, вы поддерживаете репутацию отправителя и обеспечиваете доставку ваших писем до получателя. Это не только повышает защиту вашей почты, но и доверие к вашему домену в глазах почтовых провайдеров.