Ключевые слова:web, squid, proxy, filter, virus, clamav, icap, (найти похожие документы)
From: umask aka Илья <umask at yandex dot ru>
Date: Thu, 29 Sep 2005 00:55:41 +0600 (YEKST)
Subject: Проверка web-трафика Squid на вирусы при помощи ClamAV и c-icapПредыстория.
В предыдущей статье я описал настройку совместной работы ClamAV и Samba
для прозрачной проверки загружаемых файлов.
Но Samba - не единственный источник потенциальной вирусной угрозы,
обычный web-сёрфинг представляет собой намного бОльшую угрозу, поскольку
является внешним источником опасности. Samba же - внутренний источник. В
антивирусной защите следует прежде всего контролировать (проверять) всю
поступающую извне информацию, один из источников - интернет.
Актуальность защиты Samba-ресурсов (те, кто знаком с Win32.Parite.2 меня
прекрасно поймут) так же достаточно высока.
В этой статье я обратил внимание на проверку web-трафика, проходящего
через Squid (www.squid-cache.org) на вирусы, используя ClamAV
(http://www.clamav.net) и c-icap (http://c-icap.sourceforge.net).
С протоколом ICAP можно более подробно ознакомиться на сайте
http://www.i-cap.org. Это наиболее верный способ антивирусной проверки
web-трафика. Редиректоры в Squid так же можно использовать, но при
больших нагрузках редиректоры сильно ограничены и не позволяют
распределить нагрузку. Так же редиректоры крайне ограничены и по
возможности обратного взаимодействия с пользователем.
Я принимал участие в бета-тестировании icap-демона от DrWeb, остался им
доволен (несмотря не некоторые проблемы, не решённые на этот момент), но
финансовая сторона вопроса меня сильно ограничивает, поэтому, в
очередной раз, мой выбор пал на ClamAV.
Получение необходимых файлов.
Для дальнейших действий понадобятся:
- Исходные коды Squid Proxy Server с поддержкой ICAP. Одну из
возможных вариаций можно получить со страницы c-icap -
http://sourceforge.net/projects/c-icap , последней на этот момент из
этого источника оказалась версия 2.5.STABLE11-20050927 (я
использовал версию именно от разработчиков c-icap!).
Так же можно получить Squid с поддержкой ICAP от DrWeb -
http://download.drweb.com/unix/Linux+(generic)/ .
Первый источник отличен от второго тем, что в первом не исправлена
проблема с обрывом закачки, при обрыве закачки клиентом (т.е.
прокси-сервер по любому скачивает файл до конца, что ведёт к расходу трафика).
- c-icap - демон ICAP - http://sourceforge.net/projects/c-icap ,
последняя версия на данный момент c-icap-220505.
- последняя версия ClamAV, которую нам предоставляют разработчики
этого GNU/GPL антивируса - http://www.clamav.net.Установка и настройка ClamAV.
О процессе установки и настройки ClamAV можно более подробно узнать из
предыдущей статьи - "Использование ClamAV для проверки ресурсов Samba
3.0.x через VFS в Linux (на примере Slackware Linux 10.1)", её можно
получить тут - http://www.opennet.me/base/net/samba_clamav.txt.html или
тут - http://www.nixp.ru/articles/clamav_samba_vfs_linux
Для работы не понадобиться работающий демон clamd, так что можете смело
пропустить его конфигурирование (clamd.conf), если он не используется
или не будет использоваться.
c-icap использует свой антивирусный модуль, основанный на ClamAV,
поэтому нам понадобиться наличие в системе libclamav (достаточно наличия
установленного обычным способом ClamAV).
В случае отсутствия в системе libclamav c-icap просто не соберёться.
Установка и настройки c-icap с поддержкой ClamAV.
Распакуем архив c_icap-220505.tar.gz в /usr/src (или туда, где у вас
лежат исходные коды).
configure в каталоге с исходниками c-icap следует запускать со
следующими параметрами:
$ ./configure --enable-static --with-clamav --prefix=/usr/local/c_icap
Или так, например, если --prefix=/opt/clamav для configure от ClamAV:
$ ./configure --enable-static --with-clamav=/opt/clamav --prefix=/usr/local/c_icap
Демон c_icap собирается статически.
--prefix так же можно указать по вкусу.
Можно собирать и сам демон:
$ make
Необходимо проверить, всё ли верно собралось:
$ make check
И непосредственно установить c-icap в систему (в тот каталог, который
был указан через --prefix):
# make install
Теперь необходимо исправить некоторые настройки в c-icap.conf. В случае
нашего --prefix=/usr/local/c_icap не трудно догадаться, что конфиги
лежат в /usr/local/c_icap/etc.
Рекомендую обратить внимание на следующие параметры:
- User лучше поставить nobody, поскольку wwwrun, указанный по
умолчанию, скорее всего отсутствует в системе.
- TmpDir /tmp - ваш каталог временных файлов.
- Далее необходимо настроить ACL - Access Control Lists - список
IP-адресов, которые могут использовать данный ICAP-демон:
acl localsquid_respmod src 127.0.0.1 type respmod
acl localsquid src 127.0.0.1
acl externalnet src 0.0.0.0/0.0.0.0
icap_access allow localsquid_respmod
icap_access allow localsquid
icap_access deny externalnet
Так возможно определить откуда доступ к нашему сервису icap
разрешён, а откуда нет. Заметьте, что в данных ACL определяется не
список непосредственных клиентов прокси-сервера, а именно список
клиентов демона ICAP, т.е. список прокси-серверов (их IP-адреса).
Я составил ACL для случая работы демона ICAP и Squid на одном хосте.
- srv_clamav.ClamAvTmpDir /tmp - временный каталог для модуля ClamAV
- srv_clamav.VirSaveDir /var/infected/ - каталог карантина. Другие
аналогичные лучше закомментировать!
- srv_clamav.VirHTTPServer "DUMMY".
--------------------------
Можно попробовать и так:
srv_clamav.VirHTTPServer "http://proxy.your_srv_name.ru/cgi-bin/get_file.pl?usename=%f&remove=1&file="
- URL скрипта на локальном веб-сервере, ссылка на который будет сообщена
пользователю в уведомлении о попытке доступа к инфицированному объекту.
Необходимо некоторое пояснение: опция srv_clamav.VirSaveDir может быть
задана несколько раз, таким образом, что инфицированные файлы будут
сохраняться в множестве мест.
Если задать одним из карантинных каталогов корень веб-сервера, то можно
дать пользователям возможность осознанно скачать инфицированный файл.
Остаётся только воспользоваться файлом contrib/get_file.pl в исходных
кодах c-icap.
У меня необходимости в этом не было.
--------------------------
Создайте каталог /var/infected и сделайте его владельцем пользователя
nobody (chown nobody /var/infected).
Осуществим пробный запуск c-icap:
# cd /usr/local/c_icap/bin
# ./c-icap
Если сообщений об ошибках нет, то стоит так же убедиться, что c-icap
прослушивает нужный сокет:
# netstat -apn | grep 1344
Если видим нечто похожее на следующую строку, значит всё в порядке:
tcp 0 0 *:1344 *:* LISTEN 24302/c-icap
Оставим демона c-icap работать и перейдём к дальнейшим настройкам.
Установка и настройка прокси-сервера Squid.
Распакуем в /usr/src полученный ранее Squid:
# tar zxvf squid-icap-2.5.STABLE11-20050927.tgz
Перейдём в каталог с исходниками Squid'а и запустим configure так:
$ ./configure --enable-icap-support
--------------------------
До запуска configure в Squid от DrWeb необходимо запустить bootstrap.sh,
находящийся в корневом каталоге исходных кодов Squid.
Если вы используете Squid от DrWeb, то обязательно прочитайте
документацию из пакета drweb-icapd!
--------------------------
Собираем Squid:
$ make
Устанавливаем:
# make install
Имеем установленный Squid в /usr/local/squid.
Теперь изменим настройки в squid.conf.
Необходимо найти пару строк:
#acl our_networks src 192.168.1.0/24 192.168.2.0/24
#http_access allow our_networks
Раскомментировать их и установить собственное значение, вместо
'192.168.1.0/24 192.168.2.0/24' (в моём случае пользователи
прокси-сервера находились в сети 172.16.194.0/24):
acl our_networks src 172.16.194.0/24
http_access allow our_networks
Перейдите в /usr/local/squid/var, создайте каталог cache.
Теперь там же выполните команду:
# chown nobody cache/ logs/
Сменить владельца необходимо по той причине, что демон прокси-сервера
будет запущен от пользователя nobody и не сможет писать логи и
использовать кэшь.
Осталось создать структуру каталогов для кэширования. Перейдите в
/usr/local/squid/sbin и выполните:
# ./squid -z
--------------------------
По умолчанию параметр cache_dir в squid.conf задан так:
cache_dir ufs /usr/local/squid/var/cache 100 16 256
Вы можете изменить путь к кешу (например, если он расположен у вас на
другом разделе или жёстком диске), и тогда необходимо проверить права на
указанный вами каталог.
--------------------------
На данном этапе мы имеем рабочий Squid, но без поддержки ICAP, т.е.
обычной кэширующий прокси-сервер.
Более подробно о настройке Squid можно узнать на http://squid.opennet.ru/
Добавим поддержку ICAP.
Добавление поддержки ICAP в squid.conf
Найдите по слову icap_enable и выставите значение icap_enable on.
Найдите по слову icap_preview_enable и выставите значение icap_preview_enable on
Найдите по слову icap_preview_size и выставите значение icap_preview_size 128
Найдите по слову icap_send_client_ip и выставите значение icap_send_client_ip on
Найдите по слову icap_service и добавьте пару таких icap-сервисов:
icap_service service_avi_req reqmod_precache 0 icap://localhost:1344/srv_clamav
icap_service service_avi respmod_precache 1 icap://localhost:1344/srv_clamav
Найдите по слову icap_class и добавьте такой icap-класс:
icap_class class_antivirus service_avi service_avi_req
Найдите по слову icap_access и добавьте следующие права доступа:
icap_access class_antivirus allow all
Суммарно для поддержки ICAP в squid.conf должны быть добавлены следующие строки:
icap_enable on
icap_preview_enable on
icap_preview_size 128
icap_send_client_ip on
icap_service service_avi_req reqmod_precache 0 icap://localhost:1344/srv_clamav
icap_service service_avi respmod_precache 1 icap://localhost:1344/srv_clamav
icap_class class_antivirus service_avi service_avi_req
icap_access class_antivirus allow all
На этом минимальное конфигурирование прокси-сервера закончено.
Запустим его:
# cd /usr/local/squid/sbin
# ./squid
Если всё верно, то сообщений в консоли быть не должно.
Проверка работоспособности.
Добавьте прокси-сервер в вашем браузере (если проксирование не
прозрачное) и откройте страницу http://www.eicar.com/anti_virus_test_file.htm
Попытайтесь скачать файл eicar.com, если вы видите подобное сообщение:
"A VIRUS FOUND ..."
значит всё верно работает.
Обратите внимание, что кэшь прокси-сервера не должен содержать
инфицированных объектов! Поэтому, перед началом использования Squid
совместно с c-icap кэшь лучше очистить.
Так же учтите, что браузер имеет свой кэшь.
Обновление антивирусных баз ClamAV.
Добавьте freshclam в crontab, как это сделать описывалось в предыдущей статье.
Реинициализация баз c-icap производиться каждые srv_clamav.VirUpdateTime
минут, этот параметр можно указать в c-icap.conf (по умолчанию - 15 минут).
Файл c-icap.magic и типы проверяемых объектов.
Данный файл может быть найден в том же каталоге, что и c-icap.conf, он
представляет собой описание форматов различных групп-типов файлов (TEXT,
DATA, EXECUTABLE, ARCHIVE, GRAPHICS, STREAM, DOCUMENT - определённые
группы в c-icap.magic по умолчанию).
Антивирусная проверка строиться по типам файлов, проходящих через
проски-сервер, некоторые типы, например, можно исключить или добавить
свои типы.
Формат записи строки, для определения файла по его magic-числу (последовательности):
offset:Magic:Type:Group:Desc
Offset - смещение, с которого начинаеться Magic-последовательность.
Type и Group - тип и группа, к которой следует относить файл с данной
magic-последовательностью.
Desc - кратное описание, технической нагрузки не несёт.
Для примера загляните в c-icap.magic.
Обратите так же внимание, что в c-icap.conf параметр
srv_clamav.ScanFileTypes определяет группы и типы файлов (можно
прописывать и группы, и типы), которые следует проверять.
Что определяет srv_clamav.VirScanFileTypes я окончательно не понял, но
подозреваю, что принудительно проверяемые группы файлов (EXECUTABLE и
ARCHIVE по умолчанию).
В моём конфиге c-icap вышеописанные параметры выглядят так:
srv_clamav.ScanFileTypes TEXT DATA EXECUTABLE ARCHIVE GRAPHICS STREAM DOCUMENT
srv_clamav.VirScanFileTypes EXECUTABLE ARCHIVE
Возможные проблемы.
> Squid выдаёт сообщение "ICAP protocol error", страницы не открываются.
Проверьте верно ли вы указали ACL в c-icap.conf, в данном ACL должен
быть разрешён доступ не для пользователей, а для прокси-сервера.
Попробуйте завершить процессы Squid и c-icap, а затем запустить их в
следующем порядке - сначала c-icap, а затем Squid.
Так же такая ошибка может возникать, если демону с-icap не хватает
прав на запись в карантинный каталог или в лог-файлы.
Если проблема так и не решилась, то попробуйте запустить Squid с параметрами -d 10 -N -X:
# ./squid -d 10 -N -X
а c-icap c параметрами -N -d 10 -D:
# ./c-icap -N -d 10 -D
Увидите подробную информацию, по которой можно разобраться что где не так.
> Squid выдаёт сообщение "ICAP protocol error" только на некоторых страницах (на одних и тех же).
Всё-таки проверьте есть ли у c-icap права на запись в карантинный
каталог (а ещё лучше сделать владельцем всех карантинных каталогов
пользователя под которым запущен c-icap).
Попробуйте запустить c-icap и Squid в режиме отладки (как - сказано выше).
Так же неплохо посмотреть логи c-icap.
Попробуйте снова загрузить объект, на котором возникает ошибка. Возможно
вы узнаете намного больше о проблеме и сможете её решить.
Итоги.
Теперь и web-сёрфинг защищён от вирусов и прочих вредоносных кодов (в
том числе и некоторые эксплоиты для ms ie), теперь можно путешествовать
по интернет намного безопаснее.
Как корпоративное решение для сервера с большой нагрузкой этот метод не
опробован, но, думаю, может быть реализован (хотя бы потому, что
нагрузку можно распределить на несколько ICAP-серверов).
Как решение для небольшой организации - вполне актуально.
И помните, что разработчики пишут на своём сайте:
The Antivirus ClamAV service
This service is under development.
О некоторых принципах работы протокола ICAP на русском можно узнать из
руководства DrWeb-ICAPd - одна из успешных коммерческих реализаций
протокола ICAP.
Так же можно прочесть RFC 3507.
Комфортной и безопасной работы!
Спасибо за внимание.
umask a/k/a Илья(с), MATI-RSTU, app-math dept.
mail to: umask at yandex dot ru.
Wed Sep 28 17:38:31 MSD 2005.
<Что определяет srv_clamav.VirScanFileTypes я окончательно не понял, но
подозреваю, что принудительно проверяемые группы файлов (EXECUTABLE и
ARCHIVE по умолчанию).>
Насколько я понял, эти файлы принудительно отправляются в карантин. Покрайней мере пока я не закомментировл эту строку ни один архив нельзя было скачать с инета.
У самого подобная проблема.
Только кроме того он еще забивает ЛОГ после чего СКВИД говорит об ошибке ICAP протокола.
При этом один из демонов забирает под себя весь проц.
Подскажите решение кто сталкивался с чем-то подобным.
Связка Сквид +HAVP работает отлично.
Стабильно, мало жрет ресурсов.
При этом - намного больше возможностей.
Правда, для полного счастья (+ftp +..) нужны 2 Сквида + HAVP.
> Связка Сквид +HAVP работает отлично.
>Стабильно, мало жрет ресурсов.
>При этом - намного больше возможностей.
>Правда, для полного счастья (+ftp +..) нужны 2 Сквида + HAVP.
А с этого места поподробнее :)
Сколько пользователей? Большой траффик? Какой сервер?
Вируса как отлавливает?
У меня такая же беда с загрузкой проца. И что характерно, только ОДИН процесс c-icap отжирает 99.9% у проца.....
почти весь инет перерыл...нету ответа.
>Они должны быть настроены в syslog, а не в файл - выяснено
>опытным путем
Если в syslog- тогда в messages куча матюков, а не в файле лога..
Я пробовал и так и так- результат один
squid-icap-2.5.STABLE12-20051102 - в целом работает стабильно, но в нём не работает delay-pools. Вообще никак, т.е. он с --enable-delay-pools собирается, но потом после прописывания их в конф никак не реагирует, скорость не режет.
Мысль номер 1: а почему "icap_enable off"? Нужно "on".
Мысль номер 2: есть подозрение, что squid собран без поддержки icap. Если так, то нужно squid пересобрать с поддержкой icap.
Поставил. Только вот не понимаю почему http://eicar.org/anti_virus_test_file.htm ловит файлы zip, а txt и com не ловит. Все как в статье. В файл c-icap.magic смотрю а там явно TEXT DATA - не прописаны. Скачал разные дистрибы c-icap - в них так же не прописаны эти типы файлов. Может их надо принудительно прописывать? А если прописывать то как? Может кто знает... Поделитесь опытом, плиз.
Пробовал c_icap и havp. В этих случаях https прозрачно проксируется только без проверки. Проверка SSL/https заявляется в MS TMG 2010 туда и можно смотреть. У меня, собственно тот же вопрос... Господа, поделитесь опытом, можно ли устроить опенсорсный https-antivirus proxy ?