На VPS с собственным Postfix вся ответственность за репутацию исходящей почты лежит на вас: нет готовой инфраструктуры провайдера, которая уже прогрета и настроена. DKIM, SPF и DMARC на самодельном почтовом сервере — не опциональное усиление, а минимум, без которого письма массово улетают в спам или отклоняются с первого дня.
Установка OpenDKIM
apt install opendkim opendkim-tools -y
# Генерация ключей
mkdir -p /etc/opendkim/keys/yourdomain.com
cd /etc/opendkim/keys/yourdomain.com
opendkim-genkey -t -s mail -d yourdomain.com
chown opendkim:opendkim mail.private
Получение публичного ключа для DNS
cat /etc/opendkim/keys/yourdomain.com/mail.txt
# Добавьте эту запись в DNS как TXT для:
# mail._domainkey.yourdomain.com
Полный набор DNS-записей
| Запись | Тип | Имя | Значение |
|---|---|---|---|
| MX | MX | @ | mail.yourdomain.com (priority 10) |
| SPF | TXT | @ | v=spf1 mx ~all |
| DKIM | TXT | mail._domainkey | v=DKIM1; k=rsa; p=PUBLICKEY |
| DMARC | TXT | _dmarc | v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com |
В отличие от готовых почтовых сервисов, где MX, SPF и DKIM провайдер выдаёт уже согласованным набором, на VPS все четыре записи собираются вручную и должны ссылаться друг на друга без противоречий: домен в MX, домен в SPF и селектор в имени DKIM-записи обязаны совпадать с тем, что реально прописано в конфигурации Postfix и OpenDKIM.
Проверка DKIM-подписи
# Тест подписи
opendkim-testkey -d yourdomain.com -s mail -vvv
# Проверка после отправки
# Заголовок письма должен содержать:
# DKIM-Signature: v=1; a=rsa-sha256; d=yourdomain.com; s=mail...
Частые ошибки OpenDKIM
| Сообщение | Причина | Решение |
|---|---|---|
| opendkim: mail.private: No such file or directory | Путь KeyFile в /etc/opendkim.conf не совпадает с реальным расположением ключа | Сверить путь в конфиге с выводом ls /etc/opendkim/keys/yourdomain.com/ |
| body hash did not verify (DKIM-Signature) | Письмо изменилось после подписи — например, промежуточный сервер добавил футер рассылки | Исключить такие маршруты из relay или подписывать письмо после всех модификаций тела |
| key not found in DNS (opendkim-testkey) | TXT-запись ещё не распространилась либо селектор в DNS не совпадает с именем в конфиге | Проверить dig TXT mail._domainkey.yourdomain.com и подождать TTL |
| Postfix: reject: 550 5.7.1 SPF check failed | IP исходящего сервера не входит в SPF-запись домена отправителя (чужой релей) | Добавить IP сервера в SPF через механизм ip4: у владельца домена-отправителя |
Первый шаг при любой из этих ошибок — посмотреть /var/log/mail.log (Debian/Ubuntu) или /var/log/maillog (RHEL-семейство): там видно, на каком этапе Postfix и milter OpenDKIM обработали письмо и с каким именно кодом отказа, а не гадать по симптомам со стороны получателя.
От p=none до p=reject: план перехода DMARC
| Этап | Значение p | Длительность | Что происходит |
|---|---|---|---|
| Мониторинг | p=none | 1–2 недели | Собираются отчёты rua, ни одно письмо не блокируется |
| Частичный карантин | p=quarantine; pct=25 | 1 неделя | Четверть непрошедших писем попадает в спам у получателей |
| Полный карантин | p=quarantine; pct=100 | 1–2 недели | Все непрошедшие письма уходят в спам |
| Отклонение | p=reject | постоянно | Письма без корректных DKIM/SPF отклоняются на приёме |
На собственном VPS отчёты rua приходят обычным письмом на указанный ящик в виде XML внутри gzip-архива — готовой панели для их чтения, как у крупных провайдеров почты, нет. На практике их либо парсят самописным скриптом, либо заводят отдельный бесплатный сервис вроде dmarcian, который принимает пересылку этих писем и строит таблицу источников отправки за вас.
Проверка SPF и DMARC записей
# Проверить опубликованную SPF-запись
dig TXT yourdomain.com +short
# Проверить DMARC-запись и её текущую политику
dig TXT _dmarc.yourdomain.com +short
# Быстрая онлайн-проверка через отправку письма
# mail-tester.com — пришлёт разбор SPF/DKIM/DMARC за несколько секунд
Когда DKIM/SPF/DMARC на VPS не подходит
- Почта отправляется через несколько внешних сервисов рассылки одновременно — нужен единый SPF с include на каждый сервис, а не отдельные TXT-записи: в зоне допустима только одна запись типа SPF
- IP сервера в PBL или динамическом диапазоне провайдера — DKIM не спасёт от блокировки по репутации самого IP, нужен выделенный статический адрес
- Нужна ротация ключей без даунтайма — придётся держать два селектора параллельно, например mail и mail2, и переключать их поочерёдно
- Почта уже размещена в Google Workspace или другом SaaS — DKIM настраивается на стороне провайдера, см. Google Workspace: MX и DNS, а не через OpenDKIM на VPS
Частые вопросы
Можно ли сразу поставить p=reject в DMARC, без периода мониторинга?
Сразу переходить к p=reject рискованно: если DKIM или SPF настроены с ошибкой, легитимные письма начнут отклоняться получателями ещё до того, как вы об этом узнаете. Период мониторинга с p=none нужен именно для того, чтобы увидеть реальные источники отправки через отчёты rua и убедиться, что собственная почта проходит проверку, прежде чем ужесточать политику.
Что будет, если почта отправляется через несколько внешних сервисов рассылки одновременно?
В одной DNS-зоне допустима только одна запись типа SPF, поэтому для каждого сервиса рассылки нельзя заводить отдельную запись — все источники отправки нужно перечислить через механизм include внутри единственной SPF-записи домена. Если завести несколько отдельных SPF-записей, проверка станет непредсказуемой, и часть писем начнёт отклоняться независимо от DKIM.
Как читать отчёты DMARC (rua), если нет готовой панели, как у крупных почтовых провайдеров?
На собственном VPS такие отчёты приходят обычным письмом в виде архива с разметкой внутри — читать их глазами неудобно. На практике их либо разбирают небольшим самописным скриптом, либо пересылают в бесплатный сторонний сервис наподобие dmarcian, который сам строит таблицу источников отправки и подсвечивает, что проходит проверку, а что нет.
Нужно ли менять DKIM-настройки при переезде почты на Google Workspace или другой SaaS?
Да, конфигурация на VPS через OpenDKIM в этом случае становится не нужна: ключ и подпись формирует уже сам провайдер на своей стороне, вам останется только добавить его записи в DNS домена. Собственный OpenDKIM и SaaS-провайдер одновременно подписывать одни и те же письма не должны — это создаёт путаницу в проверке.