Для блокировки вирусов при работе с прокси-сервером squid можно использовать
следующие схемы:
между пользователем и основным прокси-сервером Squid ставится специализированный
прокси-сервер, который пропускает результат через антивирусный сканер -
HAVP
в качестве редиректора используется программа, которая самостоятельно закачивает и проверяет
объект - viralator и squidclam
использование протокола ICAP для обмена с отдельным антивирусным сервером
(передача заголовка запроса перед получением объекта и самого объекта после закачки)
сервер ICAP может проверить URI по чёрным спискам,
а содержимое антивирусным сканером - c-icap
Во всех случаях используется антивирус clamav,
который необходимо установить предварительно.
Коммерческие антивирусы имеют в своём составе собственные ICAP серверы.
Использование промежуточного прокси-сервера HAVP.
К сожалению, браузеры пользователей должны быть настроены на обращение к этому промежуточному
прокси, что означает повторную борьбу с аутентификацией/авторизацией.
viralator использует
сложную схему: браузер обращается к squid, squid использует squidGuard,
в настройках squidGuard делается перенаправление на локальный сервер apache,
у которого в качестве cgi-скрипта использует viralator, который в свою очередь
пропускает запрос через clamscan
(описание настройки).
Помимо некоторой громозкости (мягко говоря) данная архитектура предполагает самостоятельную
загрузку объектов из Интернет в дополнение к загрузке их squid-ом.
Squidclam
Squid использует squidclam в качестве редиректора. Архитектура проще, чем в предыдущем случае,
но опять-таки этот специализированный редиректор самостоятельно загружает
объекты из Интернет в дополнение к загрузке их squid-ом (с помощью libcurl).
c-icap представляет собой
сервер протокола icap, squid выступает клиентом данного сервера.
Протокол icap позволяет направить запросы браузера к прокси на сервер icap для проверки прав доступа,
а ответы от HTTP-сервера для проверки на вирусы. Пока сервер обеспечивает
сервис проверки на вирусы с помощью clamav (libclamav),
сервис проверки URL (не описан) и тестовый сервис echo.
Сервер c-icap поддерживает модули (logger, service_handler, access_controller, auth_method,
authenticator) и сервисы (echo_module, url_check_module, antivirus_module).
Обрабатывается только HTTP трафик.
Установка c_icap (версия от 18 апреля 2007) на CentOS4.5:
предварительно необходимо установить clamav (и пакет clamav-devel)
убедиться, что /usr/local/lib находится в /etc/ld.so.conf
создать специльную группу icap и пользователя icap в ней (/var/run/c-icap)
загрузить и распаковать архив
./configure --enable-large-files
make
make install (какой-то глюк, проходит со второго раза)
/usr/local/lib/libicapapi.so.0.0.1 (и ссылки libicapapi.so.0, libicapapi.so)
тестирование режима echo - запустить icap-client на этом же компьютере
тестирование файла без вирусов
icap-client -f /bin/ls -s "srv_clamav?allow204=on&force=on&sizelimit=off&mode=simple"
должен быть получен ответ: "No modification needed (Allow 204 responce)"
тестирование файла с вирусом
icap-client -f /tmp/Virus -s "srv_clamav?allow204=on&force=on&sizelimit=off&mode=simple"
должен быть получен ответ "VIRUS FOUND"
!создание /etc/init.d/c-icap и обеспечение автоматического запуска (chkconfig, service)
Настройка c-icap.conf (каждая директива на отдельной строке,
первое поле - имя директивы, остальные поля - параметры, поля разделяются пробелами,
комментарии начинаются с символа '#'; имена директив для модулей и сервисов
начинаются с имени модуля или сервиса, за которым идёт символ '.'):
ModulesDir имя-каталога-содержащего-модули
Module тип-модуля относительное-имя-файла # загрузка модуля,
базовая часть имени файла является именем модуля
ServicesDir имя-каталога-содержащего-сервисы
Service тип-сервиса относительное-имя-файла # загрузка сервиса,
базовая часть имени файла является именем сервиса
StartServers начальное-число-процессов # будет переименован в StartChilds
MaxServers максимальное-число-процессов
MinSpareThreads число # новый процесс запускается, если число свободных нитей
становится меньше указанного числа
MaxSpareThreads число # убивается один из процессов, если число свободных нитей
становится больше указанного числа
ThreadsPerChild количество-нитей-на-процесс
MaxRequestsPerChild число # после обслуживания указанного числа запросов
процесс убивается, 0 - это бесконечность
настройка сервиса srv_clamav (antivirus_module, см. также соответствующие настройки clamav)
srv_clamav.ScanFileTypes тип-файла-или-группа ... # какие файлы передаются для проверки
srv_clamav.MaxObjectSize 5M # максимальный размер передаваемого для проверки файла
srv_clamav.SendPercentData 5 # сколько процентов от размера запроса можно начать
передавать клиенту до получения всего запроса, если его размер превышает
StartSendPercentDataAfter; для увеличения безопасности можно установить в 0
srv_clamav.StartSendPercentDataAfter 2M
srv_clamav.Allow204Responces off # для squid
srv_clamav.ClamAvTmpDir /tmp
srv_clamav.ClamAvMaxFilesInArchive 0
srv_clamav.ClamAvMaxFileSizeInArchive 100M
srv_clamav.ClamAvMaxRecLevel 5 # максимальный уровень рекурсии
srv_clamav.Vir* # закоментарить
Настройка типов файлов и групп типов по их содержимому
задаётся в c-icap.magic (идея от file, но простенько).
Группы: EXECUTABLE, ARCHIVE, GRAPHICS, STREAM, DOCUMENT, TEXT, DATA.
Ключи запуска:
-f имя-конфигурационного-файла
-N (не уходить в фоновый режим)
-D (печатать отладочную информацию на стандартый вывод)
-d уровень-отладочной-печати (10 - максимум)
Управление сервером производится через сокет, команды:
stop
reconfigure (повторное чтение файла настройки)
srv_clamav:dbreload (перезагрузка БД с сигнатурами вирусов)
В Squid 3.0 клиент будет встроенным, а в 2.6.12 необходимо накладывать
заплатку
(patch -p1 < icap-2_6.patch),
затем ещё заплатку,
затем в src/http.c сдублировать первый параметр при вызове storeCreateEntry,
затем в src/icap_reqmod.c убрать длину из вызова urlParseMethod,
там же заменить RequestMethods на RequestMethodStr,
затем запустить autoreconf (aclocal, autoconf, "touch NEWS AUTHORS", automake),
далее сборка как обычно с ключом --enable-icap-support в ./configure.
Надеюсь, что никому не пришло в голову делать это на боевой машине,
т.к. глючит немерянно. В частности, иногда "откладывает" закрытие файлов настолько,
что заканчивается запас дескрипторов файлов. Конечно, можно увеличить ulimit перед
запуском, но я предпочёл подождать выхода Squid 3.
В комплекте с Dr.Web можно было получить работоспособную
версию Squid 2.5.12, но нам надо 2.6.