Недавно я заметил повторяющийся узор в некоторых получаемых мною спамах. Заголовки 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
заголовок переписан. Это может ограничить полезность обнаружения спама этим правилом.