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

Пользовательское правило exim и spamassassin

У меня установлены и запущены exim и spamassassin (используется exiscan), но я хочу добавить настраиваемое правило, которое добавит некоторые очки в электронные письма, если «to» и «envelope-to» не идентичны. Я добавил в local.cf следующие правила:

header      EXIM_SENDER_SWAP        X-Sender-Swap =~ /To_envelope-to/
describe    EXIM_SENDER_SWAP        To doesnt match envelope-to
score       EXIM_SENDER_SWAP        2.0

и строка в exim.conf

  acl_check_data:

      warn message = X-Subject-Swap: To_envelope-to
          condition = ${if !match {${lc:$h_envelope-to:}}{${lc:$h_to:}}{yes}{no}}

Я отправляю тестовое сообщение, и соответствующий заголовок добавляется exim, но никаких дополнительных указателей не добавляется spamassassin. В чем дело?

Во-первых, модификатор «message» - это не то, что вам нужно, вместо этого вы хотите использовать «add_header», когда хотите добавить заголовок к сообщению в ACL. Читать http://www.exim.org/exim-html-current/doc/html/spec_html/ch42.html#SECTaddheadacl если вам нужна дополнительная информация по этой части.

Однако я не думаю, что то, что вы пытаетесь сделать, будет работать так, как вы используете. Внутри eximʻa, когда он обрабатывает каждый ACL, запускается ACL, затем, когда ACL имеет завершено, все добавления и удаления заголовка выполнены. Оба эти действия выполняются в одном ACL DATA ACL, что означает, что заголовки, добавленные при первом сравнении, еще не были добавлены к сообщению во временных файлах, которые сканирует команда спама.

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

Второй вариант, на мой взгляд, лучший, - это иметь двух разных пользователей, которых вы используете для сканирования спама. Для одного у вас установлен рейтинг спама (например) 5.0. Для второго у вас установлен рейтинг спама 3,0. Это на 2 балла меньше обычного лимита, что равносильно увеличению оценки спама на 2 балла.

Тогда ваши строфы ACL могут выглядеть (непроверенные):

warn condition = ${if !match {${lc:$h_envelope-to:}}{${lc:$h_to:}}{yes}{no}}
     set $acl_m_env_ok = 1
     spam = strict_user:true

warn condtion = ${if eq{$acl_m_env_ok}{1} {no}{yes}}
     spam = normal_user:true

warn add_header = X-Spam-Score: $spam_score
     add_header = X-Spam-Report: $spam_report

deny condition  = ${if eq{$acl_m_env_ok}{1}}
     condition  = ${if >{$spam_score_int}{30}}
     message    = This message with mismatched header/envelope score $spam_score_points...REJECTED

deny condition  = ${if >{$spam_score_int}{50}}
     message    = This message scored $spam_score points...REJECTED