|
Bog BOS: Clam Anti Virus (ClamAV) и MTA Exim
|
Последнее изменение файла: 2009.10.29
Скопировано с www.bog.pp.ru: 2024.11.23
Bog BOS: Clam Anti Virus (ClamAV) и MTA Exim
ClamAV предназначается для антивирусного сканирования на почтовом шлюзе (на лету) или
файловом сервере (есть модуль dazuko для проверки при обращении).
Автоматическое обновление БД через интернет (цифровая подпись и проверка версии по DNS).
Разделяемая библиотека для включения в свои программы.
GPL, летом 2007 года куплена компанией
Sourcefire,
которая осуществляет платную поддержку.
Умение распаковывать архивы (Zip, RAR 2.0, tar, gzip, bzip2, cab, chm и др.).
Состоит из утилиты автоматического обновления БД сигнатур freshclam,
утилиты сканирования файлов по запросу clamscan,
демона clamd (отпадает необходимость запускать процесс
на каждое письмо), интерфейс с exim.
Установка 0.88.4/0.90.2/0.91.2/0.92/0.93/0.94/0.94.1 из пакетов репозитария
dag
(запасной источник,
запасной источник):
clamav, clamd и clamav-db:
- требуется пакет gmp
- при установке пакетов создаётся группа clamav и пользователь clamav
(/var/clamav, /sbin/nologin)
- процедуры для извещения при невозможности получить обновления или выходе
новой версии clamav
- поправить DatabaseMirror на db.ru.clamav.net в /etc/freshclam.conf
- настроить freshclam.conf:
в частности, настроить вывод в журнал и извещения при ошибках
- для RHEL5 с его целевыми политиками
установить правильный контекст безопасности
- попробовать обновить БД: /usr/bin/freshclam
- добавить запуск "/usr/bin/freshclam -d" куда-нибудь в /etc/rc.d/rc.local
- попробовать проверить что-нибудь (у меня старый почтовый спул с вирусами -
/usr/bin/clamscan -r /var/spool/mqueue; или /squid/cache)
- посмотреть /etc/logrotate.d/freshclam (особенно, если используется syslog)
- посмотреть /etc/cron.daily/freshclam (особенно, если есть желание запускать
freshclam в режиме демона)
Для самостоятельной сборки требуются пакеты zlib, zlib-devel,
bzip2, bzip2-devel, gmp, gmp-devel (GNU MP 3, используется для проверки цифровой подписи).
Обновление БД сигнатур производится утилитой freshclam.
Параметры задаются в файле /etc/freshclam.conf. Каждый параметр описывается
на отдельной строке в формате 'имя значение', регистр важен. Типы данных:
строка без пробелов, число, размер (можно использовать модификаторы K и M),
булевское значение (yes/no или true/false или 1/0).
Строки, начинающиеся с '#', являются комментариями.
Параметры:
- Example (если этот параметр, установлен, то freshclam не запускается)
- DatabaseOwner uid (под каким пользователем работать)
- AllowSupplementaryGroups disabled (учитывать права доступа для дополнительных групп)
- DatabaseDirectory /var/clamav
- Checks 12 (число проверок на наличие изменений в день)
- DNSDatabaseInfo current.cvd.clamav.net (проверять наличие обновлений через DNS)
- DatabaseMirror database.clamav.net (можно указывать несколько источников обновлений;
рекомендуется первым поставить db.ru.clamav.net)
- MaxAttempts 3 (число попыток использования каждого источника)
- ScriptedUpdates enabled (качать только изменения в БД; появился в версии 0.90)
- HTTPProxyServer имя-сервера
- HTTPProxyPort номер-порта
- HTTPProxyUsername имя
- HTTPProxyPassword пароль
- HTTPUserAgent clamav/0.90 (появился в версии 0.90)
- LocalIPAddress исходящий-IP-адрес
- NotifyClamd disabled (здесь задаётся путь к clamd.conf;
метод извещения задаётся в clamd.conf, см. там также SelfCheck)
- UpdateLogFile имя-файла
- LogVerbose disabled
- LogSyslog disabled (можно одновременно с записью в файл)
- LogFacility LOG_LOCAL6 (см. syslog)
- OnUpdateExecute имя-программы (выполнять указанную программу при успешном изменении)
- OnErrorExecute имя-программы (выполнять указанную программу при неудаче)
- OnOutdatedExecute имя-программы (выполнять указанную программу при появлении новой версии)
- ConnectTimeout 10
- ReceiveTimeout 30
- PidFile disabled
- Debug disabled
Ключи утилиты freshclam:
- --daemon (работать в режиме демона; требуется задание Checks и PidFile)
- --no-dns (не использовать DNS для проверки наличия изменений)
- --list-mirrors (вывести информацию из кеша)
- --log=имя-файла
- --datadir=каталог
- --user имя-пользователя
- --checks число-проверок-в-день
- --daemon-notify=путь-к-clamd.conf
- --local-address=исходящий-IP-адрес
- --help
- --version
- --verbose
- --quiet
- множество ключей, дублирующих параметры конфигурационного файла
Для автоматического запуска при загрузке можно добавить в /etc/rc.d/rc.local:
/usr/bin/freshclam --daemon [--no-dns]
Если в организации используется множество сканеров clamav,
то рекомендуется использовать свой прокси для обновления БД сигнатур.
Утилита clamscan позволяет проверять наличие вирусов в указанном каталоге
(или файле или со стандартного ввода). Ключи:
- --help
- --version
- уточнение списка проверямых файлов
- --recursive (-r; обходить указанный каталог рекурсивно)
- --exclude=шаблон-исключений (можно использовать несколько раз)
- --exclude-dir=шаблон-исключений
- --include=шаблон (проверять только файлы, попадающие под шаблон;
можно использовать несколько раз)
- --include-dir=шаблон (проверять только файлы, попадающие под шаблон)
- --max-dir-recursion=15 (максимальный уровень вложенности каталогов)
- специфические методы обработки
- --no-mail (не сканировать почтовые сообщения)
- --no-phishing-sigs (с версии 0.90)
- --no-algorithmic (с версии 0.90; не использовать некоторые специфические алгоритмы)
- --mail-follow-urls (загружать встреченные в почте URL и сканировать их;
не рекомендуется на нагруженном компьютере; не более FOLLOWURLS (5) ссылок в письме;
падает)
- --no-pe (не пытаться разархивировать выполняемые файлы - UPX и др.)
- --no-elf (с версии 0.90; не обрабатываеть файлы в формате ELF)
- --no-ole2 (не обрабатывать файлы в формате Microsoft Office)
- --no-html (не использовать специфические методы обработки HTML файлов)
- --no-archive (не распаковывать архивы; внешние распаковщики продолжают работать)
- --detect-broken (помечать нехорошие выполняемые файлы как вирусы Broken.Executable)
- --block-encrypted (помечать зашифрованные архивы как вирусы Encrypted.Zip и т.п.)
- --max-files=500 (извлекать из архива только первые файлы)
- --max-space=10MB (извлекать из архива только первые файлы)
- --max-recursion=8 (не залезать в архив архивов глубже указанного уровня)
- --max-ratio=250 (максимальный уровень сжатия)
- --max-mail-recursion=64 (с версии 0.90)
- --max-dir-recursion=? (с версии 0.90)
- --block-max (помечать требующие чрезмерных усилий архивы как вирусы RAR.ExceededFileSize
и т.д. - см. --max-files, --max-space, --max-recursion)
- управление информационными сообщениями
- --verbose
- --no-summary (не выдавать итоговый отчёт)
- --infected (сообщать только об обнаруженных вирусах)
- --quiet (об обнаруженных вирусах также не сообщается!)
- --bell (звенеть при обнаружении вируса; звенит даже при --quiet)
- --debug
- --log=имя-файла (файл дополняется)
- --stdout
- действия при обнаружении вирусов
- --move=имя-каталога (перемещать инфицированные файлы в указанный каталог;
д.б. права на запись)
- --copy=имя-каталога (копировать инфицированные файлы в указанный каталог;
д.б. права на запись)
- --remove (удалять файлы с вирусами; не советую)
- --database=имя-файла-или-каталога-с-шаблонами-вирусов
- --tempdir=имя-каталога (место для распаковки; д.б. доступен на запись)
- --leave-temps (не удалять временные файлы)
- пути к архиваторам
- --unzip[=имя-программы]
- --unrar=[имя-программы]
- --arj[=имя-программы]
- --unzoo[=имя-программы]
- --lha[=имя-программы]
- --jar[=имя-программы]
- --deb[=имя-программы]
- --tar[=имя-программы]
- --tgz[=имя-программы]
Например (приведённые исключения необходимы обязательно!):
clamscan -r --infected --detect-broken --block-encrypted --max-space=199M --max-files=5000 \
--block-max --tar=/bin/tar --tgz=/bin/tar --log=clamav.`date +%Y%m%d%H%M%S`.log \
--exclude-dir=/dev --exclude-dir=/net --exclude-dir=/proc --exclude-dir=/.automount \
--exclude-dir=/tmp /
clamscan проверяет архивы и почтовые ящики до первого вируса.
Чтобы узнать в каком конкретном файле (почтовом сообщении) обнаружен вирус и нет ли
там ещё вирусов, необходимо распаковать архив или почтовый ящик вручную (mbox2maildir).
Запуск демона clamd позволяет использовать один процесс (многопоточный)
для сканирования получаемой почты, вместо запуска отдельного процесса clamscan на
каждое письмо. clamd принимает следующие команды на TCP или UNIX сокете
(имя команды может предваряться символом 'n' (0.94) или 'z' (0.95) для уточнения
терминатора строки - '\n' или '\0' соответственно):
- PING (должен ответить PONG)
- VERSION (выводит версию программы и БД сигнатур)
- RELOAD (перезагрузить БД сигнатур - до версии 0.95 при получении следующей команды,
с версии 0.95 - немедленно)
- SHUTDOWN
- SCAN имя-файла-или-каталога (рекурсивно с распаковкой архивов)
- RAWSCAN имя-файла-или-каталога (рекурсивно без распаковки архивов)
- CONTSCAN имя-файла-или-каталога (рекурсивно с распаковкой архивов и продолжением
проверки при нахождении вируса)
- MULTISCAN имя-файла-или-каталога (с версии 0.90; рекурсивное сканирование
в несколько потоков)
- STREAM (clamd возвращает номер порта, к которому можно присоединиться и послать
проверяемый поток, в версии 0.95 рекомендуется перейти на INSTREAM)
- INSTREAM (данные посылаются в том же TCP соединении, с версии 0.95)
- SESSION (начать TCP сессию, в которой можно послать несколько команд,
заменена на IDSESSION в 0.95)
- IDSESSION (начать TCP сессию, в которой можно послать несколько команд,
асинхронный ответ)
- END (завершение сессии)
- FILDES (?)
- STATS (выдать статистику, с версии 0.95)
Обработка сигналов:
- SIGTERM (завершение работ)
- SIGHUP (заново открыть журнал)
- SIGUSR2 (перезагрузить БД сигнатур)
Файл настройки - /etc/clamd.conf (задаётся ключом -c или --config-file=).
Каждый параметр описывается
на отдельной строке в формате 'имя значение', регистр важен. Типы данных:
строка без пробелов, число, размер (можно использовать модификаторы K и M),
булевское значение (yes/no или true/false или 1/0).
Строки, начинающиеся с '#', являются комментариями.
Параметры:
- Example (если этот параметр, установлен, то clamd не запускается)
- управление журнализацией и отладкой
- LogFile имя-файла
- LogFileUnlock (disabled; не использовать системную блокировку файла)
- LogFileMaxSize 1M
- LogTime (disabled; записывать в журнал время)
- LogClean (disabled; записывать в журнал незаражённые файлы)
- LogVerbose (disabled)
- LogSyslog (disabled; можно одновременно с записью в файл)
- LogFacility LOG_LOCAL6 (см. syslog)
- Debug (disabled)
- Foreground (disabled; не уходить в фоновый режим)
- файлы и права доступа
- User имя-пользователя (запускаться от имени указанного пользователя;
необходимы права на каталог)
- AllowSupplementaryGroups disabled (учитывать права доступа для дополнительных групп)
- PidFile имя-файла (disabled)
- TemporaryDirectory /tmp (д.б. доступен на запись)
- LeaveTemporaryFiles (disabled)
- DatabaseDirectory /var/clamav (должен соответствовать freshclam.conf)
- параметры сокетов (либо UNIX, либо TCP, но не одновременно)
- LocalSocket имя-файла (disabled; UNIX сокет для управления clamd;
необходимы права на каталог /var/run/clamav)
- FixStaleSocket (disabled; удалять сокет, оставшийся от предыдущего
неудачного запуска)
- TCPSocket номер-порта (disabled; TCP сокет для управления clamd; 3310)
- TCPAddr (disabled; IP адрес привязки, по умолчанию - INADDR_ANY)
- MaxConnectionQueueLength 15
- MaxThreads 10
- ReadTimeout 120 (секунд даётся клиенту для продолжения задания)
- IdleTimeout 30 (секунд даётся клиенту для начала задания после соединения)
- уточнение списка проверямых файлов
- MaxDirectoryRecursion 15
- FollowDirectorySymlinks (disabled)
- FollowFileSymlinks (disabled)
- специфические методы обработки
- DisableDefaultScanOptions (всё отключить, включить отдельные методы можно
следующими параметрами; ?)
- AlgorithmicDetection (enabled; использовать специфические алгоритмы:
обработка графических форматов и т.д.; с версии 0.90)
- ScanPE (enabled; сканировать формат PE; требуется для разархивации
выполняемых файлов - UPX и др.)
- ScanELF (enabled; обрабатывать файлы в формате ELF; с версии 0.90)
- DetectBrokenExecutables (disabled; помечать нехорошие выполняемые файлы как
вирусы Broken.Executable)
- ScanOLE2 (enabled; обрабатывать файлы в формате Microsoft Office и .msi)
- ScanPDF (disabled; с версии 0.90)
- ScanHTML (enabled; использовать специфические методы обработки HTML файлов)
- ScanMail (enabled; сканировать почтовые сообщения)
- MailFollowURLs (disabled; загружать встреченные в почте URL и сканировать их;
не рекомендуется на нагруженном компьютере)
- MailMaxRecursion 64 (с версии 0.90 по 0.92)
- PhishingSignatures (yes; с версии 0.90)
- PhishingScanURL (enabled; загружать встреченные в обманных письмах URL;
Phishing.Heuristic.Email.*; с версии 0.90)
- PhishingAlwaysBlockSSLMismatch (disabled; считать "неправильные" SSL в URL
обманом, не заглядывая в антивирусную БД; с версии 0.90)
- PhishingAlwaysBlockCloak (disabled; считать "заумные" URL
обманом, не заглядывая в антивирусную БД; с версии 0.90)
- ScanArchive (enabled; распаковывать архивы)
- ScanRAR (disabled! до версии 0.90)
- DetectPUA (disabled; с версии 0.92)
- ArchiveMaxFileSize 10M (извлекать из архива только первые файлы; по 0.92)
- ArchiveMaxRecursion 8 (не залезать в архив архивов глубже указанного уровня;
по 0.92)
- ArchiveMaxFiles 1000 (извлекать из архива только первые файлы; по 0.92))
- ArchiveMaxCompressionRatio 250 (максимальный уровень сжатия; по 0.92))
- ArchiveLimitMemoryUsage (disabled; использовать медленный вариант bunzip2)
- ArchiveBlockEncrypted (disabled;
помечать зашифрованные архивы как вирусы Encrypted.Zip и т.п.)
- ArchiveBlockMax (disabled; помечать требующие чрезмерных усилий архивы как вирусы;
по 0.92)
- MaxScanSize 100M (максимальный сканируемый размер после разархивации; с 0.93)
- MaxFileSize 25M (файлы большего размера до разархивации и после
не сканируются совсем; с 0.93)
- MaxRecursion 16 (не залезать в архив архивов глубже указанного уровня; с 0.93)
- MaxFiles 10000 (извлекать из архива только первые файлы; с 0.93)
- реакция на события
- VirusEvent команда (disabled; выполнять указанную команду при обнаружении вируса;
%v в теле команды заменяется на имя вируса)
- SelfCheck 1800 (секунд; самопроверка и проверка обновлений БД сигнатур)
- ExitOnOOM (disabled; завершаться при нехватке памяти)
- управление потоками (см. команду STREAM)
- StreamMaxLength 10M (максимальный размер задания)
- StreamMinPort 1024 (минимальный номер порта для приёма потока)
- StreamMaxPort 2048 (максимальный номер порта для приёма потока)
- Clamuko* (управление модулем ядра dazuko - проверка файлов по обращению)
- NodalCoreAcceleration no (поддержка аппаратного ускорителя)
В пакет clamd входит скрипт /etc/rc.d/init.d/clamd для запуска
демона:
service clamd start
chkconfig --level 345 clamd on
Утилита для тестирования clamdscan (можно тестировать и вручную).
Воспринимает те же самые ключи, что и clamscan, но передаёт задание демону clamd, т.е.
- большинство параметров игнорируется (необходимо править /etc/clamd.conf)
- сканируемые файлы должны быть доступны clamd
- нельзя использовать внешние распаковщики
- --verbose
- --quiet
- --stdout
- --no-summary
- --config-file=имя-файла
- --log=имя-файла
- --multiscan (с версии 0.90; использовать MULTISCAN)
- --remove (удалять инфицированные файлы)
- --move=имя-каталога
Предназначена, в основном, для разработчиков и отладки.
Ключи:
- --html-normalise=имя-файла (разбирает HTML файл на куски: comment.html,
nocomment.html, script.html)
- --vba=имя-файла (извлекает макросы из документов MS Office)
- --info имя-файла (выдаёт информацию об указанной БД сигнатур и проверяет
цифровую подпись)
- --unpack имя-файла (распаковывает указанную БД сигнатур в текущий каталог)
- --list-sigs (выдать список сигнатур)
Необходим exim версии не старше 4.50.
Предварительно необходимо установить и настроить freshclam,
опробовать clamscan. При настройке clamd.conf настроить журнализацию через syslog:
LogSyslog
LogFacility LOG_MAIL
Интерфейс clamav через UNIX сокет с правами для exim:
LocalSocket /var/run/clamav/clamd.sock
FixStaleSocket
#TCPSocket
User exim
AllowSupplementaryGroups
Увеличить очереди и т.п.:
MaxConnectionQueueLength 150
StreamMaxLength 60M
ArchiveMaxFileSize 60M
ArchiveMaxFiles 5000
MaxThreads 150
ReadTimeout 300
Добавить жёсткости:
DetectBrokenExecutables
ScanMail
ScanRAR
ArchiveBlockEncrypted # ?
ArchiveBlockMax
Обеспечить права доступа к /var/run/clamav только для clamav и exim.
Обеспечить запуск clamd при загрузке и запустить пока вручную.
Добавить в exim/configure (тексты и опции malware по вкусу,
по умолчанию делается reject на все письма с вирусами):
acl_smtp_data = check_data
av_scanner = clamd:/var/run/clamav/clamd.sock
...
check_data:
deny message = Virus found ($malware_name)
malware = *
От версии 0.94.2 к 0.95 (23 марта 2009):
- добавлена возможность использования Google Safe Browsing ("чёрный" список сайтов от Google)
- полностью переписан clamav-milter (теперь обязательно требуется clamd),
ключи и интерфейс не совместимы со старой версией
- расширен протокол обмена с clamd
- удалена команда SESSION и реализована команда IDSESSION (асинхронная) - несовместимость
- пересмотрен API (libclamav) - несовместимость
- утилита clamdtop позволяет получить информацию о текущем состоянии clamd (ncurses)
- переделано выделение памяти (общий mmap)
- унифицированный обработчик ключей для всех программ (смена имён ключей!)
- больше не требуется библиотека libgmp (используется встроенная или внешняя libtommath)
От версии 0.94.1 к 0.94.2 (27 ноября 2008):
- опция configure --enable-mempool (полное освобождение памяти при обновлении БД сигнатур)
- смена API
От версии 0.94 к 0.94.1 (3 ноября 2008):
- freshclam отправляет статистику авторам программы (по умолчанию - выключено,
требуется LogTime и LogFile в clamd.conf)
От версии 0.93 к 0.94 (1 сентября 2008):
- расширен язык описания шаблонов (логические операторы)
- ключ --heuristic-scan-precedence и опция HeuristicScanPrecedence для управления проверки
на фишинг
- деассемблер
- ключи --exclude-pua и --include-pua, а также опциии ExcludePUA и IncludePUA
для управления загрузкой шаблонов проверки нежелательных приложений
(NetTool, PWTool, Spy, Scanner, RAT)
- ключ --detect-structured и опция StructuredDataDetection для сканирования утечки
номеров кредитных карт и номеров социального обеспечения (USA)
- IPv6
- нормализация JavaScript перед сканированием
- улучшение системы тестирования (QA and Unit Testing)
От версии 0.92 к 0.93 (14 апреля 2008):
- полностью переделаны опции и ключи настройки ограничений:
добавлены MaxScanSize (--max-scansize), MaxFileSize (--max-filesize),
MaxRecursion, MaxFiles; удалены MailMaxRecursion, ArchiveMaxFileSize,
ArchiveMaxRecursion, ArchiveMaxFiles, ArchiveMaxCompressionRatio (-max-ratio),
ArchiveBlockMax (--block-max)
- новые модули распаковки: SIS, cabinet, CHM, SZDD
- опция freshclam: CompressLocalDatabase
- ключ freshclam: --no-warnings
- архивы ".cld" вместо каталогов ".inc" (каталоги надо удалить вручную, 30MB)
От версии 0.91 к 0.92 (13 декабря 2007):
- распаковка архивов ARJ и SFX-ARJ
- учёт SPF для уменьшения числа ложных срабатываний
- режим chroot
- PUA (Possibly Unwanted Applications) databases (.hdu, .mdu, .ndu) -
ключ "--detect-pua", DetectPUA
- FixStaleSocket включён по умолчанию
- unrar вынесен в отдельную библиотеку, для сборки требуется ключ "--enable-unrar"
- поддержка распаковщика autoit
- обработка сигналов: SIGUSR2 - перезагрузка БД, SIGHUP - закрыть и открыть журнал
От версии 0.90 к 0.91:
- борьба с фишингом по умолчанию
- распаковщики NSIS (Nullsoft Scriptable Install System), ASPack 2.12
- по умолчанию, вместо /tmp/clamd используется /tmp/clamd.socket
От версии 0.88 к 0.90:
- множество новых распаковщиков и дешифраторов (RAR3)
- противофишинговые сигнатуры
- при обновлении БД передаются только изменения
- изменён формат файла настройки
|
Bog BOS: Clam Anti Virus (ClamAV) и MTA Exim
|
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru