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 попали следующие буквы:
Началось всё с того, что потребовалось пропускать все проверки в 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;
}