использование ClamAV для проверки ресурсов Samba

предыстория

Я люблю заниматься исследованием различных антивирусов, узнавать их особенности, недостатки и достоинства.

Ранее в институте использовался DrWeb, он проверял загружаемые на сервер через Samba файлы, но однажды надоело искать ключи для бета-тестеров (да и бетатестирование на данный момент уже подходило к концу) или пробные ключи.

Решил поставить ClamAV, посмотреть как он работает.

что имеем

Имеем рабочий Slackware Linux 10.1 с работающей Samba 3.0.x, а также немного времени, интерес и желание настроить антивирусную проверку загружаемых через Samba файлов.

зачем это нужно

Если у вас нет денег на нормальный коммерческий антивирус, то приходится использовать хоть что-то для защиты, и ClamAV, на мой взгляд - лучший антивирус, распространяемый по лицензии GNU/GPL. То есть бесплатно.

установка и настройка

Для начала нам потребуется ClamAV, на момент написания статьи последней была версия 0.87. Идем на сайт ClamAV (www.clamav.net) и скачиваем последнюю версию.

Устанавливаем ее, как указано в докумнтации на вашу версию в разделе "Installation".

Кратко расскажу о процессе установки.
Разархивировав только что скачанный дистрибутив, не спешите набирать ./configure, для начала создайте группу и пользователя clamav.

# groupadd clamav
# useradd -g clamav -s /bin/false clamav

Затем, можно набрать:

$ ./configure

или

$ ./configure --help

чтобы увидеть все возможные опции. Кстати, можно тут же отключить и проверку на наличие юзера и группы clamav, но этого делать не рекомендуется! Затем наберите:

$ make

И, после успешной сборки:

# make install

Теперь нужно сконфигурировать clamd и freshclam, поскольку разработчики принудительно заставляют пользователя это сделать: конфигурационные файлы изначально нерабочие.

По умолчанию конфигурационные файлы расположены в /usr/local/etc, если вы не указывали иной путь к ним в параметрах к configure.

Редактируем freshclam.conf:
- самое главное, что необходимо сделать - закомментировать строку, содержащую одно слово - "Example".
- укажите DatabaseDirectory (например, /var/lib/clamav, как указано у меня). Запомните этот путь: в файле clamd.conf также нужно будет его указать;
- укажите UpdateLogFile, например, /var/log/freshclam.log. Перейдите в каталог /var/log, создайте файл freshclam.log и измените владельца на clamav.clamav;
- укажите в DatabaseOwner пользователя clamav.

Другие настройки можно не изменять, самое важное в этом конфигурационном файле мы уже сделали.

Редактируем clamd.conf:
- самое главное, что необходимо сделать - закомментировать строку, содержащую одно слово - "Example";
- укажите LogFile, например /var/log/clamd.log. Перейдите в каталог /var/log, создайте файл clamd.log и измените владельца на clamav.clamav; - укажите TemporaryDirectory, например, /tmp;
- укажите DatabaseDirectory - /var/lib/clamav (то, что выбрали при конфигурации freshclam);
- укажите LocalSocket - /tmp/clamd (главное, что бы пользователь clamav имел врава доступа к этому сокету на запись и чтение!);
- укажите User - clamav.

Другие настройки можно не трогать. Но лучше почитайте комментарии и измените нужные настройки под себя (например, какие объекты не следует проверять). Обратите внимание на LogFileMaxSize.
Теперь запустим freshclam:

# freshclam

Вы должны увидеть сообщения об обновлении вирусных баз

Downloading *.cvd
...
Database Updated...


Если базы не обновились, то прочитайте внимательно, что вам выдал freshclam, а так же загляните в лог-файл - /var/log/freshclam.log. Если ничего не помогает, обратитесь за помощью к документации ClamAV.
Запускаем clamd:

# clamd

Проверяем:

# tail /var/log/clamd.log

если нет сообщений об ошибке, то значит демон запустился. Так же проверьте его наличие в списке процессов.
В логах демона должно быть сообщение вида "Unix socket file /tmp/clamd" - это значит, что средство для взаимодействия с Samba в норме. Теперь нам необходимо скачать и скомпилировать OpenAntiVirus samba-vscan.

Идем на страницусайти скачиваем samba-vscan.
На момент написания статьи последняя версия samba-vscan была 0.3.6b.
Также нам понадобятся исходные коды для Samba. Чтобы не мучаться, просто скачайте исходные коды установленной версии Samba с сайта разработчиков вашего дистрибутива или найдите их на дисках дистрибутива.

Проверим версию установленной в системе версии Samba:

# smbd --version

Версия исходных кодов обязательно должна совпадать с установленной версией!

Распакуем исходники samba-3.0.10.tar.bz2 и samba-vscan-0.3.6b.tar.bz2, например в /usr/src.
Переходим в /usr/src/samba-3.0.10/source (или в /path-to-source-dir/samba-version/source), набираем:

$ ./configure
$ make proto

/* Замечание 1. Для полной уверенности, можно посмотреть параметры configure для Samba в вашем дистрибутиве:

# smbd --build-options

или

# smbd -b

Paths можно задать через соответствующие параметры для configure. Скорее всего у вас не будет необходимости это делать. */
Теперь скопируем каталог с исходниками samba-vscan в /usr/src/samba-3.0.10/examples/VFS (или в /path-to-source-dir/samba-version/examples/VFS). Таким образом, в каталоге /usr/src/samba-3.0.10/examples/VFS будет подкаталог samba-vscan-0.3.6b. Переходим в каталог /usr/src/samba- 3.0.10/examples/VFS/samba-vscan-0.3.6b и набираем

$ ./configure
$ make

Наш модуль Samba VFS для ClamAV готов. Теперь необходимо скопировать /usr/src/samba-3.0.10/examples/VFS/samba-vscan-0.3.6b/vscan-clamav.so в каталог, где расположены модули VFS для вашей версии Samba. У меня это был каталог /usr/lib/samba/vfs:

# ginstall -g root -o root -m 0755 /home/toor/samba-3.0.10/examples/VFS/samba-vscan-0.3.6b/vscan-clamav.so /usr/lib/samba/vfs/

/* Замечание 2. Я использовал ginstall что бы сразу задать права для полученного модуля, можно было просто скопировать, а затем сменить права и владельца.
Также можно было просто набрать:

# make install

Но для этого нужно было выполнить действия, указанные в Замечании 1. */
Скопируем /usr/src/samba-3.0.10/examples/VFS/samba-vscan-0.3.6b/clamav/vscan-clamav.conf в каталог, где расположены конфигурационные файлы Samba.
У меня это выглядело так:

# cp /usr/src/samba-3.0.10/examples/VFS/samba-vscan-0.3.6b/clamav/vscan-clamav.conf /etc/samba
# chown root.root /etc/samba/vscan-clamav.conf
# chmod 0644 /etc/samba/vscan-clamav.conf

Конфигурируем Samba и samba-vscan. В /etc/samba/smb.conf нужно изменить некоторые опции для каталога, который хотим проверять, например так:

-----cut---
[pub]
comment = Protected by ClamAV
path = /export/pub
vfs object = vscan-clamav
vscan-clamav: config-file = /etc/samba/vscan-clamav.conf
writeable = yes
browseable = yes
read-only = no
public = yes
guest ok = yes
-----cut---

В /etc/samba/vscan-clamav.conf можно оставить почти все как есть, но я рекомендовал бы изменить следующие параметры:

max file size =<по вкусу>
deny access on error = no
deny access on minor error = no
infected file action = delete

Действия quarantine, к сожалению, мне не удалось добиться.
Обязательно необходимо изменить параметр:

clamd socket name = /tmp/clamd

Теперь необходимо перезапустить Samba.

проверка работоспособности

Проверим работоспособность нашей антивирусной системы.
Скачиваем ссайтфайл eicar.com и пробуем записать его в каталог //server-name/pub.
Если вы производите это действие из Windows, то вы получите сообщение через систему Windows Messenger о том, что файл eicar.com инфицирован.
автоматические обновления

Осталось добавить freshclam в crontab. Например, добавим следующиую строку:

* */2 * * * /usr/local/bin/freshclam >/dev/null 2>&1

Все готово.

некоторые впечатления

Скорость записи/чтения в/из защищенной директории Samba снизилась в 5-10 раз, но это терпимо, поскольку с pub’ом не ведется активная работа. Другой же стороной столь низкой скорости является мощность файлового сервера - а это AMD K6-450 Mhz, 192 MB RAM, 2 x HDD Maxtor. Самое большое ограничение - мощность процессора и оперативная память.
Так же существенным недостатком ClamAV являеться нежелание разработчиков добавлять алгоритмы поддержки RAR3 и 7Z по лицензионным соображениям. Кстати, поддержку RAR2 можно включить в clamd.conf.
К существенным недостатком так же относится неразвитость ClamAV в проверке упакованных бинарников, по сравнению с коммерческими антивирусами он просто ничто.
Но для «хоть какой-то защиты» вполне сносно работает.
P.S. Старался написать как можно подробнее и проще, для тех, кто не сильно знаком с темой.

Спасибо за внимание.



Хасянов Ильяс aka umask, umask@yandex.ru.


Сетевые решения. Статья была опубликована в номере 10 за 2005 год в рубрике sysadmin

©1999-2024 Сетевые решения