1. YaBtr

    YaBtr Members of Antichat

    Joined:
    30 May 2012
    Messages:
    601
    Likes Received:
    350
    Reputations:
    652
    Здравствуйте, коллеги! Вашему вниманию представляю небольшой FAQ-статью по антивирусу Clam. Несмотря на то, что вирусы для операционных систем UNIX вне лабораторной среды встречаются крайне редко, защита от вредоносного программного обеспечения является актуальной, т. к., например, вирусы могут распространяться через почтовые сообщения, проходящие через шлюзы и почтовые серверы, построенные на базе таких систем, и впоследствии заражать компьютеры под управлением ОС Microsoft Windows различных версий. В статье рассмотрю антивирусный продукт ClamAV, предназначенный для защиты операционных систем класса Unix (Linux).

    Clam AntiVirus — это антивирусный набор с открытым исходным кодом (GPL) для UNIX, предназначенный, прежде всего, для сканирования электронной почты на почтовых шлюзах. Он предоставляет некоторое количество утилит, включая гибкий и масштабируемый многопоточный фоновый процесс, сканер командной строки и продвинутый инструмент для автоматических обновлений баз данных. Ядром набора является антивирусный механизм, доступный в форме разделяемой библиотеки.
    Основные характеристики данного антивирусного средства следующие:
    сканер командной строки;
    быстрый, многопоточный демон с поддержкой сканирования при доступе;
    milter-интерфейс для почтовой программы sendmail;
    продвинутая программа обновления баз данных с поддержкой скриптовых обновлений и цифровых подписей;
    C-библиотека вирусного сканера;
    сканирование при доступе (Linux и FreeBSD);
    вирусная база данных, обновляемая несколько раз в день;
    встроенная поддержка различных архивных форматов, включая Zip, RAR, Tar, Gzip, Bzip2, OLE2, Cabinet, CHM, BinHex, SIS и другие;
    встроенная поддержка почти всех форматов почтовых файлов;
    встроенная поддержка выполняемых файлов ELF и Portable Executable, сжатых UPX, FSG, Petite, NsPack, wwpack32, MEW, Upack и замаскированных SUE, Y0da Cryptor и другими;
    встроенная поддержка общераспространённых форматов документов, включая файлы MS Office и MacOffice, HTML, RTF и PDF.
    Продукт поставляется в исходных кодах, хотя существуют и бинарные сборки для различных дистрибутивов Windows.​
    Для сборки и тестирования антивируса в системе требуется наличие:
    • пакетов zlib and zlib-devel;
    • набора компиляторов gcc с языков C и C++ (рекомендуется версия 4.3.4. или выше);
    • библиотеки bzip2 and bzip2-devel;
    • процессор, поддерживающий JIT, один из: X86, X86-64, PowerPC, PowerPC64
    • GNU Make (рекомендуется версия 3.81)
    • Python (версия 2.5.4 или более новая), для выполнения тестов.​
    Перед тем, как использовать антивирус, следует создать отдельного пользователя и отдельную группу, от имени которых будет выполняться процесс антивируса. Сделать это можно с помощью следующих команд:
    # groupadd clamav
    # useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav​
    Замечу, что пользователь не предназначен для интеркативной работы, и его учетная запись заблокирована.
    После создания учетной записи пользователя clamav следует извлечь файлы исходных текстов из архива, выполнить конфигурацию и сборку исполняемых файлов. Предполагая, что потребуется установить конфигурационные файлы в /etc, конфигурация выполняется следующим образом:
    # ./configure --sysconfdir=/etc
    # make​
    После чего антивирус устанавливается командой
    # make install​
    Исполняемые файлы устанавливаются в каталог /usr/local, а конфигурационные файлы в /etc. Никогда не следует включать биты SUID или SGID для исполняемых файлов антивируса.
    Перед началом использования фонового процесса clamd требуется выполнить его настройку, иначе он не запустится:
    $ clamd​
    ERROR: Please edit the example config file /etc/clamd.conf.
    В этой строке указано расположение файла конфигурации по умолчанию. Формат и параметры этого файла подробно описаны в руководстве clamd.conf. Файл конфгурации хорошо откомментирован и его настройка не должна вызывать трудностей.
    Для тестирования корректности установки попробуйте просканировать каталог с исходными текстами:
    $ clamscan -r -l scan.txt clamav-x.yz​
    Антивирус должен найти некоторые тестовые файлы в каталоге clamav-x.yz/test. Результаты сканирвоания будут записаны в файл scan.txt. Для тестирования фонового процесса clamd запустите его и воспользуйтесь командой clamdscan (или непосредственно подсоединитесь к сокету процесса и выполните команду SCAN):
    $ clamdscan -l scan.txt clamav-x.yz​
    Заметим, что сканируемые файлы должны быть доступны для пользователя, запустившего clamd, в противном случае получим сообщение об ошибке.
    Обновление антивирусной базы производится с помощью утилиты freshclam, которая может работать в двух режимах:
    • интерактивном – при запуске из командной строки;
    • фоновом – при выполнении в виде фонового процесса без взаимодействия с пользователем.
    freshclam – мощная утилита, поддерживающая дифференциальные обновления (вместо передачи всей базы данных вирусов передается только разность между текущей и самой новой базой данных с использованием специального скрипта.
    Протестировать утилиту можно запустив freshclam (из-под суперпользователя) без параметров и проверить выход команды. Если все нормально, можно создать файл журнала в каталоге /var/log (владельцем которого является, например, пользователь clamav):
    # touch /var/log/freshclam.log
    # chmod 600 /var/log/freshclam.log
    # chown clamav /var/log/freshclam.log​
    Теперь следует отредактировать конфигурационный файл freshclam.conf и в директиве UpdateLogFile указать созданный файл журнала. Наконец, чтобы запустить freshclam в фоновом режиме, следует выполнить команду:
    # freshclam -d​
    Другим способом является использование нашего любимого процесса cron. Понадобится добавить строку в cron-таблицу суперпользователя или пользователя clamavr:
    N * * * * /usr/local/bin/freshclam –quiet​
    чтобы проверять обновления каждый час. N должно быть числом между 3 и 57 и не кратно 10, чтобы снизить нагрузку на серверы обновления. В конфигурационном файле также можно настроить работу через прокси-сервер при помощи параметров
    HTTPProxyServer myproxyserver.com
    HTTPProxyPort 1234
    HTTPProxyUsername myusername
    HTTPProxyPassword mypass
    Использование анитвируса​
    clamd представляет собой многопоточную программу, которая использует библиотеку libclamav для сканирвоания файлов на наличие вирусов. Он может работать в одном или сразу в обоих режимах:
    • прослушивания локльного сокета Unix;
    • прослушивания сокета TCP.​
    clamd воспринимает следующие команды:
    • PING – проверить состояние процесса (должен ответить сообщением ”PONG”).
    • VERSION – напечатать версию программы и базы данных;
    •RELOAD – перезагрузить базу данных;
    • SHUTDOWN – выполнить корректный выход из программы;
    • SCAN file/directory – сканировать файл или каталог (рекурсивно) со включенной поддержкой архивов (требуется указание полного пути);
    • RAWSCAN file/directory - сканировать файл или каталог (рекурсивно) с выключенной поддержкой архивов и специальных файлов (требуется указание полного пути);
    • CONTSCAN file/directory - сканировать файл или каталог (рекурсивно) и не останавливаться при обнаружении вируса;
    • MULTISCAN file/directory – сканировать файл или каталог (рекурсивно) с использованием нескольких потоков, что ускоряет процесс сканирования на многопроцессорных машинах;
    • INSTREAM – данная команда должна предваряться префиксом n или z. Сканировать поток данных. Поток направляется процессу clamd блоками на тот же сокет, откуда была выдана команда. Это позволяет избежать лишних затрат на установление нового TCP-соединения и проблем с NAT. Формат блока следующий: <length><data>, где <length> - лина блока данных, выраженная в виде 4-байтового беззнакового целого числа в формате следования младшего байта первым, а <data> - это сами данные. Выполнение команды завершается передачей блока нулевой длины. Не следует превышать максимальной длины строки StreamMaxLength, которая определна в clamd.conf, в противном случает clamd отправит сообщение об ошибке и закроет соединение;
    • FILDES – данную команду следует завершать символом новой строки, либо издавать ее с префиксом n или z. Эта команда работает только на доменных сокетах Unix. Сканируется дескриптор файла. После этой команды процессу должен быть отправлен пакет в формате rfc2292/bsd4.4 с дескриптором файла;
    • STATS– данную команду следует издавать ее с префиксом n или z, при этом рекомендуется только префикс z. По этой команде процесс clamd выводит статистику по очереди сканирования и использовани памяти;
    • IDSESSION, END – данная команда должна обязательно предваряться префиксом n или z, а также все команды внутри IDSESSION должны идти с префиксом. Данная команда открывает/завершает сеанс работы с clamd. Внутри сеанса может быть выдано несколько команд SCAN, INSTREAM, FILDES, VERSION, STATS без необходимости открытия нового соединения. Ответы от clamd будут в формате <id>: <response>, где <id> - номер запроса (в кодировке ASCII, начиная с 1), а <response> обычный ответ процесса clamd. Строки ответа будут иметь тот же сифол-ограничитель, что и соответствующая команда. Clamd обрабатывает команды асинхронно и отвечает сразу же после завершения обработки. Требуется, чтобы клиент считывал все ответы, прежде чем направлять новые команды, чтобы избежать блокировки.​
    Рекомендуется предварять команды clamd буквой z (например, zSCAN) для указания на то, что команда завершится нулевым символом, и что clamd должен продолжать считывать команду до появления символа NULL. Нулевой ограничитель обеспечивает обработку всего аргумента как единой команды. Команды могут также предваряться символом n (например, nSCAN), чтобы использовать в качестве ограничителя символа новой строки. В свою очередь, clamd в ответах будет применять символ-ограничитель, использованный в команде.
    clamd может обрабатывать следующие сигналы:
    • SIGTERM – коректно выйти из программы;
    • SIGHUP – переоткрыть файл журнала;
    • SIGUSR2 – перезагрузить базу данных.​
    Не следует запускать clamd в фоновом режиме с использованием оператора командной строки & или другого внешнего инструмента. Вместо этого, следует запустить clamd и дождаться, пока он загрузит базу данных и сам перейдет в фоновый режим. После этого clamd будет готов принимать соединения и выполнять команды.
    Простейшим клиентом для процесса clamd является утилита clamdscan. Во многих случаях ее можно использовать так же, как и clamscan, следует только помнить, что
    • она зависит от работы clamd;
    • несмотря на то, что она воспринимате те же парамтеры командной строки, что и clamscan, большая часть из них игнорируется, поскольку их необходимо включать непосредственно в clamd, т.е. в файле clamd.conf.​
    Также с процессом clamd можно работать при помощи команды telnet, например:
    $ telnet clamd.example.com 3310
    Trying 10.10.0.57...
    Connected to clamd.example.com.
    Escape character is '^]'.​
    После этого можно вводить команды, поддерживаемые процессом.

    Вот вкратце то,что я хотел до Вас донести. Это выдержка из методички, которую я пишу для своего универа (понятно,что где-то я копипастил, но без этого никуда :)). Спасибо за внимание!Если "главенствующим на форуме органам" она понравится, буду рад вынести ее в раздел "Статьи".
    p.s. Тяжелое становится привычным, привычное - легким, а легкое - прекрасным! (с)
     
    1 person likes this.
  2. taha

    taha Elder - Старейшина

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    330
    Reputations:
    251
    А есть у кого-нибудь рецепты создания локального сервера обновлений баз для clamav (не восьмилетней давности ) ?
     
  3. YaBtr

    YaBtr Members of Antichat

    Joined:
    30 May 2012
    Messages:
    601
    Likes Received:
    350
    Reputations:
    652
    taha, чем freshclam не устраивает? :)
     
  4. taha

    taha Elder - Старейшина

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    330
    Reputations:
    251
    эммм.. ты не понял.. я не даю всем компам и темболее серверам инет
    Зачем допустим файловой помойке подключение к инету? Да незачем.. и тп.. допустим обновление систем я произвожу через apt-cacher-ng! хотелось бы что похожее на него, чтоб можно было обновлять базы с локального сервера


    add:
    https://github.com/vrtadmin/clamav-faq/blob/master/mirrors/CvdPrivateMirror.md
     
    #4 taha, 6 Jun 2013
    Last edited: 6 Jun 2013
  5. YaBtr

    YaBtr Members of Antichat

    Joined:
    30 May 2012
    Messages:
    601
    Likes Received:
    350
    Reputations:
    652
    Все понял,спасибо за важное дополнение!
    p.s. можно будет включить его в пост :)