Top.Mail.Ru
OSEN-НИЙ SAAALEСкидка 50% на виртуальный хостинг и VDS
до 30.11.2025 Подробнее
Выберите продукт

ARC в продакшене: защита форвардинга почты в Postfix+Rspamd

Форвардинг часто ломает DMARC и снижает доставляемость. ARC фиксирует результаты аутентификации на промежуточном хопе и помогает провайдерам доверять письму. В статье — как включить ARC в Postfix+Rspamd: генерация ключей, конфиги, правила подписи и проверки, скоринг и отладка.
ARC в продакшене: защита форвардинга почты в Postfix+Rspamd

ARC (Authenticated Received Chain) решает давнюю боль форвардинга: пересылая письма, мы меняем маршрут и иногда заголовки так, что проверка SPF/DMARC у конечного получателя срывается. В результате легитимные письма уходят в спам или отклоняются. В этой статье — практическая схема включения ARC в продакшене на связке Postfix+Rspamd: генерация ключей, настройка подписи и верификации, политики отбора, тестирование и отладка.

Зачем ARC и в чем боль форвардинга

Классическая связка SPF+DKIM+DMARC хорошо работает, пока письмо идет напрямую от исходного домена к получателю. Но при форвардинге SPF почти гарантированно ломается (меняется источник, а SPF — это проверка IP-адреса отправителя), а DMARC из-за несоответствия SPF и/или отсутствия выровненного DKIM часто переходит в fail.

ARC добавляет поверх DKIM цепочку, в которой каждый солидный пересылщик (forwarder) оставляет свою «печать» с зафиксированными результатами аутентификации на своем этапе. Конечный провайдер может доверять этой цепочке и принимать решение, опираясь на исходные результаты проверки у первого звена.

Ключевая идея: если на вашем узле письмо прошло DMARC, вы «упаковываете» этот факт в ARC и пересылаете дальше. Получатель видит, что модификации внесены доверенным промежуточным сервером, и не наказывает письмо за сломанный SPF.

Как работает ARC (коротко и по делу)

ARC — это набор заголовков: ARC-Seal, ARC-Message-Signature (AMS) и ARC-Authentication-Results (AAR). Каждый пересылщик добавляет новый набор с увеличенным индексом i=. Подписи сделаны по схожей с DKIM логике, но включают результаты аутентификации (AAR) и «сшивают» всю историю.

На практике вам нужно два блока работы:

  • Подписывать исходящую и пересылаемую корреспонденцию (генерация ключей, настройка DKIM и включение ARC-сигнинга).
  • Проверять входящую корреспонденцию на «валидную цепочку ARC» и учитывать это при принятии решения (скоринг в антиспаме).

Пример набора заголовков ARC и их проверка

Где ARC уместен, а где нет

ARC необходим на узлах, которые пересылают почту дальше: корпоративные шлюзы, доменные алиасы и виртуальные домены, списки рассылки, MTA, выполняющий автоматические редиректы. Если вы просто отправляете почту напрямую от своих сервисов — достаточно DKIM+DMARC, а ARC имеет смысл как дополнительный плюс к deliverability.

Важно понимать, что ARC — не панацея. Он не «исправляет» полностью проваленный антиспам у получателя и не легализует токсичный контент. Это сигнал доверия к тому, что письмо не было испорчено на промежуточном шаге.

Предварительные условия

Перед включением ARC убедитесь, что базовая аутентификация настроена:

  • DKIM-подпись исходящей почты стабильна (ключи актуальны, селектор в DNS, длина ключа 2048+). Для плановой ротации ключей пригодится материал «Ротация DKIM-селекторов и TTL» — см. статью о ротации селекторов DKIM и TTL.
  • DMARC-политика определена и домен получает отчеты, чтобы наблюдать за доставляемостью. Полезно почитать «Как разбирать DMARC-отчеты» — см. разбор DMARC-отчетов и метрик доставляемости.
  • Postfix работает с Rspamd через milter и модули DKIM, DMARC корректно отрабатывают.

Подключаем Rspamd к Postfix

Если у вас уже есть живой Rspamd, проверьте, что Postfix передает почту через milter до постановки в очередь. Минимальная конфигурация в Postfix:

# /etc/postfix/main.cf
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:127.0.0.1:11332
non_smtpd_milters = inet:127.0.0.1:11332
# /etc/postfix/master.cf (фрагмент, обычно без изменений под milter)
smtp      inet  n       -       y       -       -       smtpd

В Rspamd проверьте включение добавления заголовков milter:

# /etc/rspamd/local.d/milter_headers.conf
enabled = true;

Если вы поднимаете почтовую инфраструктуру на собственном сервере, удобнее делать это на управляемом VDS с достаточным объемом памяти и гарантированным CPU. Это ускоряет диагностику и изоляцию нагрузки от веб-проектов.

FastFox VDS
Облачный VDS-сервер в России
Аренда виртуальных серверов с моментальным развертыванием инфраструктуры от 195₽ / мес

Генерируем DKIM-ключи и публикуем в DNS

ARC использует DKIM-ключи вашего домена. Генерируем ключ и выкладываем TXT-запись с публичной частью:

# Генерация 2048-битного DKIM ключа
rspamadm dkim_keygen -b 2048 -s arc1 -d example.ru -k /var/lib/rspamd/dkim/example.ru.arc1.key -p > /var/lib/rspamd/dkim/example.ru.arc1.pub

# Пример содержимого TXT для DNS (selector arc1):
arc1._domainkey.example.ru. 3600 IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqh...IDAQAB"

Права на приватный ключ должны позволять чтение пользователем, под которым работает Rspamd. Добавляйте запись в DNS зоны домена; если вы управляете зонами через нашу регистрацию доменов, публикация TXT и ротация селекторов выполняются в пару кликов.

FastFox VDS
Регистрация доменов от 99 руб.
Каждый проект заслуживает идеального доменного имени, выберите один из сотни, чтобы начать работу!

Настройка DKIM-подписи в Rspamd

Опишем, где лежат ключи, какой селектор использовать и когда подписывать:

# /etc/rspamd/local.d/dkim_signing.conf
path = "/var/lib/rspamd/dkim/$domain.$selector.key";
selector = "arc1";
use_domain = "header"; # использовать домен из From
use_esld = true;        # подстраивать подпись к eSLD
allow_hdrfrom_mismatch = true;
allow_hdrfrom_multiple = true;
sign_authenticated = true; # подписывать письма аутентифицированных пользователей
sign_local = true;         # и локально сгенерированные письма (форвард)
min_key_size = 2048;

Этого достаточно, чтобы DKIM стал стабильной базой для последующей ARC-подписи. Убедитесь, что исходящие письма с ваших сервисов имеют DKIM-Signature.

Включаем ARC в Rspamd

Модуль ARC в Rspamd использует ту же инфраструктуру ключей, что и DKIM. Для форвардинга нам нужно подписывать письма, которые приходят извне и уходят дальше (то есть «входящие для нас, но исходящие для следующего хопа»). Базовая настройка:

# /etc/rspamd/local.d/arc.conf
enabled = true;
sign_authenticated = true; # для MSA-сценариев
sign_inbound = true;       # чтобы запечатывать входящие перед форвардингом

Как правило, этого достаточно: Rspamd добавит ARC-Authentication-Results с результатами SPF/DKIM/DMARC у вас на сервере и запечатает их через ARC-Message-Signature и ARC-Seal. Важно, чтобы модули spf, dkim и dmarc были включены и отрабатывали до этапа подписания.

Гибкое включение ARC только для нужных доменов

Если вы обслуживаете множество доменов и хотите управлять, для кого выполнять ARC, используйте settings в Rspamd:

# /etc/rspamd/local.d/settings.conf
ARC_FORWARDER {
  id = "arc_forwarder";
  priority = 10;
  from = "*@example.ru";
  apply {
    ARC_ENABLED = 1;
  }
}

Далее в local.d/arc.conf можно ориентироваться на наличие символа ARC_ENABLED и подписывать только такие сообщения. Это удобно, если вы постепенно раскатываете ARC по доменам

Схема прохождения письма через Postfix milter и подпись ARC в Rspamd

Проверка ARC на входящем трафике

Параллельно с подписью полезно учитывать валидную цепочку ARC при принятии решений по входящим письмам, особенно когда DMARC у получателя «красный». В Rspamd это обычно делается через скоринг символов:

# /etc/rspamd/local.d/groups.conf (пример идей, значения под свою политику)
symbols {
  ARC_ALLOW {
    weight = -2.0; # валидная цепочка снижает итоговый скор
    description = "Valid ARC chain";
    group = "policies";
  }
  ARC_INVALID {
    weight = 3.5;  # сломанная цепочка подозрительна
    description = "Invalid ARC chain";
    group = "policies";
  }
}

Конкретные символы зависят от версии Rspamd, но идея одна: валидная цепочка улучшает карму письма, невалидная — ухудшает. Не переусердствуйте с отрицательным весом; ARC — не безусловный пропуск.

Пример: как выглядит письмо после форвардинга

После успешного внедрения вы увидите в пересланном письме заголовки наподобие:

ARC-Seal: i=1; a=rsa-sha256; d=example.ru; s=arc1; t=1732198000; cv=none;
 b=...
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=example.ru; s=arc1; h=from:to:subject:date:message-id:mime-version;
 b=...
ARC-Authentication-Results: i=1; mx.example.ru;
 dkim=pass header.d=sender.tld;
 spf=fail smtp.mailfrom=sender.tld;
 dmarc=pass header.from=sender.tld

Далее следующий пересылщик добавит i=2, и так далее. Конечный провайдер может валидировать цепочку и учитывать исходные результаты проверки.

Форвардинг в Postfix: алиасы, виртуальные домены, списки

Наиболее частые сценарии:

  • Алиасы в virtual_alias_maps пересылают внешним адресатам. Для таких писем ARC критичен.
  • Листы рассылки, которые добавляют префиксы в Subject или меняют тело. Здесь ARC защищает цепочку, но полезно минимизировать модификации.
  • Пересылка с локального ящика в облачную почту. Без ARC такие пересылки часто получают DMARC fail у получателя.

Если меняете From или тело, следите за минимальными модификациями, чтобы DKIM-исходника по возможности оставался валидным. Используйте каноникализацию relaxed/relaxed и избегайте переписывания критичных заголовков.

Нужно ли включать SRS

SRS (Sender Rewriting Scheme) чинит SPF при форвардинге. Он бывает полезен, но не всегда обязателен, если у вас стабильно работает DKIM и ARC. В сценариях с большим количеством NDR/DSN и где важна корректная доставка бэкендовских уведомлений, SRS дополняет ARC. Однако многие операторы успешно живут с DKIM+ARC без SRS, полагаясь на DMARC и доверие к ARC-цепочке.

Политики принятия решения при DMARC fail с валидным ARC

Задача: не «пропускать все подряд», а аккуратно помогать легитимной почте. Практические рекомендации:

  • Если DMARC=fail, но ARC=pass и цепочка короткая (например, 1–2 звена), уменьшите штраф до слабонегативного или нуля.
  • Если ARC=pass, но цепочка длиннее 3–4 звеньев, не снимайте штраф полностью: выше риск манипуляций.
  • Если ARC=fail, наоборот, увеличьте штраф: кто-то пытался «косить» под доверенную пересылку.

Всё это настраивается скорингом символов в Rspamd, комбинируясь с другими метриками (BAYES, IP reputation, URL reputation и так далее).

Отладка: где смотреть логи и метрики

Проверяйте три источника:

  • Логи Rspamd: наличие символов ARC, результаты модулей SPF/DKIM/DMARC, время проверки и подписи.
  • Логи Postfix на отправку пересланных писем: убедитесь, что milter применился и заголовки добавлены до выхода в очередь.
  • Заголовки письма у получателя: есть ли ARC-*, валидны ли DKIM-подписи, совпадает ли селектор.

Типичные проблемы:

  • Нет DKIM-подписи у исходящих: проверьте путь к ключу и селектор в dkim_signing.conf.
  • ARC не добавляется на форвардинге: убедитесь, что письмо классифицируется как inbound для этапа подписи (настройка sign_inbound и порядок milter).
  • DKIM ломается после модификации: уменьшите трансформации письма (особенно переписывание заголовков и MIME-структуры) или оставьте DKIM от исходника и добавляйте свой DKIM как дополнительную подпись.

Практическая модель раскатки

  1. Включите DKIM-подпись на доменах, убедитесь в валидной подписи и корректной публикации TXT.
  2. Включите ARC в Rspamd и ограничьте его для одного тестового домена через settings.
  3. Форвардьте почту с этого домена на внешний ящик и анализируйте заголовки, логи и поведение антиспама.
  4. Настройте умеренный негатив или позитив в скоринге на основании ARC=pass/invalid.
  5. Постепенно расширяйте зону доменов с ARC и корректируйте веса.

Про deliverability: что реально меняется

После включения ARC вы заметите снижение ложных срабатываний при форвардинге, особенно для писем от крупных доменов с жесткими DMARC-политиками. Падения в папку спам становятся редкими, а возвраты с причиной DMARC fail сокращаются. Продолжайте мониторить отчеты DMARC и статистику антиспама, чтобы понимать, где ARC помог, а где корень проблемы в контенте или репутации IP/домена.

Безопасность: как не превратить ARC в «индульгенцию»

Не выставляйте чрезмерно большой отрицательный вес за ARC=pass. Всегда комбинируйте с другими сигналами. Следите, чтобы приватный DKIM-ключ не утекал и периодически ротируйте селектор. Наблюдайте за длиной цепочек, аномальными доменами-пересылщиками и несогласованностью домена в d= для DKIM/ARC.

FAQ

Нужно ли подписывать ARC все исходящие письма? Не обязательно, но безопасно. Ключевое — обязательно подписывать то, что вы форвардите.

Что если у отправителя нет DKIM? ARC все равно может помочь, так как фиксирует ваши результаты SPF/DMARC. Но без DKIM у исходника ценность ARC ниже.

RSA или Ed25519? Многие провайдеры отлично принимают RSA 2048. Ed25519 быстрее и компактнее, но проверьте совместимость вашей аудитории.

Как долго хранить селектор? Рекомендуется регулярная ротация (например, раз в 6–12 месяцев) с перекрытием валидности старого и нового записей.

Итоги

ARC — практичный инструмент для защиты форвардинга и повышения deliverability. На связке Postfix+Rspamd он включается быстро: стабильный DKIM, минимальная конфигурация arc.conf, аккуратные политики скоринга и немного дисциплины в изменении писем при пересылке. Дальше — только мониторинг и операционная гигиена.

Поделиться статьей

Вам будет интересно

TLS session tickets в Nginx: ключи, ротация и единые тикеты на кластер OpenAI Статья написана AI (GPT 5)

TLS session tickets в Nginx: ключи, ротация и единые тикеты на кластер

Если у вас несколько Nginx-узлов за балансировщиком, резюмирование TLS без лишних накладных расходов удобно реализовать через sess ...
rclone crypt: клиентское шифрование бэкапов в S3 и ротация ключей OpenAI Статья написана AI (GPT 5)

rclone crypt: клиентское шифрование бэкапов в S3 и ротация ключей

Если данные улетают в S3 без клиентского шифрования, вы зависите от провайдера и прав к бакету. Разбираем rclone crypt: как включи ...
BuildKit cache mounts: ускоряем Composer/NPM сборки и экономим I/O OpenAI Статья написана AI (GPT 5)

BuildKit cache mounts: ускоряем Composer/NPM сборки и экономим I/O

Cache mounts в Docker BuildKit — простой способ ускорить Composer и NPM/Yarn/PNPM сборки, уменьшить трафик и износ дисков. В стать ...