Антивирусная проверка почты с помощью файла tossspool.bat
Предупреждаю сразу: это решение "для бедных" или на случай каких-либо экзотических ситуаций — например, сугубой необходимости применения антивируса, не поддерживаемого Eserv. Во-первых, его использование приводит к повышенному расходу ресурсов компьютера, что отрицательно сказывается на обработке больших потоков почты. Во-вторых, некоторые версии некоторых антивирусов по этой схеме не заработают вообще просто в силу особенностей своего устройства. Наконец, этот вариант, мягко говоря, не приветствуется антивирусными компаниями. Формально они правы — при оплаченной клиентской лицензии программа нашла серверное применение, каковое ("согласно закону и обычаю", как любят выражаться в гражданских обществах Дикого Запада) оценивается существенно дороже — как минимум, раз в десять. Поэтому, во избежание всех перечисленных неприятностей, рекомендуется загодя приобрести лицензию на использование интегрированного антивируса (который, впрочем, вполне можно использовать и в демонстрационном режиме при условии грамотного учёта возникающих при этом ограничений). Командный файл tossspool.bat рекомендуется использовать совместно с подкаталогом mail\spool\to_check. Поскольку файлы сообщений создаются без всякой синхронизации с работой Тоссера, то, появись они в каталоге mail\spool, существует вероятность появления файла именно к моменту окончания работы tossspool.bat — это привело бы к пропуску важного этапа обработки. Создание файлов сообщений в отдельном каталоге гарантирует, что ни одно письмо не пройдёт через Тоссер без предварительной обработки. Естественно, применять необходимо полнофункциональные версии антивирусных сканеров, поскольку в демонстрационном режиме большинство антивирусов имеют жёсткие ограничения в работе — так, например, Dr.Web производства
Стандартное решение с использованием AVP (KAV)
Это решение разработано пользователями Eserv и доступно для загрузки с сервера ftp.eserv.ru в виде архива antivirus_avp.zip. Структура каталогов:mail\---mail\spool\---mail\spool\to_check\---check\---check\vir\ Используемые файлы:
agents\tossspool.bat---check\testvir.bat Содержимое файла agents\tossspool.bat:
for %^^^^%f in (mail\spool\to_check\*.*) do call check\testvir.bat %^^^^%f Вся его функция сводится к вызову файла check\testvir.bat с передачей ему в качестве аргумента имени очередного обнаруженного в проверяемом каталоге файла. Сделано так потому, что большинство антивирусов никаких действий с заражёнными письмами не производят — они только проверяют файл и устанавливают код завершения, на основании которого командный файл может предпринимать различные действия. Содержимое файла check\testvir.bat:
echo "c:\eserv2\%1" >> testvir.log---"C:\Program Files\Kaspersky Lab\AVP Pro\~Avp32.exe" "c:\eserv2\%1" /S /N /Q---if ERRORLEVEL 2 goto virus---if ERRORLEVEL 3 goto virus---if ERRORLEVEL 4 goto virus---goto endtest---:virus---move %1 CHECK\VIR\---:endtest---move %1 mail\spool\ Здесь предполагается, что Eserv установлен в каталог C:\eserv2, а антивирусный сканер — в каталог C:\Program Files\Kaspersky Lab\AVP Pro (в исходном файле путь несколько другой, очень уж длинный) под именем ~Avp32.exe. Если пути отличаются, их необходимо поправить. Первой строкой в файл протокола testvir.log, который создаётся прямо в каталоге установки Eserv, записывается имя проверяемого файла. Далее файл предъявляется для проверки антивирусному сканеру. По результатам этой проверки файл письма перемещается либо в каталог карантина check\vir, где и будет храниться, пока у администратора не дойдут до него руки, либо для дальнейшей обработки в mail\spool. Возможные подводные камни: в зависимости от сочетания используемой версии AVP (KAV) сканера и версии операционной системы командный файл может не дожидаться завершения работы сканера. В этом случае код завершения равен нулю независимо от результата сканирования. Решения этой проблемы пока нет.
Решение с использованием Dr.Web ранних версий (ниже 4.28)
Это решение было испытано лично и в течение примерно года (до перехода на интегрированный антивирус) надёжно защищало нашу сеть. В нём используется более удобная для автоматизации консольная версия сканера (drwebwcl.exe). Если Вы по каким-то причинам не установили её, можете использовать и оконную версию (drweb32w.exe), но в этом случае в командную строку вызова приложения необходимо добавить ключ /QU, чтобы программа по окончании проверки завершила работу и закрыла своё окно. Структура каталогов:mail\---mail\spool\---mail\spool\to_check\---mail\check\---mail\infected\ Используемые файлы:
agents\tossspool.bat---agents\tosscheck.bat---agents\tossspool.ini---agents\sendmail.exe---agents\virusalert.txt Содержимое файла agents\tossspool.bat:
set FILES=0---for %^^^^%f in (mail\spool\to_check\*.*) do set FILES=1---if %FILES%==0 goto end---move mail\spool\to_check\*.* mail\check\---for %^^^^%f in (mail\check\*.*) do call agents\tosscheck.bat "%^^^^%f"---move mail\check\*.* mail\spool\---if %FILES%==2 agents\sendmail.exe
c:\avir\drwebwcl.exe %1 /go /ini:agents\tossspool.ini---if not errorlevel 1 goto end---set FILES=2---move %1 mail\infected\---:end Здесь предполагается, что Dr.Web установлен в каталог C:\avir (если Вы использовали другой каталог, укажите его в командном файле). По результатам проверки файла либо не предпринимается никаких действий (если файл письма не содержит вирусов), либо (если обнаружен вирус или хотя бы подозрение) письмо перемещается в каталог mail\infected и устанавливается "тревожное" значение переменной окружения FILES. Содержимое файла agents\tossspool.ini:
[Windows]---~LngFileName = "Russian.DWL"---~ScanFiles = All---~HeuristicAnalysis = Yes---~CheckPackedFiles = Yes---~CheckArchives = Yes---~CheckEMailFiles = Yes---~InfectedFiles = ~ReportOnly---~SuspiciousFiles = ~ReportOnly---~IncurableFiles = ~ReportOnly---~ExcludePaths =---~VirusBase = "*.vdb"---~LogToFile = Yes---~OverwriteLog = No---~LogScanned = Yes---~LogPacked = Yes---~LogArchived = Yes---~LogFileName = "C:\eserv2\log\~TossSpool.log"---~LogFormat = ANSI---~ShowProgressBar = No---~ScanPriority = 25---~TestMemory = No---~AutoSaveSettings = No---~ScanSubDirectories = Yes---~TestBootSectors = No---~PromptOnAction = No---~PromptFloppy = No---~PlaySounds = No---~UseDiskForSwap = Yes---~LogStatistics = Yes---~AutoUpdate = No---~ScanFDD = No---~ScanHDD = Yes---~ScanCD = No---~ScanNet = No---~LimitLog = No---~RestoreAccessDate = No Здесь предполагается, что Eserv установлен в каталог C:\eserv2 — отчёт сканера о проверке файлов записывается в тот же каталог log, что и собственные журналы Eserv. Файл отчёта TossSpool.log в таком варианте бесконтрольно пухнет, его надо укорачивать вручную. Однако, если Eserv работает под Windows NT/2000/XP, можно воспользоваться расширенными возможностями системы. Для этого в начало командного файла agents\tossspool.bat добавляется следующая строка:
for /f "tokens=2,3 delims=. " %^^^^%d in ('date /t') do set DD_=%^^^^%d&set MM_=%^^^^%e а строка запуска сканера в командном файле agents\tosscheck.bat записывается следующим образом:
c:\avir\drwebwcl.exe %1 /go /ini:agents\tossspool.ini /rp+C:\eserv2\log\%MM_%^^^^%DD_%tossspool.log Этот вариант решения позаимствован у Андрея Лаврова. Надо заметить, что работает он не при всяких региональных настройках — ему необходимо, чтобы системная команда date использовала российский формат вывода ДД.ММ.ГГГГ. При других форматах потребуется указать другие разделители либо другие поля. Содержимое файла agents\virusalert.txt:
From: "Mailer-Daemon"
При анализе почты обнаружены вирусы! Файл agents\sendmail.exe не входит в стандартную поставку Eserv, но может быть загружен отдельно с адреса

Решение с использованием Dr.Web версии 4.28 и выше
Начиная с версии 4.28 программы семейства Dr.Web научились перемещать, переименовывать и удалять файлы-контейнеры, к которым относятся и почтовые файлы. В результате появилась возможность использовать ресурсы системы более эффективно — теперь сканер можно запускать единожды на каждый проход независимо от числа проверяемых писем. Предлагаемое решение проверено в тестовой конфигурации. Структура каталогов:mail\---mail\spool\---mail\spool\to_check\---mail\check\---mail\infected\ Используемые файлы:
agents\tossspool.bat---agents\tossspool.ini---agents\sendmail.exe---agents\virusalert.txt Содержимое файла agents\tossspool.bat:
set FILES=0---for %^^^^%f in (mail\spool\to_check\*.*) do set FILES=1---if %FILES%==0 goto end---move mail\spool\to_check\*.* mail\check\---c:\avir\drwebwcl.exe mail\check\*.* /go /ini:agents\tossspool.ini---if errorlevel 1 agents\sendmail.exe
[Windows]---~LngFileName = "Russian.DWL"---~ScanFiles = All---~HeuristicAnalysis = Yes---~CheckPackedFiles = Yes---~CheckArchives = Yes---~CheckEMailFiles = Yes---~InfectedFiles = Move---~SuspiciousFiles = Move---~IncurableFiles = Move---~MoveFilesTo = "C:\eserv2\mail\infected"---~ExcludePaths =---~VirusBase = "*.vdb"---~LogToFile = Yes---~OverwriteLog = No---~LogScanned = Yes---~LogPacked = Yes---~LogArchived = Yes---~LogFileName = "C:\eserv2\log\~TossSpool.log"---~LogFormat = ANSI---~ShowProgressBar = No---~ScanPriority = 25---~TestMemory = No---~AutoSaveSettings = No---~ScanSubDirectories = Yes---~TestBootSectors = No---~PromptOnAction = No---~PromptFloppy = No---~PlaySounds = No---~UseDiskForSwap = Yes---~LogStatistics = Yes---~AutoUpdate = No---~ScanFDD = No---~ScanHDD = Yes---~ScanCD = No---~ScanNet = No---~LimitLog = No---~RestoreAccessDate = No---~WaitAfterScan = No---~ActionInfectedArchive = Move---~ActionInfectedMail = Move---~ActionInfectedContainer = Move---~TestStartup = No---~PromptOnInfectedAction = No---~PromptOnIncurableAction = No---~PromptOnSuspiciousAction = No---~PromptOnInfectedArchiveAction = No---~PromptOnInfectedMailAction = No---~PromptOnInfectedContainerAction = No---~EnableDeleteArchiveAction = No Как и в предыдущем примере, предполагается, что Eserv установлен в каталог C:\eserv2. Исходя из этого предположения, задаётся не только каталог для размещения отчёта (log), но и каталог для перемещения заражённых файлов (mail\infected). Для борьбы с распуханием отчёта можно использовать тот же приём, что и в предыдущем решении. Содержимое файла agents\virusalert.txt осталось прежним:
From: "Mailer-Daemon"
При анализе почты обнаружены вирусы!
Решение с использованием резидентного сторожа SpIDer Guard версии 4.28 и выше
Это весьма интересное решение предложено сотрудником фирмы

#||
||Режим проверки "на лету"|Оптимальный либо Создание и запись||
||Типы файлов|Все файлы||
||Форматы|Упакованные файлы и Почтовые файлы — обязательно, Файлы в архивах — рекомендуется||
||# Для каждого типа вирусов обязательно нужно задать определённое действие, отличное от действия Информировать. Действие Информировать задавать нельзя — оно вызывает диалог с пользователем и недопустимо на постоянно работающем сервере. Самый разумный вариант — выбрать для всех типов объектов (излечимые, неизлечимые и подозрительные) и всех типов архивов (архивы, почтовые файлы и контейнеры) действие Переместить. Для почтовых файлов, которые и являются объектом нашего изучения, действие Переместить является обязательным. Куда будут перемещаться заражённые файлы — решать Вам. Теперь перейдём к настройке Eserv. Структура каталогов:
mail\---mail\spool\---mail\spool\to_check\ Используемые файлы:
agents\tossspool.bat Содержимое файла agents\tossspool.bat:
move mail\spool\to_check\*.* mail\spool\ Простота и эффективность решения заключаются в том, что антивирусный сторож перехватит (и отправит в карантин) заражённые либо подозрительные письма либо непосредственно при первичной записи в подкаталог mail\spool\to_check, либо при перемещении их на дальнейшую обработку в каталог mail\spool. Существенный минус — отсутствие автоматического извещения кого-либо. Впрочем, если связка Eserv и SpIDer Guard работает под управлением Windows NT/2000/XP, можно организовать рассылку извещений средствами самого сторожа. Чтобы антивирусный сторож не вступил в конфликт с Eserv (который никак не ожидает, что используемые им файлы будут вдруг заблокированы, удалены или перемещены) и просто не тратил зря драгоценные ресурсы системы, в список непроверяемых сторожем путей следует занести достаточно большое число рабочих каталогов Eserv: каталог журналов log, каталог временных рабочих файлов temp, каталог кэша HTTP-прокси http__, каталог пользовательских почтовых ящиков mail\in.
Формирование автоматического извещения с помощью агента erobot.exe
Начиная с версии 2.98 в поставку Eserv также входят шаблоны и конфигурационные файлы для агента erobot.exe, предназначенные для работы с интегрированным антивирусом. Их достаточно легко можно приспособить для формирования автоизвещения об обнаружении вируса и в случае проверки внешним антивирусом. Проще всего это реализовать при проверке каждого письма в отдельности (см. первые два решения). В этом случае в командный файл check\testvir.bat или agents\tosscheck.bat перед соответствующей командой move добавляется такая строка:agents\erobot.exe -c agents\av.cfg -p1 "Name not available" -p2 domain.ru -i "%1" В качестве параметра ключа -p2 указывается Ваш почтовый домен, ключ -p1 предназначен для передачи имени обнаруженного вируса, которое в данной ситуации действительно недоступно. Стандартный вариант конфигурационного файла agents\av.cfg и набор шаблонов обеспечивают отсылку извещений отправителю и получателю, извещение же администратора придётся подключать самостоятельно, путём ручного редактирования конфигурационного файла. Например, так (здесь приводятся только изменённые фрагменты):
: ~RecvVirus S" agents\recv_virus.pat" PAT ;---: ~SentVirus S" agents\sent_virus.pat" PAT ;---!!: ~AdminVirus S" agents\admin_virus.pat" PAT ;!!
(пропущено)
~RecvVirus CR---~SentVirus CR---!!~AdminVirus CR!! Цветом выделены добавленные строки. Шаблон сообщения agents\admin_virus.pat можно сконструировать на основе существующих agents\recv_virus.pat и agents\sent_virus.pat. Я могу предложить такой вариант:
For: postmaster@local---From: "Mailer-Daemon"
В поступившем письме (см. mail\infected\%VIRUS-FILE%), отправленном с адреса %FROM% на адрес %TO-%, обнаружен вирус
. Чтобы правильно подставить в извещения имя сохранённого в карантине файла и адрес отправителя, в конфигурационный файл agents\av.cfg потребуется внести ещё пару изменений. Найдите в нём следующие строки (они находятся вовсе не рядом, но обрабатывают один и тот же параметр — имя файла письма):
INfile @ COUNT 11 - 0 MAX SWAP 11 + SWAP---IF COUNT 11 - 0 MAX SWAP 11 + SWAP Упомянутое в них "волшебное" число 11 соответствует использованию интегрированного антивируса и равняется длине неизбежной "приставки" к имени файла mail\spool\ (можете пересчитать буквы). Если проверяемые файлы размещаются в каталоге mail\spool\to_check\, то "приставка" получится подлиннее — 20 символов, каковое число и надлежит проставить по два раза в обеих строчках. А вот если предварительно переместить файлы на проверку в каталог mail\check\, то исправлений не потребуется.
Посмотреть другие категории решений
Вернуться к содержанию