The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]

Проверка web-трафика Squid на вирусы при помощи ClamAV и c-icap (web squid proxy filter virus clamav icap)


<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: 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.ru/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.

<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, Ещдыено (?), 00:26, 19/06/2006 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    <Что определяет srv_clamav.VirScanFileTypes я окончательно не понял, но
    подозреваю, что принудительно проверяемые группы файлов (EXECUTABLE и
    ARCHIVE по умолчанию).>

    Насколько я понял, эти файлы принудительно отправляются в карантин. Покрайней мере пока я не закомментировл эту строку ни один архив нельзя было скачать с инета.

     
  • 1.2, Adil_18 (?), 14:18, 09/08/2006 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    Illegal response from ICAP server.
    Unsupported status '500' from ICAP server

    при попытке скачать *.zip

     
  • 1.3, alexcom (ok), 18:16, 05/09/2006 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    Поставил все. Работает. Ловит eicar по крайней мере.
    Но постоянно в лог пишет следующее:
    ICAP: general, SIGPIPE signal received.
    Так и должно быть?
     
     
  • 2.4, SysR (?), 12:48, 06/09/2006 [^] [ответить]    [к модератору]
  • +/
    У самого подобная проблема.
    Только кроме того он еще забивает ЛОГ после чего СКВИД говорит об ошибке ICAP протокола.
    При этом один из демонов забирает под себя весь проц.
    Подскажите решение кто сталкивался с чем-то подобным.
     
  • 1.5, alexcom (ok), 12:58, 07/09/2006 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    <При этом один из демонов
    syslogd.
    Изза забивания лога этими ошибками и забирает весь ресурс проца
     
     
  • 2.10, evgeniy1 (ok), 17:01, 25/10/2006 [^] [ответить]    [к модератору]  
  • +/
      Связка Сквид +HAVP  работает отлично.
    Стабильно, мало жрет ресурсов.
    При этом - намного больше возможностей.
    Правда, для полного счастья (+ftp +..) нужны 2 Сквида + HAVP.
     
     
  • 3.15, alexcom (ok), 21:03, 09/11/2006 [^] [ответить]    [к модератору]  
  • +/
    >  Связка Сквид +HAVP  работает отлично.
    >Стабильно, мало жрет ресурсов.
    >При этом - намного больше возможностей.
    >Правда, для полного счастья (+ftp +..) нужны 2 Сквида + HAVP.


    А с этого места поподробнее :)
    Сколько пользователей? Большой траффик? Какой сервер?
    Вируса как отлавливает?

     
  • 1.11, riban (?), 16:02, 30/10/2006 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    У меня на Intel(R) Pentium(R) D CPU 3.20GHz и 2ГБ оперативки C-ICAP отжирает 98% проца:( Юзеров всего до 10, нагрузка не пиковая.
     
     
  • 2.12, slava (??), 14:11, 31/10/2006 [^] [ответить]    [к модератору]  
  • +/
    У меня такая же беда с загрузкой проца. И что характерно, только ОДИН процесс c-icap отжирает 99.9% у проца.....
    почти весь инет перерыл...нету ответа.
     
     
  • 3.13, riban (?), 16:53, 01/11/2006 [^] [ответить]    [к модератору]  
  • +/
    а у тебя какая версия сквида/icap?
    У меня squid-2.5.STABLE10-drweb-patch, c_icap-030606rc1
     
     
  • 4.14, slava (??), 14:48, 03/11/2006 [^] [ответить]    [к модератору]  
  • +/
    >а у тебя какая версия сквида/icap?
    >У меня squid-2.5.STABLE10-drweb-patch, c_icap-030606rc1

    squid-2.6.STABLE4 + icap-2_6.patch, c_icap-030606rc1, антивирусник clamav-0.88.5.

     
  • 2.16, Фигаро (?), 21:05, 10/11/2006 [^] [ответить]    [к модератору]  
  • +/
    Они должны быть настроены в syslog, а не в файл - выяснено опытным путем
     
     
  • 3.17, alexcom (ok), 09:42, 11/11/2006 [^] [ответить]    [к модератору]  
  • +/
    >Они должны быть настроены в syslog, а не в файл - выяснено
    >опытным путем
    Если в syslog- тогда в messages куча матюков, а не в файле лога..
    Я пробовал и так и так- результат один
     
     
  • 4.19, FOKS (?), 12:34, 09/02/2007 [^] [ответить]    [к модератору]  
  • +/
    Помогает: sys_logger.server_priority info
     
  • 3.18, riban (?), 15:02, 15/11/2006 [^] [ответить]    [к модератору]  
  • +/
    У меня тоже не прокатило. Можно конфиг в студию?
     
  • 1.20, hopeful (?), 14:39, 21/06/2007 [ответить] [показать ветку] [···]     [к модератору]  
  • +/
    В дополнение хочу поделиться опытом запуска Squid c-icap ClamAV в рабочую эксплу... весь текст скрыт [показать]
     
     
  • 2.21, Egoroff (?), 08:37, 31/07/2007 [^] [ответить]    [к модератору]  
  • +/
    squid-icap-2.5.STABLE12-20051102 - в целом работает стабильно, но в нём не работает delay-pools. Вообще никак, т.е. он с --enable-delay-pools собирается, но потом после прописывания их в конф никак не реагирует, скорость не режет.
     
     
  • 3.22, feniks2202 (?), 15:28, 05/09/2007 [^] [ответить]    [к модератору]  
  • +/
    Проблема такая;
    squid непонимает конфиг icap'a!
    Останавливается squid: 2007/09/05 15:10:34| parseConfigFile: line 35 unrecognized: 'icap_enable off'
    2007/09/05 15:10:34| parseConfigFile: line 36 unrecognized: 'icap_preview_enable off'
    2007/09/05 15:10:34| parseConfigFile: line 37 unrecognized: 'icap_preview_size -1'
    2007/09/05 15:10:34| parseConfigFile: line 38 unrecognized: 'icap_send_client_ip off'
    2007/09/05 15:10:34| parseConfigFile: line 39 unrecognized: 'icap_service service_1 reqmod_precache 0 icap://192.168.0.1:1344/reqmod'
    2007/09/05 15:10:34| parseConfigFile: line 40 unrecognized: 'icap_service service_1 reqmod_precache 0 icap://192.168.0.1:1344/reqmod no-keep-alive'
    2007/09/05 15:10:34| parseConfigFile: line 41 unrecognized: 'icap_service service_2 respmod_precache 0 icap://192.168.0.1:1344/respmod '
    2007/09/05 15:10:34| parseConfigFile: line 42 unrecognized: 'icap_class class_1 service_1 service_2'
    2007/09/05 15:10:34| parseConfigFile: line 43 unrecognized: 'icap class class_2 service_1 service_3'
    2007/09/05 15:10:34| parseConfigFile: line 44 unrecognized: 'icap_access classname allow'
    2007/09/05 15:10:34| parseConfigFile: line 45 unrecognized: 'icap_access class_1 allow all'


     
     
  • 4.23, KholAn (ok), 11:05, 08/09/2007 [^] [ответить]    [к модератору]  
  • +/
       Мысль номер 1: а почему "icap_enable off"? Нужно "on".
       Мысль номер 2: есть подозрение, что squid собран без поддержки icap. Если так, то нужно squid пересобрать с поддержкой icap.
     
  • 1.24, tp123 (?), 03:00, 07/01/2008 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    А все ли антивирусы можно так воткнуть!?
     
  • 1.25, Михаил (??), 17:39, 05/03/2010 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Поставил. Только вот не понимаю почему http://eicar.org/anti_virus_test_file.htm ловит файлы zip, а txt и com не ловит. Все как в статье. В файл c-icap.magic смотрю а там явно TEXT DATA - не прописаны. Скачал разные дистрибы c-icap - в них так же не прописаны эти типы файлов. Может их надо принудительно прописывать? А если прописывать то как? Может кто знает... Поделитесь опытом, плиз.
     
  • 1.26, AndySouth (?), 15:13, 18/05/2010 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Попробовал, все работает за исключением того что https трафик не проверяется.
    подскажите куда посмотреть.

    заранее благодарен.

     
     
  • 2.27, AndySouth (?), 15:18, 18/05/2010 [^] [ответить]    [к модератору]  
  • +/
    >Попробовал, все работает за исключением того что https трафик не проверяется.
    >подскажите куда посмотреть.
    >
    >заранее благодарен.

    Гм, так что получается что https и не должен сканироваться ?...


     
     
  • 3.28, Nick (??), 13:49, 26/05/2010 [^] [ответить]    [к модератору]  
  • +/
    Пробовал c_icap и havp. В этих случаях https прозрачно проксируется только без проверки. Проверка SSL/https заявляется в MS TMG 2010 туда и можно смотреть. У меня, собственно тот же вопрос... Господа, поделитесь опытом, можно ли устроить опенсорсный https-antivirus proxy ?
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:





      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor