[exim-conf] multiple antivirus daemons and defer_ok

Victor Ustugov victor на corvax.kiev.ua
Пн Сен 27 12:04:01 EEST 2004


Victor Ustugov wrote:

>>>> кому-нибудь нужно отменять удаление проверяемых файлов из 
>>>> /var/spool/exim/scan при DEFER'е от антивирусного демона?
>>>> это может пригодиться для последующих разборок с причинами DEFER'а.
>>>
>>> Это ты по мотивам обсуждения no_mbox_unspool в exiscan-users?
> 
>> теперь придется все переписывать с учетом механизма вылавливания 
>> DEFER'а, который использован при обработке defer_next.
> 
> переписал
> 
> теперь при использовании конструкции ANTIVIRUS для описания настроек 
> антивирусов можно использовать в качестве значения четверного параметра 
> строки defer_no_mbox_unspool
> 
> это значение можно использовать как одновременно с defer_ok или 
> defer_next, так и самостоятельно. несколько значений могут быть указаны 
> через пробел.
> 
> пример:
> 
> ANTIVIRUS(`ClamAV', `QUARANTINE REJECT', `clamd:/var/run/clamav/clamd', 
> `defer_ok defer_no_mbox_unspool')
> ANTIVIRUS(`DrWeb', `QUARANTINE REJECT', 
> `drweb:/usr/local/drweb/run/drwebd.sock', `defer_no_mbox_unspool')
> 
> ANTIVIRUS(`ClamAV', `QUARANTINE REJECT', `clamd:/var/run/clamav/clamd', 
> `defer_next defer_no_mbox_unspool')
> ANTIVIRUS(`ClamAV_TCP', `QUARANTINE REJECT', `drweb:localhost 3310', 
> `defer_ok defer_no_mbox_unspool')
> ANTIVIRUS(`DrWeb', `QUARANTINE REJECT', 
> `drweb:/usr/local/drweb/run/drwebd.sock', `defer_no_mbox_unspool')
> 
> также реализована обработка DEFER'а от антивируса, если не был указан 
> defer_ok. сообщение SMTP клиенту возвращается более внятное.
> 
> осталось оттестить все это тщательнее во всех позах

для тех, кто не юзает весь паровоз, вот пример настроек:

ANTIVIRUS(
         `ClamAV',
         `QUARANTINE REJECT',
         `clamd:/var/run/clamav/clamd',
         `defer_next defer_no_mbox_unspool'
)
ANTIVIRUS(
         `Clamav_tcp',
         `REJECT',
         `clamd:10.0.0.30 3310',
         `defer_ok defer_no_mbox_unspool'
)
ANTIVIRUS(
         `DrWeb',
         `QUARANTINE DISCARD',
         `drweb:/usr/local/drweb/run/drwebd.sock',
         `defer_next defer_no_mbox_unspool'
)
ANTIVIRUS(
         `DrWeb_tcp',
         `DISCARD',
         `drweb:10.0.0.30 3000',
         `defer_no_mbox_unspool'
)

пример сгенерированного конфига в аттаче.
так же там пример системного фильтра для сохранения письма в карантине и 
отсылки оповещений, а также шаблон письма оповещения (в виде 
multipart/report сообщения).

пример сгенерирован с использованием четырех антивирусов, чтобы отразить 
в configure все варианты REJECT/DISCARD/QUARANTINE.

если надо отправлять оповещения не всем получателям, а делать исключения 
(что логично), то для этого надо использовать не переменную $recipients, 
а в acl_check_rcpt проверять перед каждым accept каждого получателя на 
необходимость отсылки ему квитанции, если в acl_check_data будет принято 
решение об этом. накапливается список таких получателей в $acl_m7.

как пример, я заменил фрагмент

         accept  hosts           = :
         accept  hosts           = +relay_from_hosts
         accept  authenticated   = *
         accept  hosts           = +relay_white_list
                 domains         = +local_domains : +relay_to_domains
                 set acl_m9      = while_list_relayes

на фрагмент

         warn    set acl_m0      =
         warn    hosts           = :
                 set acl_m0      = accept
         warn    hosts           = +relay_from_hosts
                 set acl_m0      = accept
         warn    authenticated   = *
                 set acl_m0      = accept

         warn    hosts           = +relay_white_list
                 domains         = +local_domains  : +relay_to_domains
                 set acl_m9      = while_list_relayes
                 set acl_m0      = accept

         warn    condition       = ${if eq{$acl_m0}{accept}{yes}{no}}
                 ! recipients    = 
@@wildlsearch;CONFDIR/skip_avir_notify_rcpt
                 set acl_m7      = ${if\
				eq{$acl_m7}{}\
				{<$local_part@$domain>}\
                                 {$acl_m7, <$local_part@$domain>}}

         accept  condition       = ${if eq{$acl_m0}{accept}{yes}{no}}

перед остальными accept внутри acl_check_rcpt тоже нужно добавить 
текущего получателя в $acl_m7

при этом исключения для отсылки оповещений указываются в файле 
skip_avir_notify_rcpt в виде:

domain1: user1.1 : user1.2
domain2: user2.1 : user2.2 : !*
* : *

самая простая схема, это перечислить все локальные домены со значением 
!*, а в конце запретить отсылку квитанций получателям из всех остальных 
доменов:

local.domain.1 : !*
local.domain.2 : !*
local.domain.3 : !*
* : *

-- 
Best wishes Victor Ustugov   mailto:victor на corvax.kiev.ua
public GnuPG/PGP key:        http://victor.corvax.kiev.ua/corvax.asc
ICQ: 77186900, 32418694      CRV2-RIPE, CRV-UANIC
----------- следущая часть -----------
An embedded and charset-unspecified text was scrubbed...
Name: configure
URL: <http://mta.org.ua/pipermail/exim-conf/attachments/20040927/dceb27bf/attachment.ksh>
----------- следущая часть -----------
An embedded and charset-unspecified text was scrubbed...
Name: system_filter
URL: <http://mta.org.ua/pipermail/exim-conf/attachments/20040927/dceb27bf/attachment-0001.ksh>
----------- следущая часть -----------
An embedded and charset-unspecified text was scrubbed...
Name: antivir_notification.txt
URL: <http://mta.org.ua/pipermail/exim-conf/attachments/20040927/dceb27bf/attachment.txt>


Подробная информация о списке рассылки exim-conf