Раздел 4: Конфигурация SPF и DKIM в Postfix на сервере Debian

По окончании первых двух частей у нас уже настроены функционирующий SMTP сервер Postfix и IMAP сервер Dovecot. Мы можем отправлять и принимать электронные письма через почтовый клиент на компьютере. В данном руководстве мы рассмотрим, как повысить вероятность успешной доставки писем в почтовый ящик получателя, настроив SPF и DKIM на сервере Debian.

Что представляют собой записи 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, но их применение встречается довольно редко.
  • <

используйте утилиту dig для запроса SPF-записи

Вы можете воспользоваться инструментом 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"

debian opendkim сокет unix

Сохраните файл и завершите его редактирование.

Теперь необходимо внести изменения в основной конфигурационный файл 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 и другие.

Тест на размещение электронной почты от GlockApps на Scalahosting.

Почтовые ящики от компании Microsoft.

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

Читайте также:  Установка VLC Media Player на Fedora