|
Bog BOS: Блокировка вирусов при работе с прокси-сервером squid
|
Последнее изменение файла: 2009.10.29
Скопировано с www.bog.pp.ru: 2024.11.23
Bog BOS: Блокировка вирусов при работе с прокси-сервером squid
Предварительно требуется знакомство с основной статьёй о Squid.
Для блокировки вирусов при работе с прокси-сервером 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)
- /usr/local/lib/libicapapi.la
- /usr/local/bin/ (c-icap, icap-client, icap-stretch)
- /usr/local/etc/c-icap.conf
- /usr/local/etc/c-icap.magic
- /usr/local/include/c_icap/
- /usr/local/lib/c_icap/ (sys_logger.*, srv_echo.*, srv_url_check.*, srv_clamav.*)
- поменять права для /var/run/c-icap
- настроить c-icap (/usr/local/c-icap/etc/c-icap.conf)
- тестовый запуск:
/usr/local/bin/c-icap -N -D -d 3
- тестирование режима 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 тип-сервиса относительное-имя-файла # загрузка сервиса,
базовая часть имени файла является именем сервиса
- ServiceAlias имя-сервиса-с-точки-зрения-клиента имя-сервиса?имя-параметра=значение&...
- имена файлов, журнализация и права доступа
- PidFile имя-файла
- CommandsSocket имя-файла # управляющий сокет, поместить в /var/run/c-icap
- TmpDir /tmp
- User имя-пользователя
- Group имя-группы
- Logger sys_logger | file_logger # выводить журнал в syslog или файлы
- ServerLog /usr/local/var/log/icap-server.log # ошибки, отладка и т.п.
- AccessLog /usr/local/var/log/icap-access.log # информация о доступе клиентов
- DebugLevel уровень-отладочной-печати # от 0 до 10
- sys_logger.Prefix "C-ICAP:"
- sys_logger.Facility источник-для-syslog # daemon, user или local?
- sys_logger.server_priority info # уровень важности
- управление соединением с клиентом
- Port 1344 # номер TCP порта для приёма запросов от клиентов
- Timeout секунд # закрывать неактивное соединение через указанное время
- KeepAlive on # не закрывать соединение с клиентом после обработки запроса
- MaxKeepAliveRequests 100
- KeepAliveTimeout секунд # -1 - это бесконечность
- MaxMemObject 131072 # для объектов большего размера используются файлы в TmpDir
- управление доступом к icap-серверу (зачем это? лучше использоавт штатный сетевой экран;
аутентификация реализована только basic)
- #AclControllers default_acl
- default_acl.acl имя-списка {src адрес[/маска] | srvip адрес-сервера |
type [options | respmod | reqmod] | service имя-сервиса | user {имя | *}}
# описание списка доступа
- icap_access {deny | access | log | nolog | http_auth} имя-списка # применение списка
- управление количеством параллельных обработчиков
(по образцу MPM worker в apache 2)
- 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 (перезагрузка БД с сигнатурами вирусов)
Ключи тестового клиента icap-client:
- -i имя-сервера
- -s имя-сервиса-и-параметры
- -f имя-тестового-файла
- -v
- -d уровень-отладочной-печати
В 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.
Настройка ICAP в squid.conf:
- icap_enable on
- icap_preview_enable on
- icap_preview_size 128
- icap_check_interval 30
- icap_send_client_ip on
- #icap_service service_avi_req reqmod_precache 0 icap://localhost:1344/srv_clamav
- # reqmod_precache and respmod_postcache is not yet implemented in 2.6
- #icap_service service_avi respmod_precache 1 icap://localhost:1344/srv_clamav
- icap_service service_avi respmod_precache 0 icap://localhost:1344/srv_clamav
- #icap_class class_antivirus service_avi service_avi_req
- icap_class class_antivirus service_avi
- icap_access class_antivirus allow all
Надеюсь, что никому не пришло в голову делать это на боевой машине,
т.к. глючит немерянно. В частности, иногда "откладывает" закрытие файлов настолько,
что заканчивается запас дескрипторов файлов. Конечно, можно увеличить ulimit перед
запуском, но я предпочёл подождать выхода Squid 3.
В комплекте с Dr.Web можно было получить работоспособную
версию Squid 2.5.12, но нам надо 2.6.
|
Bog BOS: Блокировка вирусов при работе с прокси-сервером squid
|
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru