По окончании первых двух частей у нас уже настроены функционирующий SMTP сервер Postfix и IMAP сервер Dovecot. Мы можем отправлять и принимать электронные письма через почтовый клиент на компьютере. В данном руководстве мы рассмотрим, как повысить вероятность успешной доставки писем в почтовый ящик получателя, настроив SPF и DKIM на сервере Debian.
Содержание статьи
- 1 Что представляют собой записи SPF и DKIM?
- 2 Формирование SPF записи в системе DNS.
- 3 Конфигурация агента SPF Policy на сервере Debian.
- 4 Конфигурация DKIM на сервере Debian.
- 5 Формирование таблицы подписей, таблицы ключей и файла доверенных хостов.
- 6 Создание пары ключей: приватного и публичного.
- 7 Разместите ваш публичный ключ в записях DNS.
- 8 Проверка DKIM-ключа
- 9 Настройте взаимодействие Postfix с OpenDKIM.
- 10 Аудит SPF и DKIM
- 11 Неправильные настройки в почтовом приложении.
- 12 Проверка оценки и отправка электронной почты.
- 13 Почтовые ящики от компании Microsoft.
Что представляют собой записи SPF и DKIM?
SPF и DKIM представляют собой два вида TXT-записей в DNS, которые помогают выявлять фальсификацию электронной почты и обеспечивают доставку легитимных писем в основной почтовый ящик, а не в спам. Если злоумышленники используют ваш домен для подделки писем, есть высокая вероятность, что ваши сообщения окажутся в папке спама у получателя, если они не добавили вас в свои контакты.
Запись SPF (Sender Policy Framework) определяет, какие хосты или IP-адреса могут отправлять электронные письма от имени вашего домена. Разрешайте отправку почты исключительно вашему почтовому серверу или серверу вашего интернет-провайдера.
DKIM (DomainKeys Identified Mail) применяет закрытый ключ для подписи электронных писем, отправляемых с вашего домена. Серверы SMTP, принимающие сообщения, проверяют подпись с помощью открытого ключа, который размещён в DNS-зоне вашего домена.
Формирование SPF записи в системе DNS.
В интерфейсе управления DNS добавьте новую запись типа TXT согласно приведённым ниже указаниям.
Тип записи Имя Значение TXT @ v=spf1 mx ~all
- TXT обозначает, что это запись типа TXT.
- Введите символ @ в поле имени, чтобы указать основной домен (example.com).
- v=spf1 обозначает, что это запись SPF, а также указывает на версию SPF1.
- MX указывает на то, что все хосты, перечисленные в MX-записях, имеют разрешение на отправку электронной почты от вашего домена, в то время как всем остальным хостам это запрещено.
- ~Все указывает на то, что электронные письма с вашего домена могут отправляться исключительно с хостов, указанных в SPF-записи. Сообщения от других хостов будут считаться ненадежными. Существуют также альтернативные параметры: +all, — all,?all, но их применение встречается довольно редко.
<

Вы можете воспользоваться инструментом dmarcian SPF surveyor для проверки корректности синтаксиса вашей SPF записи.
Конфигурация агента SPF Policy на сервере Debian.
Необходимо также указать нашему SMTP серверу Postfix проверять SPF-запись для входящих сообщений. Это не повлияет на доставку исходящих писем, но поможет в выявлении поддельных входящих.
Установите нужные библиотеки:
sudo apt install postfix-policyd-spf-python
После этого внесите изменения в файл конфигурации основного процесса Postfix.
sudo nano /etc/postfix/master.cf
Включите следующие строки в конец файла, чтобы указать Postfix запускать демон политики SPF при старте.
policyd-spf unix - n n - 0 spawn user=policyd-spf argv=/usr/bin/policyd-spf
Сохраните изменения и закройте файл. Затем внесите правки в основной файл конфигурации Postfix.
sudo nano /etc/postfix/main.cf
Вставьте указанные строки в конец файла. Первая строка устанавливает тайм-аут для агента политики Postfix. Остальные строки будут ограничивать поступающие письма, отклоняя несанкционированные и проверяя запись SPF.
policyd-spf_time_limit = 3600 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_policy_service unix:private/policyd-spf
Сохраните файл и закройте его. После этого перезапустите Postfix.
sudo systemctl restart postfix
Когда вы получите электронное письмо от домена с SPF записью, в заголовке оригинального сообщения будет отображаться информация о проверке SPF. Пример заголовка свидетельствует о том, что сообщение было отправлено с разрешенного хоста.
Received-SPF: Pass (sender SPF authorized).
Конфигурация DKIM на сервере Debian.
Установите OpenDKIM — это реализация системы аутентификации отправителей DKIM с открытым кодом.
sudo apt install opendkim opendkim-tools
После этого включите пользователя postfix в группу opendkim.
sudo gpasswd - a postfix opendkim
Внесите изменения в основной файл настроек OpenDKIM.
sudo nano /etc/opendkim.conf
Разархивируйте следующие строки.
Canonicalization relaxed/simple Mode sv SubDomains no
Укажите следующую строку.
#Nameservers 127.0.0.1
Nameservers 8.8.8.8,1.1.1.1
OpenDKIM рекомендует использовать IP-адреса 8.8.8.8 и 1.1.1.1 для запросов DNS. Рекомендуется подключать более одного DNS-сервера, так как если один из них выйдет из строя, второй сможет обрабатывать DNS-запросы. Указывайте каждый IP-адрес, разделяя их запятой.
Затем вставьте указанные строки в конце данного файла.
# Map domains in From addresses to keys used to sign messages KeyTable refile:/etc/opendkim/key. table SigningTable refile:/etc/opendkim/signing. table # Hosts to ignore when verifying signatures ExternalIgnoreList /etc/opendkim/trusted. hosts # A set of internal hosts whose mail should be signed InternalHosts /etc/opendkim/trusted. hosts
Сохраните файл и завершите его редактирование.
Формирование таблицы подписей, таблицы ключей и файла доверенных хостов.
Сформируйте иерархию папок для OpenDKIM.
sudo mkdir - p /etc/opendkim/keys
Смените владельца с root на opendkim и убедитесь, что доступ к каталогу ключей есть только у пользователя opendkim для чтения и записи.
sudo chown - R opendkim:opendkim /etc/opendkim sudo chmod go-rw /etc/opendkim/keys
Составьте таблицу для подписей.
sudo nano /etc/opendkim/signing. table
Включите следующую строку в файл. Это указывает OpenDKIM, что если отправитель на вашем сервере использует адрес @example.com, его следует подписывать с помощью приватного ключа, который определяется как default._domainkey. your-domain.com. Вторая строка сообщает, что ваши субдомены также будут подписываться этим приватным ключом.
*@example.com default._domainkey.example.com *@*.example.com default._domainkey.example.com
Сохраните файл и закройте его. После этого сформируйте таблицу ключей.
sudo nano /etc/opendkim/key. table
Включите следующую строку, указывающую путь к закрытому ключу.
default._domainkey.example.com example.com:default:/etc/opendkim/keys/example.com/default. private
Сохраните файл и закройте его. Затем создайте документ с доверенными хостами.
sudo nano /etc/opendkim/trusted. hosts
Вставьте указанные строки в только что созданный файл. Это уведомляет OpenDKIM о том, что в случае поступления электронного письма с localhost или с аналогичного домена, OpenDKIM должен подписать данное письмо, но не будет проводить проверку DKIM для него.
127.0.0.1 localhost .example.com
Сохраните файл и завершите его редактирование.
Примечание: Не добавляйте звездочку к имени домена, например: *.example.com. Перед именем домена должна стоять только точка.
Создание пары ключей: приватного и публичного.
Необходимо создать два ключа:
- закрытый ключ для аутентификации отправляемых сообщений.
- Открытый ключ, необходимый для проверки подписи DKIM SMTP-сервером, будет размещён в вашей DNS-зоне, что позволит получающему SMTP-серверу его обнаружить.
Сформируйте отдельный каталог для домена.
sudo mkdir /etc/opendkim/keys/example.com
Создайте ключи, используя утилиту opendkim-genkey.
sudo opendkim-genkey - b 2048 - d example.com-/etc/opendkim/ключи/example.com - s default - v
Эта команда создаст ключи размером 2048 бит. Параметр — d обозначает домен, а — D задает каталог для хранения ключей. В качестве селектора (-s) используется значение «default», которое также выступает в роли имени. По завершении выполнения команды закрытый ключ будет сохранен в файле default. private, а открытый — в файле default. txt.
Назначьте opendkim владельцем приватного ключа.
sudo chown opendkim:opendkim /etc/opendkim/keys/example.com/default. private
Установите такие разрешения, чтобы доступ к файлу на чтение и запись имел только пользователь opendkim.
sudo chmod 600 /etc/opendkim/keys/example.com/default. private
Разместите ваш публичный ключ в записях DNS.
Покажите публичный ключ.
sudo cat /etc/opendkim/keys/example.com/default. txt
Строка, следующая за параметром p, представляет собой открытый ключ.
В DNS-менеджере создайте TXT-запись, указав default._domainkey в поле имени. Далее вернитесь в терминал, скопируйте текст внутри скобок и вставьте его в поле значения DNS-записи. Обязательно удалите все двойные кавычки и пробелы в этом поле, иначе проверка ключа на следующем этапе может не удастся.
Проверка DKIM-ключа
Выполните следующую команду на сервере Debian для проверки вашего ключа.
sudo opendkim-testkey - d example.com - s default - vvv
Если все нормально, в результате выполнения команды вы увидите сообщение Key OK.
opendkim-testkey: using default configfile /etc/opendkim.conf opendkim-testkey: checking key 'default._domainkey. example.com' opendkim-testkey: key secure opendkim-testkey: key OK
Учтите, что на распространение вашей записи DKIM в Интернете может потребоваться некоторое время. В зависимости от вашего регистратора домена, DNS-запись может обновиться сразу или это займет до 24 часов. Вы можете воспользоваться сайтом https://www.dmarcanalyzer.com/dkim/dkim-check/, ввести «default» в поле селектора и указать ваше доменное имя для проверки статуса записи DKIM.
Если в результате выполнения команды вы видите сообщение «Ключ не защищен», не стоит паниковать. Это связано с тем, что для вашего доменного имени не активирован DNSSEC. DNSSEC представляет собой стандарт безопасности для защищенных DNS-запросов. Большинство доменных имен не имеют включенного DNSSEC. Вам не следует переживать из-за сообщения «Ключ не защищен». Вы можете продолжать следовать данному руководству.
Если вы столкнулись с ошибкой «время запроса истекло», это указывает на наличие проблемы с разрешением DNS на вашем сервере. Попробуйте повторно выполнить предыдущую команду, чтобы проверить, решена ли проблема. Если ошибка сохраняется, вы можете закомментировать следующую строку в файле /etc/opendkim.conf и перезапустить службу opendkim.service.
TrustAnchorFile /usr/share/dns/root. key
Настройте взаимодействие Postfix с OpenDKIM.
Postfix способен взаимодействовать с OpenDKIM через Unix-сокет. По умолчанию OpenDKIM использует сокет, расположенный по пути /run/opendkim/opendkim. sock, что указано в конфигурационном файле /etc/opendkim.conf.Однако SMTP-демон Postfix, установленный в Debian, функционирует в окружении chroot, что подразумевает разрешение всех имен файлов относительно директории очереди Postfix (/var/spool/postfix). В связи с этим необходимо изменить путь к сокету OpenDKIM.
Сформируйте каталог для размещения файла сокета OpenDKIM и установите доступ исключительно для пользователя opendkim и группы postfix.
sudo mkdir /var/spool/postfix/opendkim sudo chown opendkim:postfix /var/spool/postfix/opendkim
После этого внесите изменения в главный файл конфигурации OpenDKIM.
sudo nano /etc/opendkim.conf
Укажите следующую строку.
Socket local:/run/opendkim/opendkim. sock
Поставьте на ее место следующую строку.
Socket local:/var/spool/postfix/opendkim/opendkim. sock
Сохраните изменения и закройте документ. Затем откройте файл /etc/default/opendkim.
sudo nano /etc/default/opendkim
Укажите следующую строку.
SOCKET=local:$RUNDIR/opendkim. sock
SOCKET="local:/var/spool/postfix/opendkim/opendkim. sock"

Сохраните файл и завершите его редактирование.
Теперь необходимо внести изменения в основной конфигурационный файл Postfix.
sudo nano /etc/postfix/main.cf
Включите следующие строки в нижнюю часть этого файла, чтобы Postfix мог взаимодействовать с OpenDKIM через протокол milter.
# Конфигурация Milter milter_default_action = accept milter_protocol = 6 smtpd_milters = local:opendkim/opendkim. sock non_smtpd_milters = $smtpd_milters
Сохраните изменения в файле и закройте его. После этого перезапустите службы opendkim и postfix.
sudo systemctl restart opendkim postfix
Аудит SPF и DKIM
Теперь у вас есть возможность отправить тестовое сообщение со своего почтового сервера на свой аккаунт Gmail, чтобы проверить, прошли ли настройки SPF и DKIM. В открытом письме в Gmail, если вы кликнете на кнопку «Показать оригинал» в выпадающем меню справа, вы сможете увидеть результаты аутентификации.
Если ваше сообщение не имеет подписи и проверка DKIM не прошла успешно, вы можете просмотреть журналы postfix (/var/log/mail.log), чтобы определить, в чем проблема с вашей конфигурацией. Если в почтовом журнале отображается следующее сообщение,
warning: connect to Milter service local:opendkim/opendkim. sock: Нет такого файла или каталога
Вам может понадобиться убедиться, что служба opendkim в systemd активирована.
sudo systemctl status opendkim
Если opendkim функционирует, но ошибка все еще появляется, возможно, вам нужно внести изменения в файл /etc/postfix/main.cf, изменив
smtpd_milters = local:opendkim/opendkim. sock
smtpd_milters = local:/opendkim/opendkim. sock
После этого перезапустите Postfix.
Ваш почтовый сервер также осуществит проверки SPF и DKIM для домена отправителя. Результаты этих проверок можно увидеть в заголовках писем. Далее будет рассмотрена проверка SPF и DKIM для отправителя через Gmail.
Received-SPF: Пропустить (от кого)идентификатор=mailfrom; IP клиента=2607:f8b0:4864:20::c2d; helo=mail-yw1-xc2d. google.com; [email protected]; получатель= Результаты аутентификации: email.linux16.ru;dkim=pass (2048-битный ключ; незащищенный) header. d=gmail.com [email protected] header. b="XWMRd2co"; dkim-atps=neutral
Неправильные настройки в почтовом приложении.
Подпись DKIM может не быть проверена, если в вашем почтовом клиенте неправильно настроены параметры SMTP или IMAP.
Корректные параметры:
- SMTP протокол: укажите mail.your-domain.com в качестве имени сервера, выберите порт 587 и используйте STARTTLS. В качестве метода аутентификации выберите стандартный пароль.
- Для протокола IMAP укажите mail.your-domain.com в качестве имени сервера, используйте порт 143 и STARTTLS. В качестве метода аутентификации выберите обычный пароль.
- Введите mail.your-domain.com в качестве имени SMTP сервера, укажите порт 465 и используйте SSL/TLS. В качестве метода аутентификации выберите обычный пароль.
- Для протокола IMAP укажите mail.your-domain.com в качестве имени сервера, установите порт 993 и используйте SSL/TLS. В качестве метода аутентификации выберите стандартный пароль.
Некорректные параметры:
- Для отправки исходящих писем в почтовых клиентах настройте использование SMTP-порта 25.
- Шифровальный метод не был определён.
Порт 25 предназначен для обмена данными между SMTP-серверами. Не рекомендуется использовать его в почтовых клиентах для отправки исходящей почты.
Необходимо выбрать метод шифрования (STARTTLS или SSL/TLS) в настройках вашего почтового клиента.
Проверка оценки и отправка электронной почты.
Вы можете зайти на сайт https://www.mail-tester.com, где вам будет предоставлен уникальный адрес электронной почты. Отправьте сообщение с вашего домена на этот адрес, а затем проверьте свой результат. Как вы можете заметить, я получил идеальный балл.

Mail-tester.com предоставляет лишь оценку для отправителя. Однако существует другой сервис — GlockApps, который позволяет определить, попало ли ваше сообщение в папку «Входящие», в спам или было отклонено. Он совместим с множеством популярных почтовых сервисов, включая Gmail, Outlook, Hotmail, Yahoo Mail, iCloud Mail и другие.

Почтовые ящики от компании Microsoft.
Если ваши сообщения не принимаются Microsoft Outlook или Hotmail, вам потребуется заполнить форму с данными об отправителе. После этого ваши письма будут приняты в Outlook/Hotmail, но их все равно могут пометить как спам.

