SPF и DomainKeys для «чайников»
В заголовках писем от CMS моего сайта я вижу такую строку
Казалось бы, правильный IP-адрес и домен, а принимающий сервер пишет, что не дозволенный отправитель. Я начал разбираться с этим вопросом и открыл для себя SPF (Sender Policy Framework), DomainKeys и DKIM (DomainKeys Identified Mail).
Оказалось, что можно обозначить определенные IP адреса разрешенными для отправки почты конкретного домена. А потом ещё и стравить цифровую подпись, удостоверяющую, что письмо действительно было отправлено с указанного сервера.
Особенностью моей ситуации было то, что вся почта обслуживается сервисом Яндекс.Почта для домена. Но и сам хост также может отправлять письма.
У меня уже была указана spf-запись, которая приводится в инструкции по настройке «Почты для домена». Мне нужно было как-то добавить IP адрес хоста в разрешенные отправители почты. Это на деле оказалось не так уж сложно:
Эта конструкция предписывает считать хост, обозначенный записью A домена, как разрешенный и далее получить ещё дополнительные правила у Яндекса.
Синтаксис и масса других примеров описаны в документации к проекту Sender Policy Framework.
dkfilter
Я решил пойти дальше и настроить цифровую подпись всех писем, которые отсылаются с моего хоста. После недолгих поисков я нашел отличное решение для своей VPS под управлением Ubuntu — dkfilter. Не буду пересказывать принцип настройки этого фильтра. Автор достаточно подробно и точно описал, что нужно сделать.
От себя добавлю несколько изменений, которые мне потребовалось внести.
Конфигурация фильтра
Мне потребовалось руками указать домен noteskeeper.ru , так как скрипт фильтра не мог его правильно определить. Подозреваю, что это последствия какой-то ошибки конфигурирования системы. Пока я остановился на этом варианте.
Ещё я указал метод генерации подписи simple вместо nofws . Если я правильно понял, то это только влияет на то, как будет преобразован текст письма с заголовками прежде, чем будет вычислена сигнатура.
DNS-запись
В инструкции указано, что открытый ключ домена нужно вводить в формате
Из RFC 4870 я узнал, что вместо селектора selector1 может быть любая строка. Главное, чтобы такой же селектор был указан в конфигурации dkfilter.
Потом выяснилось, что тег t=y обозначает режим тестирования. Когда тестирование будет закончено, этот тег стоит убрать из записи.
sendmail
Чтобы посылать тестовые сообщения я использовал sendmail. Они, к сожалению, шли в обход фильтра. В FAQ приведены настройки, которые нужно добавить в конфигурацию postfix.
Валидируем подпись домена
Подпись успешно проверена.
Ещё заметки со схожей тематикой
Категории
Коментарии к заметке
Пользуюсь SPF уже несколько лет, благо вообще никакой настройки на стороне почтового севера не требует. А недавно настроил на гугле DKIM для своего домена, там тоже для этого ничего делать не потребовалось, только запись в DNS добавить. Но я всю почту шлю через гугль, а тут советы помогут тем, у кого свой smtp сервер.
Т.е. Гугл для DKIM сгенерировал тебе запись с открытым ключом, а закрытый так у него где-то в недрах остался?
Я думал просто сделать отсылку почты через Яндекс, но замутить такую хрень было гораздо интереснее.
Да, приватного ключа от DNS записи google._domainkey у меня нет. Но если я захочу слать почту и через свой сервер, то просто сделаю для него отдельную DNS запись. Tам же метка прописывается в DKIM заголовке, и от этой метки приватный ключ уже будет у меня.
Просто пока не возникало потребности слать почту автоматом, а из MUA проще слать сразу через гугль.
Тоже занялся данным вопросом, посмотрел DKIM в Exim легко настраивается и перешел на него.
Добрый день! Подскажите, пожалуйста, как решить такую задачку.
Есть домен example.com и VPS (ubuntu 12.04). на VPS прописал FQDN example.com на провайдере прописал PTR example.com правильно настроил SPF и DKIM. проблема в том, что для почты мы используем Яндекс.Почта, но и сайт может отправлять письма (счета на оплату клиентам) были опробованы sendmail и exim4
проблема при отправке почты на внутренние адреса… т.е. например сообщение с обратной связи сайта должно уходить на info@example.com, но в логах обеих программ пишется, что адресат не найдет… я так понимаю, потому что сам хост обозначен как example.com, и программы пробуют доставлять почту локально, заставить их отсылать на яндекс у меня так и не получилось. А если менять FQDN сайта, то будет подозрение на спам (отправка с локальных доменов). Насколько я знаю ip должен соответствовать домену
Антон, я отправляю любые письма с сервера только через Яндексову «Почту для домена». Для этого завёл специальный аккаунт, который может авторизоваться на их SMTP сервере. В этом случае не важно какие будут значения полей FROM и TO. Так в итоге получилось значительно проще, чем обслуживать ещё и свой SMTP сервер.
Если вам обязательно нужен локальный SMTP сервер, то стоит поискать в интернетах что-нибудь про настройку «relay» у него. Сам дельного ничего сказать по этому поводу не могу — я не настоящий админ.
изначально я пользовался их smtp, но там есть ограничения + их уникальная «спамоборона», которая ведет себя непредсказуемо, и просто если им не нравится письмо их smtp его не принимает, т.е. оно даже не отправляется (если бы хотя бы доставлялось клиентам в папку «спам», то ладно, но отправить нельзя). Саппорт яндекса ответил, что для таких рассылок этот сервис не предусмотрен.
По поводу релея перелопатил пол интернета, ничего толкового так и не нашел. Для себя придумал единственный выход — купить домен чисто для smtp сервера, и рассылать с него уже куда мне надо.. Платные smtp уж очень много денег хотят ежемесячно…
Спасибо за ответ 🙂
А я вот бьюсь с gmail и никак не могу настроить… Тоже почта для домена на яндексе… Отпрвляю с яндекса на gmail — подпись есть. Отправляют с сервера на яндекс — подпись есть. Отправляю с сервера на gmail — подписи нет, пиьсмо в спаме
Вадим, подозреваю, что с сервера письма всегда уходят неподписанными. То, что прийдя на почту Яндекса они оказываются подписанными, исключительно заслуга Яндекса и ПДД. Проверяйте как работает dkfilter на вашем SMTP-сервере.
Добавить комментарий
© 2009–2019 Владимир Кузнецов.
Все права защищены и принадлежат их владельцам.
Копирование материалов данного блога допускается только с разрешения автора.
Для домена имеются записи следующего вида.
domain.ru TXT v=spf1 ip4:000.000.000.00 a:domain.ru -all
domain.ru TXT v=DKIM1; g=*; k=rsa; p=публичный ключ
При попытке отправить почту на любой сервер (за редкими исключениями) все ОК:
Authentication-Results: mx.google.com; spf=pass (google.com: domain of mail@domain.ru designates 000.000.000.00 as permitted sender)
А вот Яндекс присылает вот такое:
spf=fail (mxfront19.mail.yandex.net: domain of domain.ru does not designate 000.000.000.00 as permitted sender) smtp.mail=mail@domain.ru
Подскажите, пожалуйста, куда копать и что чинить?
- Вопрос задан более трёх лет назад
- 10155 просмотров
![]()
Часы проверил, все ОК. Вот так выглядят:
Connecting to mx.yandex.ru [77.88.21.89]:25… connected
SMTP > EHLO vm8986
SMTP > MAIL FROM: SIZE=1493
SMTP>> RCPT TO:
SMTP>> DATA
SMTP ok
SMTP recipient ok
SMTP > writing message and terminating «.»
SMTP > QUIT
LOG: MAIN
=> mail@yandex.ru R=dnslookup T=remote_smtp H=mx.yandex.ru [77.88.21.89]
LOG: MAIN
Completed
Вот так заголовок письма:
Received: from mxfront3.mail.yandex.net ([127.0.0.1])
by mxfront3.mail.yandex.net with LMTP id 0LVOw9WO
for ; Wed, 20 Jun 2012 23:00:21 +0400
Received: from domain.ru (domain.ru [000.000.000.00])
by mxfront3.mail.yandex.net (nwsmtp/Yandex) with ESMTP id 0LLqUOxN-0LLKfIni;
Wed, 20 Jun 2012 23:00:21 +0400
X-Yandex-Front: mxfront3.mail.yandex.net
X-Yandex-TimeMark: 1340218821
X-Yandex-Spam: 1
Authentication-Results: mxfront3.mail.yandex.net; spf=fail (mxfront3.mail.yandex.net: domain of nepofigizm.ru does not designate 000.000.000.00 as permitted sender) smtp.mail=mail@domain.ru
Received: from root by vm8986 with local (Exim 4.72)
(envelope-from )
id 1ShQ8a-0003hW-S9
for mail@yandex.ru; Wed, 20 Jun 2012 23:00:20 +0400
Message-Id:
Date: Wed, 20 Jun 2012 23:00:20 +0400
To: mail@yandex.ru
Subject: gygygy
User-Agent: Heirloom mailx 12.4 7/29/08
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
From: root
Return-Path: mail@domain.ru
X-Yandex-Forward: d9fb68cc4e9f8d3bea3123bc97fec88e
2012-06-20 23:00:21 1ShQ8a-0003hW-S9 mail@yandex.ru R=dnslookup T=remote_smtp H=mx.yandex.ru [77.88.21.89]
2012-06-20 23:00:21 1ShQ8a-0003hW-S9 Completed
Больше ничего нигде нет. Не представляю, что исправлять.
Блог про веб-разработку, администрирование, дизайн
суббота, 27 августа 2011 г.
Received-SPF: softfail (google.com: domain of transitioning me@domain.com does not designate 1.2.3.4 as permitted sender) client-ip=1.2.3.4;
Такой вариант записи создается по умолчанию, если на сервере вы пользуетесь панелью ISPManager.
В моем случае все MX-записи были на google. Так удобней организовывать почту. То есть MX-записи у меня от гугла, а SPF-запись содержит информацию о том, что надо проверить A и MX-записи.
То есть gmail.com получает письмо с адреса me@domain.com и проверяет для домена SPF-запись. Видит, что там прописаны IP, A и MX-запись. IP и A-запись как раз относятся к 1.2.3.4, а вот MX-записи все прописаны от google. И Gmail’у это не нравится.
Ну и как бы нам не нужна совершенно запись про mx, потому как на нашем сервере мы не держим их.
Значит выход простой — надо переписать SPF-запись: