The OpenNET Project / Index page

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

Устанавливаем во FreeBSD связку Squid + squidGuard + с-icap (squid proxy icap filter virus freebsd clamav)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: squid, proxy, icap, filter, virus, freebsd, clamav,  (найти похожие документы)
From: Олег Палухин Date: Mon, 18 Jun 2009 17:02:14 +0000 (UTC) Subject: Устанавливаем во FreeBSD связку Squid + squidGuard + с-icap Материал предоставлен редакцией журнала Системный администратор. Опубликовано в журнале "Системный администратор" N 3 2009 Работа современного офиса сегодня немыслима без Интернета. Как ограничить доступ к нежелательным ресурсам в Сети, отнимающим у сотрудников рабочее время? В этом поможет совместная работа прокси-сервера Squid с редиректором запросов SquidGuard и сервером ICAP. Общеизвестно стремление среднестатистического офисного работника к свободному серфингу на просторах Интернета, особенно в рабочее время, особенно когда на расстоянии пары кликов различные "Одноклассники" и "В Контакте", наконец когда появляется все больше и больше программ и сервисов, не требующих установки на компьютер, а довольствующихся лишь наличием выхода в Интернет, и программой - обозревателем интернет-страниц. Отсюда возникает насущная необходимость для руководства предприятия направлять подобного рода "веб-деятельность" своих сотрудников ближе к их прямым рабочим обязанностям. В качестве одного из решений можно использовать прокси-сервер доступа в Интернет Squid в сочетании с URL-редиректором squidGuard, а также организовать проверку http-трафика на вирусы. Для выполнения последней задачи в нашей компании применили Clam Antivirus, работающий через сервер ICAP (Internet Content Adaptation Protocol). Предлагаю вашему вниманию небольшую заметку об установке и настройке вышеупомянутых продуктов для совместной работы по обеспечению доступа пользователей к Интернету. Прежде чем приступить непосредственно к описанию установки перечислю то, что уже должно быть установлено на вашем сервере: n операционная система - мы будем производить установку на FreeBSD 7.1-SATBLE; * веб-сервер - подойдет любой от Apach до lighttpd; * брандмауэр - pf, ipf или ipfw, настроенный для прозрачного перенаправления http-запросов пользователей на порт прокси-сервера Squid, мы использовали pf. Используемое программное обеспечение и его версии: * прокси-сервер Squid - версия squid-3.0.13; * squidGuard, URL redirector - версия squidGuard-1.4; * ICAP-сервер c-icap - версия 060708. Установка Squid Прокси-сервер Squid представляет собой весьма гибкое в конфигурировании и обладающее широкими возможностями средство для организации доступа пользователей в Интернет. Я опишу здесь простую конфигурацию, вполне пригодную для использования в небольших или средних по количеству сотрудников организациях. Устанавливаем Squid из портов FreeBSD, перемещаемся в директорию порта: # cd /usr/ports/www/squid30/ В config-опциях после команды: # make config отмечаем нужные: SQUID_DELAY_POOLS; SQUID_PF; SQUID_ICAP. Теперь смело собираем и устанавливаем программу: # make && make install && make clean Затем меняем содержимое конфигурационного файла squid.conf в директории /usr/local/etc/squid/: # Привилегированный пользователь acl BosS src 172.25.1.3 # Наша локальная сеть - источник запросов к прокси-серверу acl LocalneT src 172.25.0.0/16 # ICQ, как и любой другой порт, можно разрешить или закрыть, ниже будет понятно как acl IcQ port 5190 # На каком порту принимает запросы Squid, опцию transparent здесь не указываем, так как Squid # собан с поддержкой прозрачного проксирования с помощью пакетного фильтра pf (опция SQUID_PF) http_port 8080 # Пускаем всех из локальной сети в Интернет http_access allow LocalneT # Запрещаем всем остальным http_access deny all # Здесь указываем программу-редиректор, у нас -- это squidGuard. В предыдущих версиях Squid этот параметр # назывался redirect_program url_rewrite_program /usr/local/bin/squidGuard -c /usr/local/etc/squid/squidGuard.conf # Управление скоростью доступа в Интернет посредством пулов # Количество пулов доступа delay_pools 2 # Первая цифра -- номер пула, вторая -- класс пула, мы используем пулы только первого класса, # без деления на подсети delay_class 1 1 # Отдельному пользователю 10 Кб/с delay_class 1 1 delay_parameters 1 100000/100000 delay_access 1 allow BosS delay_access 1 deny all # Всем остальным - 15 Кб/с delay_class 2 1 delay_parameters 2 150000/150000 delay_access 2 allow LocalneT delay_access 2 allow LoopbacK delay_access 2 deny all # Учетная запись, с правами которой работает Squid cache_effective_user squid cache_effective_group squid # Местонахождение log-файлов cache_log /var/log/squid_debug.log access_log /usr/local/squid/logs/access.log # Поддержка функционала icap-клиента: 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/avscan icap_service service_avi respmod_precache 1 icap://localhost:1344/avscan icap_class class_antivirus_req service_avi_req # Для каждого имени icap_service указываем отдельную строку icap_class, а не все сервисы # в одной строке, как предлагается в configuration guide на сайте проекта c-icap: # "icap_class class_antivirus service_avi service_avi_req", иначе Squid при запуске выдаст сообщение: # "WARNING: Multiple ICAP services per icap_class # are not yet supported." icap_class class_antivirus service_avi # Соответственно получаем две строки icap_access для двух классов icap_class icap_access class_antivirus_req allow all icap_access class_antivirus allow all Отмечу, что в примере конфигурационного файла не указана директория хранения кеша запросов и его максимальный размер, это говорит лишь о том, что используются значения этих параметров по умолчанию, которые можно посмотреть в файле /usr/local/etc/squid/squid.conf.default. С Squid все. Запускать его без squidGuarda пока не будем. Еще раз скажу, что здесь описан простой случай прозрачного проксирования без множества существующих в Squid полезных вещей, таких как аутентификация пользователей, параметры оптимизации кеширования и пр. Установка squidGuard SquidGuard также легко находится в портах - /usr/ports/www/squidguard/. Просто устанавливаем его как обычно: # make && make install && make clean Во время установки squidGuard поместит списки блокировки в /var/db/squidGuard и сделает их принадлежащими учетной записи squid и группе squid, - что должно совпадать с учетной записью, под которой работает прокси-сервер Squid (см. значения переменных cache_effective_user и cache_effective_group в файле /usr/local/etc/squid/squid.conf). Можно пользоваться этими блэклистами, можно другими, коммерческими или бесплатными; вся информация по получению блэклистов есть на http://squidguard.org/blacklists.html , я беру их здесь: http://cri.univ-tlse1.fr/blacklists . Получив так или иначе архив с блэклистами, распаковываем их в директорию, которая в файле конфигурации squidGuard.conf указана в значении параметра dbhome, и не забываем, что dbhome со всем содержимым должен принадлежать пользователю squid. Теперь перейдем к настройкам в /usr/local/etc/squid/squidGuard.conf, ниже пример содержания этого файла с краткими пояснениями: # Место расположения блэклистов и логов dbhome /var/db/squidGuard/blacklists logdir /var/log # Можно задавать ограничения доступа по времени и дням # сокращения для дней недели: #s = sun, m = mon, t =tue, # w = wed, h = thu, f = fri, a = sat # У нас описаны дневные часы ежедневно c 6 утра # до 10 вечера, что будет использовано ниже time WORKHOURS { weekly * 06:00 -- 22:00 date *.*.01 06:00 -- 22:00 } # От кого будут приходить запросы source LOCALNET { ip 172.25.0.0/16 } # Далее идут собственно описания ресурсов (так называемые # DESTINATION CLASSES), доступ к которым запрещен (blacklists) # или разрешен (whitelists) - указание на содержимое dbhome; # мы будем использовать только блэклисты # Название подкаталога блэклистов destination adult { # Указание на блэклист доменов, здесь указываются, # какие домены блокируются, -- т.е. если в файле # указан domen.com, то закрыт доступ к домену # полностью и к host.domen.com и к games.foo.domen.com # и т. д. Могут быть указаны также только поддомены, # например subdomen.host.com: это закрывает доступ # только к поддомену и ко всем его cобственным # поддоменам, а доступ к host.com остается открытым. # Но обратите внимание! Если в файле доменов указаны # и domen.com и subdomen.domen.com, то доступ будет # закрыт только к этим двум доменам, а, скажем, # foo.domen.com будет доступен domainlist adult/domains # Указание на блэклист URL, т.е. блокируется доступ # к конкретным страницам, если указано # example.com/some/path/to/page.html, то блокируется # доступ только к # http://www.example.com/some/path/to/page.html, # http://example.com/some/path/to/page.html, # http://ftp.example.com/some/path/to/page.html urllist adult/urls } destination audio-video { domainlist audio-video/domains urllist audio-video/urls # Файл регулярных выражений в URL запроса, используется # стандартный синтаксис, который можно узнать # по man regex; здесь можно запретить, например, # всевозможные мультимедиа-файлы: # (\.mp3|\.wmv|\.flv|\.avi|\.mp4)$ expressionlist audio-video/expressions } destination blog { domainlist blog/domains urllist blog/urls # Так включается запись в лог нарушителей, пытавшихся # пройти на запрещенные ресурсы log violaters.log } ... destination agressif { domainlist agressif/domains urllist agressif/urls expressionlist agressif/expressions } destination publicite { domainlist publicite/domains urllist publicite/urls expressionlist publicite/expressions } # И, наконец, пишем кому (LOCALNET), когда (within WORKHOURS) # и куда запрещен/разрешен доступ, здесь у нас запрещен # доступ по всем вышеописанным блэклистам acl { LOCALNET within WORKHOURS { pass !adult !astrology !blog !celebrity !dangerous_material \ !dating !financial !forums !games !liste_bu !malware !manga \ !marketingware !mixed_adult !phishing !radio !in-addr !hacking \ !warez !gambling !drogue !filehosting !audio-video !agressif !redirector !publicite any } default { pass none # URL, заменяющий запрещенный к доступу -- то, # что увидит пользователь - любитель фривольных # ресурсов; это может быть сделанная вами # бан-страница и расположенная на локальном # веб-сервере, это может быть даже главная # страница вашего корпоративного ресурса # в Интернете redirect http://host/ban.html } } Далее просто перескажу несколько строк из документации на сайте проекта. Перед запуском squidGuard нужно инициализировать блэклисты, т.е. построить базу, squidGuard использует BerkeleyDB, что ускоряет работу по проверке и блокированию запросов: # squidGuard -C all В зависимости от количества используемых блэклистов время инициализации будет разным, от секунд до нескольких минут; по окончании инициализации в log-файле squidGuard должно быть нечто, подобное этому: 2009-02-27 16:42:44 [78281] squidGuard 1.4 started (1235741910.112) 2009-02-27 16:42:44 [78281] db update done 2009-02-27 16:42:44 [78281] squidGuard stopped (1235742164.788) После инициализации блэклистов директория, их содержащая, будет принадлежать учетной записи root, поэтому меняем "хозяина": # chown -R squid:squid /path/to/blacklists Либо можно изначально провести инициализацию блэклистов от имени учетной записи squid, если текущая учетная запись имеет на это право (см. man sudoers): # sudo -u squid $(which squidGuard) -C all И можем сначала проверить, что squidGuard инициализировал листы успешно: # tail -n 10 /var/log/squidGuard.log | grep "emergency mode" || echo OK Если на экране ОК - значит все в порядке. Осталось проверить, что squidGuard принимает и обрабатывает запросы: # echo "http://adult.com 172.25.1.3/ - - GET" | squidGuard -c /usr/local/etc/squid/squidGuard.conf Здесь: adult.com - запрашиваемый URL; 172.25.1.3 - с какого адреса имитируем запрос. Если все работает нормально, то на экране увидим redirect URL нашей бан-страницы, указанной в squidGuard.conf: http://host/ban.html 172.25.1.3/- - - Можем запускать Squid: # /usr/local/etc/rc.d/squid start В логах Squid напишет, что запустил 5 дочерних процессов squidGuard, эта цифра предусмотрена по умолчанию, ее можно менять в зависимости от нагрузки на сервер в squid.conf параметром url_rewrite_children <число_процессов>. Можно проверять работу Squid и squidGuard с клиентских машин запросами через интернет-браузер. Установка ClamAV и c-icap ClamAV устанавливаем из портов (/usr/ports/security/clamav) привычным способом: # make && make install && make clean Используем опции конфигурации по умолчанию, предлагаемые при установке. Настройки демона clamd в /usr/local/etc/clamd.conf тоже можно оставить без изменений после установки. C-icap придется собирать и устанавливать из исходных кодов, так как на момент написания статьи порт /usr/local/www/c-icap содержал версию программы за июнь 2006 года, и заставить ее работать со Squid 3.0 мне не удалось. Загружаем исходный код c-icap. Распаковываем в рабочую директорию и собираем с такой опцией: # ./configure --prefix=/usr/local Дальше все, как обычно: # make && make install Конфигурационный файл c-icap.conf будет находиться в /usr/local/etc/, вот его содержимое: # файл хранения pid основного процесса icap-сервера PidFile /var/run/c-icap.pid # Параметр можно не указывать, но файл сокета управления # по умолчанию должен находиться именно здесь, его нужно # создать командой "touch /var/run/c-icap/c-icap.ctl" #CommandsSocket /var/run/c-icap/c-icap.ctl # Время в секундах, после которого неактивное соединение # закрывается Timeout 300 # Icap-сервер старается не закрывать соединение с клиентом, # ожидая новых запросов KeepAlive On # Максимальное число незакрываемых соединений в ожидании # новых запросов MaxKeepAliveRequests 100 # Максимальное время в секундах ожидания новых запросов KeepAliveTimeout 600 # Начальное число процессов сервера, каждый процесс # генерирует треды для обслуживания запросов StartServers 3 # Максимальное число процессов сервера MaxServers 30 # Если число запущенных тредов меньше указанного, # icap-сервер генерирует новые MinSpareThreads 10 # Если число тредов больше указанного, icap-сервер # убивает дочерние MaxSpareThreads 300 # Начальное число тредов для каждого дочернего процесса ThreadsPerChild 30 # Максимальное число запросов, которое может обслужить # дочерний процесс, как только оно достигнуто, процесс # умирает, 0 -- отключает параметр MaxRequestsPerChild 0 # Порт, на котором принимает запросы icap-сервер Port 1344 # Учетная запись - владелец процессов icap-сервера User cicap # Группа владельцев процессов icap-сервера Group cicap TmpDir /var/tmp/c_icap # Максимальный объем памяти в байтах, занимаемый объектом, # обрабатываемым c-icap MaxMemObject 131072 # Лог-файлы ServerLog /var/log/c_icap/server.log AccessLog /var/log/c_icap/access.log # Каталог модулей c-icap ModulesDir /usr/local/lib/c_icap # Строка-префикс каждого сообщения в логах, # если используем syslog sys_logger.Prefix "C-ICAP:" # Метод ведения логов sys_logger.Facility local1 # Куда пишутся логи - либо в отдельный файл (наш случай), # либо в syslog: sys_logger Logger file_logger # Контроль доступа по acl - подобно acl в Squid: acl localproxy_respmod src 127.0.0.1 type respmod acl localproxy src 127.0.0.1 acl externalnet src 0.0.0.0/0.0.0.0 icap_access allow localproxy_respmod # Разрешаем только самому себе обращаться к icap-серверу icap_access allow localproxy icap_access deny externalnet # Расположение сервисов ServicesDir /usr/local/lib/c_icap # Сервис echo Service echo_module srv_echo.so # Сервис проверки URL Service url_check_module srv_url_check.so # Сервис проверки на вирусы Service antivirus_module srv_clamav.so # Алиас сервиса антивируса для указания в squid.conf # значения параметра icap_service ServiceAlias avscan srv_clamav?allow204=on&sizelimit=off&mode=simple # Список групп типов файлов для сканирования, поддерживаемые # типы указываются в файле /usr/local/etc/c-icap.magic, # о котором сказано ниже srv_clamav.ScanFileTypes TEXT DATA EXECUTABLE ARCHIVE GIF JPEG MSOFFICE # Какой процент данных будет отдаваться сервером icap # до выполнения проверки всех данных запроса srv_clamav.SendPercentData 5 # Если файл больше указанного размера, то включается # предыдущий параметр SendPercentData srv_clamav.StartSendPercentDataAfter 2M # Максимальный размер файлов, которые сканируются ClamAV srv_clamav.MaxObjectSize 5M # Максимальное количество файлов в архиве, используется # библиотекой ClamAV, 0 отключает параметр srv_clamav.ClamAvMaxFilesInArchive 0 # Максимальный размер архива srv_clamav.ClamAvMaxFileSizeInArchive 50M # Максимальный уровень рекурсии srv_clamav.ClamAvMaxRecLevel 5 # Следующие директивы описывают режим работы # viralator like, srv_clamav проверяет тип файла, и если # он указан в директиве srv_clamav.VirScanFileTypes -- # загружает файл для проверки на вирусы и только потом # отдает его пользователю ссылкой на локальном веб-сервере # Место для скачиваемых файлов, на эту директорию должны # быть права у вашего локального веб-сервера srv_clamav.VirSaveDir /var/tmp/c_icap # Интервал в секундах между сообщениями о ходе закачки # файла для проверки srv_clamav.VirUpdateTime 15 # Тип файлов или группы типов файлов, для которых # используется предварительная закачка для проверки # на вирусы; типы указаны все в том же файле c-icap.magic srv_clamav.VirScanFileTypes ARCHIVE EXECUTABLE # Ссылка на локальном веб-сервере на закачанный файл, # отдаваемая пользователю после проверки файла на вирусы, # для этого используется скрипт get_file.pl, # расположенный в директории contrib дистрибутива c-icap srv_clamav.VirHTTPServer "http://localhost/cgi-bin/get_file.pl?usename=%f&remove=1&file=" В заключение описания настройки c-icap пара слов о файле /usr/local/etc/c-icap.magic, где перечислены группы типов файлов и сигнатуры для их распознавания. Приведу фрагмент его содержимого, описывающий исполняемые файлы: 0:MZ:MSEXE:DOS/W32 executable/library/driver:EXECUTABLE 0:LZ:DOSEXE:MS-DOS executable:EXECUTABLE 0:\177ELF:ELF:ELF unix executable:EXECUTABLE 0:\312\376\272\276:JavaClass:Compiled Java class:EXECUTABLE Теперь можно запускать и c-icap, для удобства его запуска и указания в файле /etc/rc.conf для запуска при старте системы можно использовать скрипт: . /etc/rc.subr name="c_icap" rcvar=`set_rcvar` command="/usr/local/bin/c-icap" pidfile="/var/run/c-icap.pid" required_dirs="/var/tmp/c_icap" required_files="/usr/local/etc/c-icap.conf" stop_postcmd="rm -f $pidfile" load_rc_config "$name" : ${c_icap_enable="NO"} : ${c_icap_flags=""} run_rc_command "$1" Скрипт запуска устанавливается c-icap-портом FreeBSD, так как мы собирали c-icap не из порта, у нас его не было; называем файл скрипта c_icap, делаем исполняемым и помещаем в /usr/local/etc/rc.d/. А в rc.conf вносим такие строки: c_icap_enable="YES" squid_enable="YES" clamav_clamd_enable="YES" clamav_freshclam_enable="YES" Наконец, запустив все необходимое, проверим работу всей связки. Для начала можно сходить на любой запрещенный сайт - в браузере должна появиться бан-страничка squidGuarda, после чего попробовать скачать один из файлов с [3]http://www.eicar.org/anti_virus_test_file.htm - это страница с тестовыми вирусами, результат обнаружения вируса показан на рисунке. Сообщение об обнаружении вируса в загружаемом файле Заключение Здесь мы привели самые простые варианты конфигурации используемых компонентов контроля доступа пользователей в Интернет как рабочий пример для возможных решений. В вашей власти как схемы настройки, так и сам набор компонентов.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1, Валера (??), 00:13, 04/10/2010 [ответить]  
  • +/
    У кого нить получилось установить c-icap ??
     
  • 2, GerasimHovhannisyan (?), 10:48, 09/11/2010 [ответить]  
  • +/
    vse ustanovil kak napisano, squid i squidGuard rabotayut normalno, no virusov ne obnarujivaet?
    kak mogu proverit'?
     

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




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру