Еще раз о ClamAV: особенности установки во FreeBSD::Журнал СА 8.2004
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
О журнале
Журнал «БИТ»
Подписка
Где купить
Авторам
Рекламодателям
Магазин
Архив номеров
Вакансии
Контакты
   

ЭКСПЕРТНАЯ СЕССИЯ 2019


  Опросы

Какие курсы вы бы выбрали для себя?  

Очные
Онлайновые
Платные
Бесплатные
Я и так все знаю

 Читать далее...

1001 и 1 книга  
28.05.2019г.
Просмотров: 1420
Комментарии: 2
Анализ вредоносных программ

 Читать далее...

28.05.2019г.
Просмотров: 1542
Комментарии: 1
Микросервисы и контейнеры Docker

 Читать далее...

28.05.2019г.
Просмотров: 1169
Комментарии: 0
Django 2 в примерах

 Читать далее...

28.05.2019г.
Просмотров: 911
Комментарии: 0
Введение в анализ алгоритмов

 Читать далее...

27.03.2019г.
Просмотров: 1477
Комментарии: 1
Arduino Uno и Raspberry Pi 3: от схемотехники к интернету вещей

 Читать далее...

Друзья сайта  

Форум системных администраторов  

sysadmins.ru

 Еще раз о ClamAV: особенности установки во FreeBSD

Архив номеров / 2004 / Выпуск №8 (21) / Еще раз о ClamAV: особенности установки во FreeBSD

Рубрика: Безопасность /  Механизмы защиты

СЕРГЕЙ СУПРУНОВ

Еще раз о ClamAV:
особенности установки во FreeBSD

Статья Сергея Яремчука «Свободный антивирус», опубликованная в мартовском номере журнала «Системный администратор» 2004 года, вдохновила меня на установку этого пакета на вверенном мне сервере. Однако выяснилось, что под FreeBSD этот процесс происходит несколько иначе, чем под Linux, что и стало поводом для написания данной статьи. Впрочем, ничего сложного нет, поэтому материал ориентирован скорее на новичков.

Антивирус ClamAV имеется в коллекции портов FreeBSD, а потому вполне разумным мне показалось выполнить установку именно оттуда. Ряд проблем, с которыми пришлось столкнуться, показал, что ClamAV портирован на эту ОС не совсем корректно. Но обо всем по порядку…

Первым делом я отправился в /usr/ports/security/clamav. Чтение Makefile позволило узнать, что предлагаемая версия – 0.73, что выглядит довольно хорошо (последняя на тот момент была 0.74, но, как известно, «последнее» – не значит «лучшее»). Там же узнаем опции, с которыми пакет будет сконфигурирован:

CONFIGURE_ARGS= --with-dbdir=${DATADIR} --disable-clamuko --disable-clamav --enable-bigstack --disable-dependency-tracking

Опцию --disable-clamav, отменяющую работу от имени пользователя clamav, я решил убрать – зачем пренебрегать дополнительной безопасностью? Ну и поскольку системные администраторы – люди исключительно бескорыстные, и все их заботы и труды – о пользователях и ради пользователей, то была добавлена поддержка milter для последующей интеграции нашего антивируса с sendmail:

CONFIGURE_ARGS+= --enable-milter

Попутно я обратил внимание на следующую строчку:

OPTIONS= MILTER "Compile the milter interface" off

Попытка собрать систему вышеприведенной опцией и без нее не обнаружила никаких различий. Более того, в bsd.ports.mk упоминания параметра OPTIONS не нашлось. Возможно, во FreeBSD он не используется.

Полагая, что подготовительные работы закончены и все остальное инсталлятор сделает сам, была подана команда make. И тут случилась первая аномалия: утилита, как и положено, попыталась скачать дистрибутив пакета, но только с одного сайта – с ftp.freebsd.org, и заявила об отсутствии там нужного ей файла clamav-0.73.tar.gz. Раньше я такого не видел – на сервере операционной системы всегда в папке distfiles обнаруживался любой нужный портам архив. Пришлось забирать требуемый файл с сайта проекта clamav.sourceforge.net.

Сборка пошла, но через несколько минут появилось сообщение, что программа не будет нормально работать, пока в системе не появится пользователь clamav. Пришлось выполнить этот ультиматум вручную, хотя обычно порт создает нужных ему пользователей самостоятельно.

Сборка завершилась успешно, инсталляция тоже особых проблем не породила, не считая того, что с первого раза вывалилась ошибка, а повторный make install, запущенный для детального изучения проблемы, завершился без проблем. Видимо, с первой попытки не удалось закачать какой-то вспомогательный пакет. На стадии инсталляции тоже частенько докачиваются и устанавливаются вспомогательные пакеты, которые для сборки не нужны, но используются в дальнейшей работе. В частности, для clamav именно на этом этапе происходит установка портов unarj, unrar и т. д., если их нет в системе, а проверка архивов включена.

На первый взгляд все выглядело весьма респектабельно: конфигурационные файлы clamav.conf и freshclam.conf чинно лежали в /usr/local/etc. В первом я включил закомментированные по умолчанию опции LogTime, выводящую в лог время события (лог при этом растет вдвое быстрее, зато понятно, что и когда происходит), и ScanRAR, разрешающую проверку rar-архивов (проверка остальных по умолчанию включена). Директория /usr/local/etc/rc.d обзавелась еще двумя сценариями, призванными автоматически запускать при перезагрузке компьютера демон clamd и утилиту обновления баз freshclam.

Запуск clamscan продемонстрировал его работоспособность и вселил надежды на светлое будущее:

$ clamscan

/usr/home/serg/.login: OK
.....
/usr/home/serg/clatest: OK

----------- SCAN SUMMARY -----------
Known viruses: 22313
Scanned directories: 1
Scanned files: 15
Infected files: 0
Data scanned: 0.02 MB
I/O buffer size: 131072 bytes
Time: 10.802 sec (0 m 10 s)

Однако сильно смущало время обработки – свыше 10 секунд для 20 Кб проверенных файлов (конфигурация сервера – Celeron-466/64 Мб, load average ~ 0.1). Может, дело в каких-то «подготовительных работах» вроде подгрузки базы данных, и на больших объемах дело пойдет лучше? Действительно, проверка на папке /usr/ports/distfiles показала некоторое увеличение скорости:

$ cd /usr/ports/distfiles

$ clamscan

mc-4.6.0.tar.gz: OK
.....
clamav-0.74.tar.gz: ClamAV-Test-Signature FOUND
clamav-0.73.tar.gz: ClamAV-Test-Signature FOUND
.....
zoo-2.10pl1.tar.gz: OK
arc-5.21j.tar.gz: OK

----------- SCAN SUMMARY -----------
Known viruses: 22313
Scanned directories: 1
Scanned files: 71
Infected files: 2
Data scanned: 303.71 MB
I/O buffer size: 131072 bytes
Time: 550.036 sec (9 m 10 s)

Почти 2 секунды на каждый мегабайт. Ну да ладно. Нагрузка на мой сервер пока минимальна, будем надеяться, что медлительность с лихвой окупится дотошностью. По крайней мере тестовые сигнатуры в собственных пакетах антивирусу обнаружить удалось. Следующая неприятность ждала меня при попытке запустить демон традиционным для FreeBSD способом:

/usr/local/etc/rc.d/clamav-clamd.sh start

Оказалось, что стартовые сценарии разработаны в стиле Linux и для запуска из /usr/local/etc/rc.d не годятся. Переносить их в /etc/rc.d с добавлением соответствующих опций (приведенных в начале стартовых скриптов) в файл /etc/rc.conf я посчитал неправильным. Как бы то ни было, но место всех программ, устанавливаемых пользователем, – в /usr/local.

Ну что ж, раз не хочешь по-хорошему, сделаем все по-своему. Созданные при инсталляции стартовые сценарии были безжалостно уничтожены, а их место занял следующий:

#!/bin/sh

# Manager for ClamAV: clamd & clamav-milter

case $1 in

    start)

           if [ -e /var/run/clamav/clamd.pid ]; then

                 echo "Ingored - clamd already started."

                 exit 0

      fi

           if [ -e /var/run/clamav/clmilter.sock ]; then

                 rm /var/run/clamav/clmilter.sock

           fi

           /usr/local/sbin/clamd

           /usr/local/sbin/clamav-milter -blo/var/run/clamav/clmilter.sock

           echo "clamd & clamav-milter started"

           ;;

    stop)

           killall clamav-milter

           kill -15 `cat /var/run/clamav/clamd.pid`

           echo "clamd & clav-milter stopped"

           ;;

    restart)

           kill -1 `cat /var/run/clamav/clamd.pid`

           echo "clamd restarted"

           ;;

    fresh)

           /usr/local/bin/freshclam

           ;;

    *)

           echo "Usage: `basename $0` {start|stop|restart|fresh}" >&2

           ;;

esac

exit 0

Удалять clmilter.sock я решил вручную, поскольку натолкнулся на то, что иногда он удаляется с некоторой паузой (или не удаляется вообще) в результате уничтожения демона clamav-milter, и при повторном запуске milter возникает ошибка. (Кстати, следует убедиться, что имена и пути сокетов соответствуют друг другу в строке запуска clamav-milter и в sendmail.mc.) С сокетом clamd.sock таких манипуляций не понадобилось, поскольку демон успешно убивает старый сокет сам, лишь сообщив в лог-файл об этом. Как видно из файла, помимо демона clamd запускается и clamav-milter. А вот в вопросе обновления баз я решил на демонизацию freshclam не полагаться (хотя такая возможность предусмотрена) – зачем запускать еще один демон, когда с этим отлично справится cron:

0   0,12   *      *      *      /usr/local/bin/freshclam

Настройка sendmail была выполнена в полном соответствии с документацией и проблем не вызвала (см. статью Сергея Яремчука). Нужно только не забыть перезапустить сервер (make restart в /etc/mail).

Итак, затратив немного усилий, удалось заставить clamav работать так, как это принято во FreeBSD. Конечно, если бы порт был разработан более корректно, то и эти усилия не понадобились бы.

В первые часы работы было «зарезано» около 50 зараженных писем (напомню, что лечить файлы ClamAV пока не умеет), извещения о данном прискорбном факте были добросовестно разосланы отправителям, получателям и администратору. Огорчало одно – язык сообщений был английским, а зная своих пользователей, нетрудно было спрогнозировать раскаленный телефон службы технической поддержки.

Но и эта проблема оказалась более чем решаемой: все сообщения, отсылаемые пользователям, были сосредоточены в исходном файле clamav-milter.c и насчитывали не более пяти строк. Таким образом, «русификация» свелась к простому вбиванию новых слов взамен старых. Ну и в заголовок отсылаемого письма была добавлена (в том же clamav-milter.c) строчка «Content-Type: text/plain; charset= ”koi8-r”», поскольку без нее мой Outlook упорно пытался подсунуть мне письма под видом win-1251. После правки исходника – повторная сборка и установка. Результат представлен на рисунке.

Рисунок 1

В заключение следует заметить, что проблемы, описанные в статье, вполне вероятны при попытке запустить на FreeBSD и иные приложения, первоначально разработанные для другой ОС. Методы решения большинства из них будут аналогичными. Главное – хорошо представлять себе, что должно получиться в итоге.


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru