Назад | Перейти на главную страницу

Почему DMARC работает с адресом отправителя, а не с отправителем конверта (обратный путь)?

Несколько писем отправлено с моего веб-сервера на адрес Gmail, где From: адрес websitevisitor@gmail.com, были отмечены Gmail как спам. В From: Поле заполняется из данных формы и соответствует фактическому адресу электронной почты посетителя, который часто является адресом Gmail. В Return-Path: всегда указывает на адрес account@mywebserver.com, что означает, что проверки SPF и DKIM будут работать.

Когда я просматриваю необработанные электронные письма в учетной записи Gmail, я вижу следующее:

Delivered-To: webformrecipient@gmail.com
...
Return-Path: <account@mywebserver.com>
Received: from mywebserver.com (mywebserver.com. [my:ipv6:address])
        by mx.google.com with ESMTPS id xxx
        for <webformrecipient@gmail.com>
        (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
        Tue, 02 Feb 2016 00:40:02 -0800 (PST)
Received-SPF: pass (google.com: domain of account@mywebserver.com designates my:ipv6:address as permitted sender) client-ip=xxx;
Authentication-Results: mx.google.com;
       spf=pass (google.com: domain of account@mywebserver.com designates my:ipv6:address as permitted sender) smtp.mailfrom=account@mywebserver.com;
       dkim=pass header.i=@mywebserver.com;
       dmarc=fail (p=NONE dis=NONE) header.from=gmail.com
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mywebserver.com; s=mydkim;
    h=Date:Message-Id:Sender:From:Subject:To; bh=w2snQznwxlVRVACmfQELC7VGmD1dcYdiCXbCIRYFKRs=;
    b=a0Vy3Ky43J5FdiWSuQ4qvTTH47G+Js0W/qtRU5gMlxfesNqrlyaIyExaIZlWvHNL4o0LNOF1GI94w4C41mmH+2JIkMEQZazw0MainP7UyUgsm/RZbAWoRuecPv+k108FlsWMP/l1UttXAdlvBVJmV2UGsYYlSSjKErQEF8tv3K0=;
Received: from apache by mywebserver.com with local (Exim 4.80)
    (envelope-from <account@mywebserver.com>)
    id 1aQWVF-00009b-2X
    for webformrecipient@mywebserver.com; Tue, 02 Feb 2016 09:40:01 +0100
To: webformrecipient@mywebserver.com
From: Website User <website-user@gmail.com>
Sender: webformrecipient@mywebserver.com
...

Обратите внимание, что проверки SPF и DKIM проходят, а проверка DMARC - нет. После некоторого поиска я отследил это до DMARC, используя From: адрес для получения ссылочного домена, согласно этот ответ о переполнении стека.

Три вопроса:

  1. Неужели действительно dmarc=fail в чем причина того, что письмо отнесено к спаму Gmail?
  2. Почему DMARC работает с From: адрес, а не Return-Path (отправитель конверта) как SPF и DKIM?
  3. Если теперь также From: заголовок должен соответствовать адресу @mydomain.com тогда как нам указать актуальный (логический, плоть и кровь) отправитель сообщения?

Подумайте о SPF и DKIM как о способах проверки почтового пути, а о DMARC как о расширении, которое также проверяет отправителя сообщения. Думайте об этом как о доставке письма FedEx. Легко проверить, откуда был отправлен конверт и что курьер был законным, но это не дает возможности доказать, что письмо внутри конверта действительно от человека, чье имя напечатано на нем.

Ваш веб-сервер является допустимым SMTP-сервером для mywebserver.com и что ваш адрес отправителя является законным, но этого недостаточно, чтобы другие серверы доверяли тому, что у вас есть разрешение на отправку с адреса website-user@gmail.com. Как GMail узнает, что ваш сервер не был взломан или иным образом не использовался со злым умыслом? Серверы Gmail не будут слепо доверять вам отправлять почту в качестве одного из своих пользователей - если, возможно, вы не размещены у них, и тогда у вас, вероятно, возникнут проблемы с отправкой в ​​Yahoo.

Чтобы ответить на вашу первую часть вопроса, да, очень вероятно, что именно поэтому GMail классифицирует его как спам. Самые старые формы спама связаны с подделкой адреса «От». Это то, что видят большинство пользователей, когда получают сообщение, и это основное поле, которому они хотят доверять. Когда сообщение с легитимного почтового сервера отправляется с использованием адреса От, который не принадлежит этому почтовому серверу, это все еще красный флаг.

Как вы упомянули, DMARC работает с адресом From как часть спецификации. Конечно, это затрудняет написание веб-приложений, отправляющих сообщения от чьего-либо имени, но в этом-то и дело. Относительно Зачем они это делают - ну, это дело разработчиков спецификации, но это компромисс. Они выбирают большой путь и создают систему, которая работает очень хорошо, если вы не выходите за рамки этих ограничений. Возможно, будущие механизмы найдут способ обойти это.

Неудачное решение - использовать только те адреса, которые вы контролируете. Чтобы ответить на третий вопрос, подпишите сообщения своим доменным именем и укажите в теле письма, что оно было отправлено от имени website-user@gmail.com. В противном случае вам придется попросить получателей добавить адрес в свой белый список. Для законного разработчика веб-приложений это не очень весело, но это защитит неприкосновенность почтового ящика получателя. Возможно, вам повезет с использованием заголовка Reply-To с адресом электронной почты веб-пользователя.

Это ограничение обсуждается на этот поток DMARC.

А пока вы можете попытаться убедиться, что ваш сервер не занесен в черный список ни в каких RBL. Может случиться так, что вы можете не пройти DMARC, но все же пройти некоторые спам-фильтры, если у вас достаточно хорошая репутация ... но я бы не стал на это полагаться.

1) да, скорее всего, сбой dmarc приведет к тому, что Gmail отбросит ваши письма

2) тоже интересовался бы ответом на это

3) Я бы (и мы это делаем) использовал поле для ответа для адреса клиента, наши письма выглядят так:

с: website@mydomain.com

на: user@mydomain.com

тема: контактная форма

ответ на: customer-addy@somewhere.com

Надеюсь это поможет

Есть два вопроса "почему":

  1. Почему получающий почтовый сервер выполняет проверку таким образом
  2. Почему DMARC был разработан таким образом?
    • потому что люди, которые его разработали, очевидно, не читали раздел 3.6.2 RFC 5322, либо неверно истолковал, либо проигнорировал.

Этот раздел четко устанавливает, что Sender: заголовок, если он присутствует, имеет приоритет над From: заголовок, с целью идентификации стороны, ответственной за отправку сообщения:

В поле «Отправитель:» указывается почтовый ящик агента, ответственного за фактическую передачу сообщения. Например, если секретарь должен послать сообщение другому человеку, почтовый ящик секретаря появится в поле «Отправитель:», а почтовый ящик фактического автора появится в поле «От:». Если отправитель сообщения может быть указан одним почтовым ящиком, а автор и отправитель идентичны, поле «Отправитель:» НЕ ДОЛЖНО использоваться. В противном случае ДОЛЖНЫ отображаться оба поля.

Сравните это с обоснованием, приведенным в RFC 7489:

DMARC подтверждает использование RFC5322. От домен, требуя, чтобы он соответствовал (согласовывался) с аутентифицированным идентификатором. В RFC5322. От домен был выбран в качестве центрального идентификатора механизма DMARC, потому что это обязательное поле заголовка сообщения и поэтому гарантированно присутствует в совместимых сообщениях, а большинство агентов пользователей почты (MUA) представляют RFC5322. От в качестве отправителя сообщения и отображать часть или все содержимое этого поля заголовка для конечных пользователей.

Я считаю, что эта логика ошибочна, поскольку RFC 5322 продолжает явно вызывать эту ошибку:

Примечание: информация о передатчике присутствует всегда. Отсутствие поля «Отправитель:» иногда ошибочно принимают за то, что агент, ответственный за передачу сообщения, не указан. Это отсутствие просто означает, что отправитель идентичен автору и поэтому не помещается в поле «Отправитель:».

Я считаю, что DMARC нарушен по замыслу, потому что

  • это объединяет право отправлять и доказательство авторства;
  • он неправильно интерпретирует предыдущие RFC, и
  • при этом он ломает любой ранее совместимый list-serv, который идентифицировал себя, добавляя свой собственный Sender: заголовок.

Если Sender: поле присутствует, DMARC должен сказать для аутентификации который поле и игнорировать From: поле. Но это не то, о чем он говорит, и поэтому я считаю, что он сломан.

RFC 7489 продолжается:

Таким образом, это поле используется конечными пользователями для определения источника сообщения и, следовательно, является основной целью злоупотреблений.

Это просто неправильно (в контексте оправдания игнорирования Sender: заголовок). Во время разработки DMARC обычные почтовые клиенты обычно отображали комбинацию информации из Sender: и From: поля, что-то вроде Из имя-для-списка-рассылки @ сервер от имени user@original.domain. Таким образом, пользователю всегда было ясно, кто несет ответственность за отправку сообщения, которое он просматривает.


Предложения, которые Reply-To: является адекватной заменой, также ошибочны, потому что этот заголовок часто неверно интерпретируется как «дополнительный получатель», а не «замещающий получатель», и заменяет исходный отправитель Reply-To: ухудшит функциональность для те пользователей.