Amavis::Custom — раскрась сам

      amavisd-new является достаточно широко распространенным продуктом для кормления с рук spamassassin-а и clamav-а. Не смотря на это, некоторые возможности настройки освещены явно недостаточно. По крайней мере, автор уже раздумывал про написание собственной заплатки, пока случайно не наткнулся в коде на хук Amavis::Custom.
      Началось всё с того, что потребовалось пропускать все проверки в amavisd. Это просто сделать при известном отправителе либо получателе или разделяя по банкам на основе портов. Задача становится менее тривиальной если сигналом служит какой-либо заголовок уже принятого для проверки электронного сообщения. Вот тут-то (и в массе других случаев) в дело вступает Amavis::Custom

      Судя по документации из файла примера, пользовательские прищепки(?) доступны с версии amavisd-new-2.5.0 и позволяют внедрятся на нижеуказанных этапах:

    Последовательность обработки сообщения

    # получили письмо, разобрали, собрали основную информацию
    # *custom hook: new() — можно просмотреть начальные данные, загрузить банки, выставить некоторые параметры
    # проверка письма, присвоение оценок
    # *custom hook: checks() — вызывается после проверок на спам и вирусы но до решения о дальнейшей судьбе письма. Тут можно играть с оценками
    # решение о судьбе письма (поиски в *_lovers, пороговые значения, ...)
    # помещение в карантин
    # рассылка уведомлений (админам, получателям)
    # *custom hook: before_send() — можно отсылать собственные уведомления, организовывать карантин, изменять сообщениеmodify mail
    # пересылка (если не заблокированно)
    # *custom hook: after_send() — можно подавлять DSN, слать отчёты
    # отправка DSN (когда надо)
    # запись логов, статистики
    # *custom hook: mail_done() — may inspect results (не уловил смысла)

      В комплектном примере приводится значительный кусок кода для расширения сознания. Автору же требовалось совсем немого. В результате недолгих размышлений в amavisd-custom.conf попали следующие буквы:

    # try to skip checks if already marked as spam
    package Amavis::Custom;
    use strict;
    sub new {
      my($class,$conn,$msginfo) = @_;
      my($self) = bless {}, $class;
     
      for my $curr_head (@{$msginfo->orig_header}) {
        if ($curr_head =~ /^X-SpamTest-Status: spam/i) {
          for my $r (@{$msginfo->per_recip_data}) {
            $r->bypass_spam_checks(1);
            $r->bypass_banned_checks(1);
          }
        }
      }
      $self;
    }
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 0

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.