Victor Ustugov wrote:
> возникла идея отработать ситуацию, когда будут использоваться более
> одного антивируса одного типа.
>> пример схемы, работающей ныне на большинстве хостов, использующих мой
> паровоз конфигов:
>> deny set acl_m0 = clamd:/var/run/clamav/clamd
> malware = */defer_ok
> message = ClamAV found a virus: $malware_name
>> deny set acl_m0 = drweb:/usr/local/drweb/run/drwebd.sock
> malware = *
> message = DrWeb found a virus: $malware_name
>> так вот, если при этом clamd не ответит, а у drwebd в базе не будет
> данного вируса, то зараженное письмо будет доставлено.
>> есть идея после первого deny вставить еще deny:
>> deny set acl_m0 = clamd:host.with.clamd 3310
> malware = */defer_ok
> message = ClamAV found a virus: $malware_name
>> задача состоит в том, чтобы выполнять этот deny только тогда, когда
> результатом первого deny будет defer.
реализовал, провел серию небольших тестов. пока связка ведет себя хорошо
были использованы следующие параметры для site/conf:
ANTIVIRUS(`ClamAV', `QUARANTINE DISCARD',
`clamd:/var/run/clamav/clamd.sock', `defer_next')
ANTIVIRUS(`DrWeb_remote', `QUARANTINE DISCARD', `drweb:10.0.0.7 3000',
`defer_ok')
ANTIVIRUS(`DrWeb', `QUARANTINE REJECT',
`drweb:/var/drweb/run/drwebd.socket', `')
в итоге был сгенерирован следующий фрагмент для configure:
acl_check_data:
warn set acl_c0 = clean
warn \
set acl_m0 = clamd:/var/run/clamav/clamd.sock
acl = acl_check_data_av
# Пометка зараженного письма для помещения в карантин
warn \
condition = ${if eq{$acl_c0}{infected}{yes}{no}}
set acl_c0 = quarantine
message = X-Virus: ClamAV found a virus:
$malware_name
log_message = ClamAV found a virus: $malware_name
accept condition = ${if eq{$acl_c0}{quarantine}{yes}{no}}
# Пометка зараженного письма для помещения в карантин
warn condition = ${if eq{$acl_c0}{defer}{yes}{no}}
set acl_m0 = drweb:10.0.0.7 3000
demime = *
malware = */defer_ok
set acl_c0 = quarantine
message = X-Virus: DrWeb_remote found a virus:
$malware_name
log_message = DrWeb_remote found a virus: $malware_name
accept condition = ${if eq{$acl_c0}{quarantine}{yes}{no}}
# Фиктивный отказ от приема зараженного писема с пометкой
письма для помещения в карантин
warn \
set acl_m0 = drweb:/var/drweb/run/drwebd.socket
demime = *
malware = *
set acl_c0 = quarantine
message = X-Virus: DrWeb found a virus:
$malware_name
log_message = DrWeb found a virus: $malware_name
control = fakereject
fakereject_message = DrWeb found a virus: $malware_name
accept condition = ${if eq{$acl_c0}{quarantine}{yes}{no}}
acl_check_data_av:
warn set acl_c0 = defer
accept ! malware = *
set acl_c0 = clean
warn set acl_c0 = infected
accept
второй антивирус используется только при defer'е при работе первого
антивируса.
при defer'е при работе со вторым антивирусом проверка продолжается
третьим антивирусом.
при defer'е при работе с третьим антивирусом exim возвращает defer клиенту.
welcome to test
p. s. повторюсь, что если в качестве удаленного антивируса будет
использвоаться clamd, то нужно пересобрать exim с патчем:
http://bsd.falbi.kiev.ua/exim-patches/exiscan-acl-4.42-27-malware-clamd/patch-src::malware-clamd.patch
если кто-то потестит всю эту связку с удаленным clamd, буду очень благодарен
--
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