Устанавливаем связку Squid + squidGuard + с-icap::Журнал СА 3.2009
www.samag.ru
Журнал «БИТ. Бизнес&Информационные технологии»      
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
1001 и 1 книга  
19.03.2018г.
Просмотров: 6730
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 7299
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4549
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 3143
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3937
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3948
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6445
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3288
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3576
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7431
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10790
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12505
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 14204
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9244
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7192
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5492
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4726
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3548
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3258
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3485
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3142
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Устанавливаем связку Squid + squidGuard + с-icap

Архив номеров / 2009 / Выпуск №3 (76) / Устанавливаем связку Squid + squidGuard + с-icap

Рубрика: Безопасность /  Безопасность

Олег Палухин

Устанавливаем связку Squid + squidGuard + с-icap

Работа современного офиса сегодня немыслима без Интернета. Как ограничить доступ к нежелательным ресурсам в Сети, отнимающим у сотрудников рабочее время? В этом поможет совместная работа прокси-сервера Squid с редиректором запросов SquidGuard и сервером ICAP.

Общеизвестно стремление среднестатистического офисного работника к свободному серфингу на просторах Интернета, особенно в рабочее время, особенно когда на расстоянии пары кликов различные «Одноклассники» и «В Контакте», наконец когда появляется все больше и больше программ и сервисов, не требующих установки на компьютер, а довольствующихся лишь наличием выхода в Интернет, и программой – обозревателем интернет-страниц. Отсюда возникает насущная необходимость для руководства предприятия направлять подобного рода «веб-деятельность» своих сотрудников ближе к их прямым рабочим обязанностям.

В качестве одного из решений можно использовать прокси-сервер доступа в Интернет Squid [1] в сочетании с URL-редиректором squidGuard [2], а также организовать проверку http-трафика на вирусы. Для выполнения последней задачи в нашей компании применили Clam Antivirus, работающий через сервер ICAP (Internet Content Adaptation Protocol). Предлагаю вашему вниманию небольшую заметку об установке и настройке вышеупомянутых продуктов для совместной работы по обеспечению доступа пользователей к Интернету.

Прежде чем приступить непосредственно к описанию установки перечислю то, что уже должно быть установлено на вашем сервере:

  •  операционная система – мы будем производить установку на 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 [3] – версия 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 [3]. Распаковываем в рабочую директорию и собираем с такой опцией:

#./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, после чего попробовать скачать один из файлов с http://www.eicar.org/anti_virus_test_file.htm – это страница с тестовыми вирусами, результат обнаружения вируса показан на рисунке.

Сообщение об обнаружении вируса в загружаемом файле

Сообщение об обнаружении вируса в загружаемом файле

Заключение

Здесь мы привели самые простые варианты конфигурации используемых компонентов контроля доступа пользователей в Интернет как рабочий пример для возможных решений. В вашей власти как схемы настройки, так и сам набор компонентов.

  1. http://www.squid-cache.org – официальный сайт проекта Squid.
  2. http://squidguard.org – официальный сайт squidGuard.
  3. http://c-icap.sourceforge.net – домашний сайт c-icap.
  4. http://www.opennet.ru/base/net/squid_inst.txt.html – настройка Squid.

Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru