postfix + DKIM + SPF + DMARC

Доброго дня.
Сервер, а точнее IP сервера попал в бан google. И надо что-то предпринимать, т.к. потдержка корпорации добра не стримится помоч тем кто им не платит, пробуем решить данную проблему своими силами. И одно из таких решений это подтверждение кашерности письма по средсвам DKIM.
Этот пост я честно списал с других ресурсов, чисто для себя, чтобы не искать в следующий раз и не вспоминать что да как было.
Оригинал взят с этих статей: статья 1, статья 2.

И так начнем устанавливаем OpenDKIM

aptitude install opendkim opendkim-tools

Создадим дирректорю для наших будущих ключей

mkdir /etc/postfix/dkim/

Теперь надо генерировать ключи «открытый» и «закрытый».

opendkim-genkey -D /etc/postfix/dkim/ -d example.com -s example

вот тут один момент, в описании говорится что -d -это домен, а -s — селектор. Селектор — это приставка что ли, по которой будет потом искаться ключ в DNS, потом покажу.
И так создались два файла example.private и example.txt.
Сразу возьмем и добавим из файла example.txt хэш код на сервер DNS — обращаю ваше внимание что нам нужно только та информация, которая включена в двойные кавычки (кавычки не копируем).
И в этом же файле наблюдаем такую запись example._domainkey — вот это и есть селектор (без ._domainkey), это буде TXT запись на нашем DNS сервере. Примерно должно получиться следующая запись в DNS
281020141236
Файлам ключей обязательно нужно дать доступ для группы, в которой работает OpenDKIM:

chgrp opendkim /etc/postfix/dkim/*
chmod g+r /etc/postfix/dkim/*

В файл конфигурации /etc/opendkim.conf записываем:

Syslog yes
SyslogSuccess yes
# на время отладки включим расширенное логгирование
LogWhy yes
X-Header yes

Canonicalization relaxed/relaxed
# подпись и проверка подписей
Mode sv
# если только подписываем
#Mode s

# список ключей -
KeyTable file:/etc/postfix/dkim/keytable
# соответствие адресов/доменов и ключей -
SigningTable file:/etc/postfix/dkim/signingtable
# если вы подписываете и на других серверах -
#ExternalIgnoreList file:/etc/postfix/dkim/trusted
# список внутренних хостов, почта которых требует подписи -
#InternalHosts file:/etc/postfix/dkim/internal

Список имеющихся ключей укажем в файле /etc/postfix/dkim/keytable:

# формат: "название домен:селектор:/путь/до/ключа"
# в качестве названия удобно использовать имя DNS записи с ключем
mail.example.com example.com:example:/etc/postfix/dkim/example.private
# ключей может быть сколько угодно
#mx._domainkey.example.net example.net:mx:/etc/postfix/dkim/mx.private
# (список ключей может быть и в БД - продробней в манах)

Объясним OpenDKIM почту каких доменов какими ключами подписывать в файле /etc/postfix/dkim/signingtable:

# формат: "домен-или-адрес название-ключа"
example.com mail.example.com
#example.net mx._domainkey.example.net
# все остальные адреса тоже подписываем
#* mail.example.com
# (подробное описание формат есть в man)

В других файлах, указаных в директивах ExternalIgnoreList и InternalHosts, содержится просто список хостов и/или IP-адресов каждый на новой строке.

В файле /etc/default/opendkim объясним DKIM-демону где ему ждать подключений:

SOCKET="inet:8891@localhost"

Наконец, добавим в конец /etc/postfix/main.cf следующие строки:

milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

Я добавил еще вот такую запись в DNS

_domainkey.example.com.    TXT     "t=s; o=~;"

Перезапускаем postfix

service postfix restart

Перезапускаем opendkim

service opendkim restart

Проверить отрабатывает или нет ваш DKIM (там же и SPF) можно отослав тестовое письмо на адрес check-auth@verifier.port25.com в ответ придет письмо с развернутым ответом что да как 🙂

Теперь поговорим об SPF
Настраивается еще проще чем DKIM. Нужно просто в DNS добавить запись типа TXT/SPF

v=spf1 ip4:151.236.219.215 ip6:2a01:7e00::f03c:91ff:feae:4fa1 a ~all

где указывается IP вашего домена. Причем запись вешается прям на сам домен.
Немного про SPF

Ну и последнее — DMARC
Немного о DMARC.
Говорят их очень любит Google, что же не будем его обижать, добавим запись вида

_dmarc.example.ru   3600    IN  TXT "v=DMARC1; p=none; rua=mailto: postm@example.ru "

что означает все письма которые не прошли проверку отправлять на такой то адрес.

Добавить комментарий

Ваш e-mail не будет опубликован.