Назад | Перейти на главную страницу

Правило Spamassassin для сравнения полей возврата и отправления

Недавно я заметил повторяющийся узор в некоторых получаемых мною спамах. Заголовки return-path и from всегда имеют одинаковую структуру.

Разрешите пояснить на примере:

Return-path: <brian_chambers-USER=DOMAIN.COM@readyseas.com>
From: <brian_chambers@readyseas.com>
To: <USER@DOMAIN.COM>

По сути, я хотел бы проверить, совпадает ли пользовательская часть Return-path с пользовательской частью From с добавлением To ("@" заменено на "=") и тире перед To.

Я хотел использовать Postfix header_checks и отклонить USER=DOMAIN.COM@ шаблон, но большинство законных информационных бюллетеней, которые я получаю, также содержат это в своем обратном пути (за исключением того, что раньше была гораздо более сложная строка, которая никогда не соответствует полю От).

Кто-нибудь создал такое правило раньше и хочет поделиться?

Спасибо!

SpamAssassin не позволяет вам писать код или назначать переменные ... в своих правилах. Чтобы делать то, что вы хотите, вам лучше всего подойдет написание собственного плагина (который предоставит вам полный доступ к perl).

Тем не менее, вы можете технически делать то, что просите, в синтаксисе записи правил SpamAssassin, используя тип заголовка ALL (который проверяет все заголовки одновременно, вроде как rawbody правила):

header RPATH_EMBEDS_TO_ADDR  ALL =~ /\bReturn-Path:[^\r\n]{0,99}-([\w.])=([\w.-]{1,99}\.[a-z]{2,8})\@(?:[^\r\n]{0,99}[\r\n]{1,9}){1,30}To:[^\r\n]{0,99}<\1@\2>/ism

Вышеупомянутое правило дорого, и было бы еще дороже, если бы вы разрешили тире в имени пользователя, поскольку ему пришлось бы перебирать все возможные длины ([\w.-]) для имени пользователя. Это дорогое удовольствие не только потому, что требует большого количества операций с возвратом, но и потому, что требует изучения очень длинных строк. Также возможно, что Return-Path заголовок после в To заголовок, что означает, что вам понадобится второе правило для второго регулярного выражения для обработки этого случая.

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

Однако я думаю, вы быстро обнаружите, что все это нацелено на определенные типы массовых рассылок, многие из которых являются законными; в Return-Path заголовок используется как адрес возврата и многие списки рассылки кодируют получателя, чтобы измерить их доставляемость и очистить свои списки.

Если вам действительно нужны такие вещи, я подозреваю, что на самом деле не имеет значения, To адрес - это тот, который присутствует в Return-Path заголовок. Вот резко более быстрое правило, которое должно иметь почти такую ​​же эффективность:

header RPATH_EMBEDS_ADDR  Return-Path =~ /-[\w.]{1,99}=[\w.-]{1,99}\.[a-z]{2,8}\@/i

Еще одно важное замечание: всякий раз, когда сообщение перенаправляется (например, служба пересылки электронной почты), Return-Path заголовок переписан. Это может ограничить полезность обнаружения спама этим правилом.