Настройка SPF + DKIM

Несколько раз ко мне ображались люди в т.ч. и ЛС-овцы (Nepofigist с которым был этот разговор еще на хабре) по поводу того, что письма в гуглопочте попадают в спам.
Такая же проблема появилась и вчера в goloskarpat.info.
Беглый анализ заголовков показал что на нашем сервере нет ни SPF ни DKIM. Поэтому пришлось в экстренном порядке прикручивать эти технологии к Debian-овскому exim-у.
Ниже предлагаю «спартанский» конспект из пунктов которые были проделаны.

SPF

SPF не требует модификаций конфигурации почтовика и затрагивает только ДНС сервер.
Подробнее о формате и значениях каждой переменной можно почитать здесь: www.openspf.org/SPF_Record_Syntax. Но в 99% случаев Ваша строчка в DNS записях должна выглядеть так:
IN    TXT    "v=spf1 a mx ip4:< address > ?all"
IN    SFP    "v=spf1 a mx ip4:< address > ?all"

Эта запись говорит о том что: Все письма пришедшие из Вашего домена (v=spf1 a mx ip4:address ?all), письма присланные Вашим почтовиком (v=spf1 a mx ip4:address ?all), и письма присланные с Вашего IP (v=spf1 a mx ip4:address ?all)
считаются легитимными. Все другие письма не подпадающие под эти условия (v=spf1 a mx ip4:?all) мы не класифицируем.
После внесения этих строчек в DNS на протящении 10-ти минут гугол понят что от него требуется:
До:
Received-SPF: neutral (google.com: 1.1.1.1 is neither permitted nor denied by best guess record for domain of www-data@goloskarpat.info) client-ip=1.1.1.1;

После:
Received-SPF: pass (google.com: domain of www-data@goloskarpat.info designates 1.1.1.1 as permitted sender) client-ip=1.1.1.1;


Но письма все еще попадали в спам. Так что настало время DKIM

DKIM

Для DKIM нам потребуются 2 ключа (публичный и приватный) Которые мы генерим следующим образом (http://mikepultz.com/2010/02/using-dkim-in-exim/):
Приватный:
#openssl genrsa -out dkim.private.key 1024

Публичный:
#openssl rsa -in dkim.private.key -out dkim.public.key -pubout -outform PEM

Далее в настройках транспорта exim прописываем следующим образом:
begin transports
remote_smtp:
  driver = smtp
  dkim_domain = DKIM_DOMAIN
  dkim_selector = dkim
  dkim_private_key = DKIM_PRIVATE_KEY
  dkim_canon = relaxed 

, где
  • DKIM_DOMAIN — имя домена (goloskarpat.info в моем случае);
  • DKIM_PRIVATE_KEY — путь к приватному ключу (/etc/blablabla/ssl/keys/private/dkim.private.key)
  • dkim_selector = dkim (название селектора по которому из DNS записи будет изъят публичный ключ для проверки)
  • DKIM_CANON = relaxed — тип проверки (relaxed — разрешает небольшие изминения в заголовке\теле письма: лишние пробелы, изменение порядка заголовков и т.д.; simple — не разрешает эти изменения)
если вы пользуетесь Debian-овским exim4 пакетом, то в зависимости от типа конфигурации (однофайловая vs многофайловая конфигурация) необходимо в файл 01_exim4-config_listmacrosdefs или в файл exim4.conf.template внести следующие параметры:
DKIM_DOMAIN = goloskarpat.info
DKIM_SELECTOR = dkim
DKIM_PRIVATE_KEY = /etc/blablabla/ssl/keys/private/dkim.private.key
DKIM_CANON = relaxed

и сделать exim reload.
Тепер прописываем публичный DKIM ключ в DNS-ы:
dkim._domainkey IN TXT "v=DKIM1\; k=rsa\; p=<большоооооооой публииииичный ключ>\;"

здесь
dkim._domainkey — селектор который был записан нами в DKIM_SELECTOR конфига.

После таких манипуляция гугло начал нормально класть письма во «Входящие»

P.S. При наличии Linux-a проверку на правильность DNS записей можете проверить командами:
DKIM:
dig @nsserver dkim._domainkey.< имя вашего домена > TXT

SPF:
dig @nsserver < имя вашего домена > TXT
dig @nsserver < имя вашего домена > SPF
После напряженного трудового дня очень приятно расслабиться в тишине родного дома. Обшивка дверей из качественных материалов позволит вам превратить вашу квартиру в островок спокойствия.

4 комментария

avatar
Большое спасибо за информацию!
avatar
В тексте опечатка. Должно быть так:
dkim._domainkey IN TXT «k=rsa\; p=<большоооооооой публииииичный ключ>\;»
avatar
В вверси Exim с 4.7, поддержка DKIM встроена, настраивается немного по-другому. Вот, пример настройки: joyit.ru/home/35-exim-dkim.html
avatar
Либо вы не читали статью вообще, либо намеренно рекламируете левый сайт
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.