Доброго дня.
Сервер, а точнее IP сервера попал в бан google. И надо что-то предпринимать, т.к. потдержка корпорации добра не стримится помоч тем кто им не платит, пробуем решить данную проблему своими силами. И одно из таких решений это подтверждение кашерности письма по средсвам DKIM.
Этот пост я честно списал с других ресурсов, чисто для себя, чтобы не искать в следующий раз и не вспоминать что да как было.
Оригинал взят с этих статей: статья 1, статья 2.
И так начнем устанавливаем OpenDKIM
aptitude install opendkim opendkim-tools
Создадим дирректорю для наших будущих ключей
Теперь надо генерировать ключи «открытый» и «закрытый».
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
Файлам ключей обязательно нужно дать доступ для группы, в которой работает 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
Перезапускаем opendkim
Проверить отрабатывает или нет ваш 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 "
что означает все письма которые не прошли проверку отправлять на такой то адрес.