Спам-письма без поля «to». Фильтрация с помощью Postfix..?

Мой форум в последнее время заваливают серией похожих спам-писем. Каждый раз используется другой отправитель, домен и IP-адрес. (Но все они всегда касаются какой-то конференции в строительной отрасли где-то в мире.)

Они попадают в категорию отклонённых с ошибкой Email::Receiver::BadDestinationAddress, и система пытается отправить сообщение об отказе на некорректный адрес отправителя. отправляет сообщение об отказе, вызывая backscatter. Обновление: нет никаких доказательств того, что адреса отправителей недействительны.

Фактически, у них вообще нет адресов в полях to: или cc:. Я узнал, что получатели на самом деле определяются в SMTP-оболочке, а не в заголовках, и что системы рассылки могут намеренно опускать to:/cc: из заголовков.

(Отмечу, что это началось в ноябре, примерно когда было удалено быстрое отклонение :thinking:)

Мне не очень хочется углубляться в конфигурацию Postfix, но, похоже, он может выполнять проверку заголовков

Интересно, пробовал ли кто-то это уже и есть ли какие-то советы?

пример заголовков спам-письма, к слову
Received: from 103-191-76-30.cprapid.com (unknown [103.191.76.30])	by forum-mail-receiver.localdomain (Postfix) with ESMTPS id 0845A2FB2B6; Thu, 08 Jan 2026 02:30:19 +0000
Received: from [::1] (port=57140 helo=103-191-76-30.cprapid.com)	by 103-191-76-30.cprapid.com with esmtpa (Exim 4.99.1)	(envelope-from <alexg@connectconsortiumplaceru.com>)	id 1vdfl5-00000000rLO-0bcP; Wed, 07 Jan 2026 21:28:18 -0500
Date: Wed, 07 Jan 2026 21:26:55 -0500
From: alexg@connectconsortiumplaceru.com
Message-ID: <093f4b04eb0e41f70390cf63dcce77d4@connectconsortiumplaceru.com>
Subject: 5th Annual Modular Construction & Prefabrication Symposium - Toronto,
 Canada | March 2026 (Limited Seats Left)
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="=_605ba79265fcf8605b02d6716c2455fc";
 charset=UTF-8
Content-Transfer-Encoding: 7bit
Authentication-Results: forum-mail-receiver.localdomain; dmarc=none (p=none
 dis=none) header.from=connectconsortiumplaceru.com
Authentication-Results: forum-mail-receiver.localdomain; dkim=pass (2048-bit
 key; unprotected) header.d=connectconsortiumplaceru.com
 header.i=@connectconsortiumplaceru.com header.a=rsa-sha256 header.s=default
 header.b=hljdS4ya; dkim-atps=neutral
Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=103.191.76.30;
 helo=103-191-76-30.cprapid.com;
 envelope-from=alexg@connectconsortiumplaceru.com; receiver=forum.tasat.org
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
 d=connectconsortiumplaceru.com; s=default; h=Content-Type:Message-ID:Subject:
 To:From:Date:MIME-Version:Sender:Reply-To:Cc:Content-Transfer-Encoding:
 Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender:
 Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Id:
 List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive;
 bh=QsuKb3maShWc9C0uTAfGJZlp0GLvUFzREukTJkY4TbE=; b=hljdS4yaocpaFXSAbqnR+pvdM5
 W02vREZeWNQEtDMCqxEmI17jqjL5k+VGWi6vcruI2QBIi+C3omMWl1MrzAZ18EotG4/SfmY0jqcyV
 G5lu46MfkyxsUUdqQoKIHChQ5T0aa7jfc7LzZzM8bIBUk6VnV4lNn5SItSDEMAzRqrq66rL7ugL3u
 16OkrMph0Kjw7YP2swVhZY9y0TqJBy0L05XHy5BfLjh5K7UGbNxnnN6daXlpCJ/zsQPFjjkiTNicc
 WLIuKHpH+sCQt2VqnbvGVcdYJmapKCzXn0sS08BspidViHbf/2hOAHkDlbVyWduINyn44Es5oj2Jh
 B9+D9w8g==;
User-Agent: Roundcube Webmail/1.6.12
X-Sender: alexg@connectconsortiumplaceru.com
X-AntiAbuse: This header was added to track abuse, please include it with any
 abuse report
X-AntiAbuse: Primary Hostname - 103-191-76-30.cprapid.com
X-AntiAbuse: Original Domain - forum.tasat.org
X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12]
X-AntiAbuse: Sender Address Domain - connectconsortiumplaceru.com
X-Get-Message-Sender-Via: 103-191-76-30.cprapid.com: authenticated_id:
 alexg@connectconsortiumplaceru.com
X-Authenticated-Sender: 103-191-76-30.cprapid.com:
 alexg@connectconsortiumplaceru.com
X-Source: 
X-Source-Args: 
X-Source-Dir:

Обычно они отправляют такие письма в режиме скрытой копии (BCC) на длинный список адресов, собранных путем парсинга. Я наблюдал такое поведение на нескольких сайтах, но пока не нашел практического решения.

Да, именно так работает BCC: адрес просто не попадает в заголовок.

Discourse работает немного иначе: он вообще не использует получателя из оболочки, а опирается только на заголовки. Можно сказать, что это ошибка, но так как многие пользователи зависят от текущего поведения, его трудно изменить.

Функция «Быстрый отказ» была удалена, так как она работала некорректно. Кроме того, логика проверяла получателя из оболочки, что не совпадает с тем, что ищет Discourse. Это несоответствие означает, что быстрый отказ может отклонять доставляемую почту и пропускать недоставляемую.

Устранение этого противоречия, к сожалению, потребует значительных усилий при относительно небольшой отдаче.

Понятно… спасибо за детали.

Я сейчас использую только ответ по электронной почте, поэтому подумал, что логично блокировать всё, где нет заголовка TO:/CC:. Но я могу представить, как это может стать проблемой для сайтов, использующих публикацию по электронной почте.

К сожалению, согласование этого потребовало бы значительных усилий при относительно небольшой выгоде.

Я, безусловно, предвзят — ведь я написал код быстрой отклонения, который был удалён, — но я не согласен с оценкой ценности этой идеи, особенно если обратная отправка начнёт попадать серверы Discourse пользователей в чёрные списки спама или такие сервисы, как Mailgun, начнут выражать недовольство (или, что ещё хуже, они не станут жаловаться и будут с удовольствием взимать с вас плату за отправку огромного количества поддельных писем, когда на сервер обрушится волна спамеров).

Если кто-то другой внесёт код для устранения этих проблем (например, парсинг заголовков вместо конверта и т. д.), будет ли Discourse готов снова включить эту функциональность, или это просто задача, на которую у кого-либо сейчас нет времени заниматься в какой бы то ни было форме?

(В любом случае всё нормально, я полностью понимаю, что все делают всё возможное с ограниченными временем и ресурсами!)

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

  • Если вы используете только ответ по электронной почте, для сообщений без заголовков To:/Cc: хорошо работает отбрасывание их на уровне Postfix.

  • Также можно добавить простую проверку SPF/DKIM, чтобы отфильтровывать поддельные домены до того, как они попадут в Discourse.

  • Ещё один приём, который я видел, — это ограничение скорости входящей почты по IP-адресу или домену отправителя. Это помогает замедлить волны спама, не затрагивая обычных пользователей.

  • Если хотите поэкспериментировать, комбинация проверок заголовков с небольшим белым списком (для доверенных отправителей или рассылочных списков) поможет снизить количество ложных срабатываний.

Ничего сложного, просто идеи, которые помогли мне немного снизить уровень шума :slightly_smiling_face: