Лабораторные работы по ПО/Настройка Proxy-сервера Squid: различия между версиями
Gumanoed (обсуждение | вклад) (→Проверка работоспособности установленного proxy-сервера) |
Gumanoed (обсуждение | вклад) (→Ограничить скорость доступа) |
||
(не показаны 24 промежуточные версии 2 участников) | |||
Строка 45: | Строка 45: | ||
sudo /etc/init.d/squid restart | sudo /etc/init.d/squid restart | ||
+ | sudo squid -k reconfigure (под ubuntu 10.10) | ||
==Проверка работоспособности установленного proxy-сервера== | ==Проверка работоспособности установленного proxy-сервера== | ||
Строка 72: | Строка 73: | ||
Доступ к Internet-ресурсам в proxy-сервере squid организуется через ACL листы. Описание правил доступа похоже не программирование: | Доступ к Internet-ресурсам в proxy-сервере squid организуется через ACL листы. Описание правил доступа похоже не программирование: | ||
+ | |||
1. Вы описываете переменную и присваиваете ей значение | 1. Вы описываете переменную и присваиваете ей значение | ||
acl NET155 src 192.168.155.0/255.255.255.0 | acl NET155 src 192.168.155.0/255.255.255.0 | ||
Строка 84: | Строка 86: | ||
Все правила доступа проверябтся последовательно и если вы уберете строку ''http_access deny all'' либо добавите правила разрешения после нее - ваш proxy-сервер будет работать не так, как вы запланировали. | Все правила доступа проверябтся последовательно и если вы уберете строку ''http_access deny all'' либо добавите правила разрешения после нее - ваш proxy-сервер будет работать не так, как вы запланировали. | ||
+ | ==Запретить доступ к определенному сайту== | ||
+ | Одной из основных задач, которая решается только с помощью proxy-сервера - блокировка доступа к определенному web-сайту. | ||
+ | |||
+ | Попытка блокировки доступа к сайту средствами iptables приведет к необходимости выяснения всех ip-адресов соответствующих доменному имени блокируемого сайта (firewall работают на сетевом уровне стека протокола TCP/IP и не имеют доступа к адресам сайтов внутри IP пакетов). | ||
+ | |||
+ | Нашей задачей будет '''заблокировать доступ к сайту linux.org.ru'''. | ||
+ | |||
+ | Как было упомянуто ранее, все правила Squid начинаются с acl записи описания переменной. Опишем переменную для адреса блокируемого сайта. | ||
+ | |||
+ | acl BlockSite dstdomain .linux.org.ru | ||
+ | |||
+ | Здесь: | ||
+ | * BlockSite - имя "переменно", которое мы будет использовать в дальнейшем в правилах запрещения либо разрешения доступа. Имя переменной выбирается по вашему выбору. Учитывайте, лишь что регистр букв важен (большие и малые буквы различаются). | ||
+ | * dstdomain - тип "переменной", в данном случае - имя домена. Существуют так же типы: dst - ip-адрес; url_regex - список адресов сайтов с регулярными выражениями и т.д. | ||
+ | * .linux.org.ru - адрес того сайта, к которому блокируем доступ. Точка в начале означает что доступ будет блокироваться и к www.linux.org.ru и к www1.linux.org.ru и к ftp.linux.org.ru и т.д. | ||
+ | |||
+ | Описав "переменную" с адресом сайта мы можем добавить правило для блокировки. | ||
+ | |||
+ | http_access deny all BlockSite | ||
+ | |||
+ | Здесь: | ||
+ | * deny - тип действия, в данном случае запрет доступа. allow - разрешение доступа. | ||
+ | * all - кому запрещать доступ. Если вы поищите в конфигурационном файле /etc/squid/squid.conf по строке "acl all" то найдете строку "acl all src 192.168.0.0/16". Переменная all символизирует весь диапазон IP-адресов | ||
+ | * BlockSite - куда запретить доступ компьютерам из списка "all". В нашем случае, на сайт .linux.org.ru | ||
+ | |||
+ | В конфигурационный файл /etc/squid/squid.conf, после окончания существующих acl записей, нужно добавить следующие строки: | ||
+ | |||
+ | sudo nano /etc/squid/squid.conf | ||
+ | ... | ||
+ | '''acl BlockSite dstdomain .linux.org.ru .lug.nnov.ru''' | ||
+ | '''http_access deny all BlockSite''' | ||
+ | |||
+ | После этого сохраните файл и перезапустите Squid | ||
+ | /etc/init.d/squid restart | ||
+ | |||
+ | Теперь в настроенном web-браузере на вашем компьютере введите адрес '''linux.org.ru''' и посмотрите на результат. | ||
+ | |||
+ | Если все настроено верно то при просмотре файла /var/log/squid/access.log вы увидите что то вроде: | ||
+ | |||
+ | tail /var/log/squid/access.log | ||
+ | ... | ||
+ | 271423496.478 0 192.168.1.60 TCP_HIT/200 10584 GET http://css.yandex.net/css/search/f9/_search.css - NONE/- text/css | ||
+ | 1271423496.501 20 192.168.1.60 '''TCP_HIT/200''' 28915 GET http://css.yandex.net/css/search/f9/_search.js - NONE/- application/x-javascript | ||
+ | 1271423496.543 0 192.168.1.60 '''TCP_HIT/200''' 1849 GET http://lego.static.yandex.net/2.1/common/block/b-head-logo/b-head-logo.png - NONE/- image/png | ||
+ | 1271423496.673 0 192.168.1.60 TCP_HIT/200 834 GET http://suggest.yandex.ru/jquery.crossframeajax.html - NONE/- text/html | ||
+ | 1271423496.696 107 192.168.1.60 TCP_MISS/200 567 GET http://www.tns-counter.ru/V13a****yandex_ru/ru/CP1251/tmsec=yandex_serp/0 - DIRECT/217.73.200.169 image/gif | ||
+ | 1271423496.720 108 192.168.1.60 TCP_MISS/302 352 GET http://kiks.yandex.ru/su/ - DIRECT/77.88.21.143 - | ||
+ | 1271423496.734 118 192.168.1.60 TCP_MISS/200 532 GET http://mc.yandex.ru/watch/731962 - DIRECT/77.88.21.90 image/gif | ||
+ | 1271423496.743 8 192.168.1.60 TCP_HIT/200 2026 GET http://kiks.yandex.ru/system/fc06.html - NONE/- text/html | ||
+ | 1271423496.767 23 192.168.1.60 TCP_HIT/200 1834 GET http://kiks.yandex.ru/system/fc06.swf - NONE/- application/x-shockwave-flash | ||
+ | |||
+ | По логу видно: | ||
+ | * с какого IP был запрос на доступ к сайту | ||
+ | * какой ответ был получен при операции (TCP_HIT/200 - код 200 - все нормально) | ||
+ | * объем трафика при доступе к сайту | ||
+ | * к какому сайту было обращение | ||
+ | |||
+ | Если вы видите строку | ||
+ | 1271423496.734 118 192.168.1.60 TCP_MISS/200 532 GET http://linux.org.ru - DIRECT/217.76.32.61 text/html | ||
+ | Это значит что все отлично работает. | ||
+ | |||
+ | ==Запретить доступ к Internet для определенного компьютера вашей локальной сети== | ||
+ | Сразу после установки Squid настроен по принципу "запрещено все, что не разрешено". В правилах доступа присутствует только: | ||
+ | |||
+ | acl all src 0.0.0.0/0.0.0.0 | ||
+ | ... | ||
+ | http_access deny all | ||
+ | |||
+ | Что означает запрет доступа к интернет через Squid для всех IP. | ||
+ | |||
+ | При настройке Squid вам следует придерживаться принципа "запрещено все что не разрешено" и добавлять разрешение на доступ в Internet лишь для определенных компьютеров либо диапазонов IP-адресов. | ||
+ | |||
+ | В начале лабораторной работы мы разрешили доступ к интернет для компьютеров из подсети 192.168.155.0/24. Давайте '''запретим доступ к сайту linux.org.ru с компьютера 192.168.155.5''' (используйте ip вашего компьютера). | ||
+ | |||
+ | acl BlockSite dstdomain .linux.org.ru | ||
+ | acl Host-155.5 src 192.168.155.5 | ||
+ | .... | ||
+ | http_access deny Host-155.5 BlockSite | ||
+ | |||
+ | ===Проверка работы правил=== | ||
+ | *Попробуйте зайти на сайт linux.org.ru с вашего компьютера и проверить работу блокировки | ||
+ | *Попробуйте зайти на yandex.ru и проверить что сайты, отличные от linux.org.ru, доступны с вашего компьютера. | ||
+ | |||
+ | ==Запретить загрузки файлов определенного типа== | ||
+ | Для выполнения этой задачи нам нужно будет познакомиться с основами '''Регулярных Выражений (Regular Expressions, RegExp)'''. | ||
+ | |||
+ | Т.к. squid работает с URL в запросах с вашего компьютера, нам потребуется составить правила с выражениями, которые будут соотвествтовать только URL с именами файлов интересующего нас типа. И не будут соответствовать другим. | ||
+ | |||
+ | ===Элементы регулярных выражений (RegExp)=== | ||
+ | * Символ '''^''' символизирует начало строки. ^http://* будет означать все URL, начинающиеся на http:// | ||
+ | * Символ '''*''' означает любое количество символов. | ||
+ | * Символ '''$''' символизирует конец строки. *\.avi$ будет соответствовать всем путям, заканчивающимся на ".avi". | ||
+ | * Символ '''\''' разделяет блоки в строке. Если вы хотите наложить строкое правило, на присутствие двух характерных последовательностей символов с троке, то вам следует это сделать так: sex.*\.avi$ Это выражение будет соответствовать всем путям, заканчивающимся на .avi и содержащих в пути слово sex. | ||
+ | |||
+ | |||
+ | |||
+ | Для использования регулярных выражений при описании переменной вам следует указать ее тип '''urlpath_regex'''. | ||
+ | |||
+ | Параметр '''-i''' определяет НЕ чувствительность выражений к синтаксису. Буква ''m'' будет соответствовать и '''M''' и '''m''' в пути. | ||
+ | |||
+ | |||
+ | |||
+ | Составим правила для блокировки всех .mp3 и .avi файлов: | ||
+ | |||
+ | 1. Опишем переменную с выражениями, соответствующими URL с именами mp3 и avi файлов: | ||
+ | acl media urlpath_regex -i \.mp3$ \.avi$ | ||
+ | |||
+ | 2. Опишем сеть NET155 (если она еще не описана) | ||
+ | acl NET155 src 192.168.155.0/255.255.255.0 | ||
+ | |||
+ | 3. Создадим правило запрета скачивания mp3 и avi файлов для сети NET155 | ||
+ | http_access deny media NET155 | ||
+ | |||
+ | 4. Перезапустим squid для применения правила | ||
+ | sudo /etc/init.d/squid restart | ||
+ | |||
+ | ===проверяем корректность работы правил=== | ||
+ | * Попробуйте загрузить файл http://solostudio.nnov.ru/sites/default/files/projects/vladimir_slugin/moim_druzyam_v_noviy_god/gorod.mp3 | ||
+ | * Попробуйте скачать файл не запрещенного zip формата http://solostudio.nnov.ru/sites/default/filesfile/soft/rosegarden_10_02-1_amd64_deb.zip | ||
+ | |||
+ | ==Выполнить блокировку рекламных банеров== | ||
+ | |||
+ | Блокировка рекламных банеров с помощью proxy-сервера squid производится на основе списков (текстовых файлов). | ||
+ | Squid поддерживает различные типы списков. Мы с вами будем использовать два из них: | ||
+ | * Тип списка '''url_regex''' - в этом типе списков задаются образцы адресов сайтов, которые будут блокироваться (часть полного адреса между http:// и до первого /) | ||
+ | * Тип списка '''urlpath_regex''' - в этом типе списков задаются образцы имен файлов, которые будут блокироваться (часть полного адреса, после первого /) | ||
+ | |||
+ | |||
+ | 1. Создадим файл со списком образцов адресов сайтов, на которых обычно размещают рекламные банеры: | ||
+ | |||
+ | nano /etc/squid/bad_url | ||
+ | |||
+ | ^http://.*doubleclick | ||
+ | ^http://.*-ad.flycast.com/server/img/ | ||
+ | ^http://1000.stars.ru/cgi-bin/1000.cgi | ||
+ | ^http://1000.stars.ru/cgi-bin/1000.cgi | ||
+ | ^http://12.16.1.10/~web_ani/ | ||
+ | |||
+ | Все образцы адресов сатой записаны в виде регулярных выражений. Все сайты, в адресах доменов которых будет встречаться слово doubleclick будут подпадать под данное правило (и т.д.). | ||
+ | |||
+ | 2. Создадим второй файл со списками образцов имен файлов (банерных картинок) которые в дальнейшем будем блокировать: | ||
+ | |||
+ | nano /etc/squid/bad_url_path | ||
+ | |||
+ | 88x31.*gif | ||
+ | 88x31.*GIF | ||
+ | 100x80.*gif | ||
+ | 100x80.*GIF | ||
+ | 100x100.*gif | ||
+ | 100x100.*GIF | ||
+ | 120x60.*gif | ||
+ | |||
+ | В этом списке содержатся образцы имен файлов, загрузка которых будет блокироваться. Любые изображения, в именах которых встретиться 88x31 и расширение их будет gif будут заблокированы. | ||
+ | |||
+ | 3. Создадим третий пустой файл, в который будем добавлять исключения для "хороших" сайтов, которые будут подпадать под созданные нами выше образцы. | ||
+ | |||
+ | nano /etc/squid/good_url | ||
+ | |||
+ | Оставляем его пустым и сохраняем. | ||
+ | |||
+ | 4. Создав эти файлы мы можем приступать к добавлению правил блокировки интернет-контента на основе данных из этих списков. Откроем на редактирование конфигурационный файл squid'а и добавим туда нужные правила: | ||
+ | |||
+ | nano /etc/squid/squid.conf | ||
+ | |||
+ | Находим секцию, где уже описаны acl записи для других правил и добавим туда следующие строки | ||
+ | |||
+ | acl good_url url_regex "/etc/squid/good_url" | ||
+ | acl bad_urlpath urlpath_regex "/etc/squid/bad_urlpath" | ||
+ | acl bad_url url_regex "/etc/squid/bad_url" | ||
+ | |||
+ | Этими записями мы описали 3 "переменных" good_url, bad_urlpath и bad_url и поставили им в соответствие содержимое соответствующих файлов. Теперь, при загрузке squid будет перечитывать содержимое этих файлов и вносить данные из них в эти "переменные". | ||
+ | |||
+ | После описания мы можем использовать эти "переменные" в правилах блокировки интернет-контента | ||
+ | |||
+ | Ищем ниже по содержимому конфигурационного файла squid секцию, где описываются http_access правила и добавляем в конец уже имеющихся но до правила http_access deny all наши правила блокировки рекламных банеров. | ||
+ | |||
+ | http_access deny bad_urlpath !good_url | ||
+ | http_access deny bad_url !good_url | ||
+ | |||
+ | Первым правилом мы заблокировали весь интернет-контент, в именах файлов которого содержаться образцы их списка '''bad_url_path''' и имен этих файлов нет в списке исключений '''good_url'''. Т.е. если адрес сайта, с которого производится загрузка '''"запрещенного"''' контента, есть в списке '''"хороших"''' сайтов '''good_url''', то пользователь получит и увидит эти файлы. | ||
+ | По аналогии работает и второе правило. Оно блокирует контент по второму списку. | ||
+ | |||
+ | 5. Проверка. После выполнения настроек перезапустите squid и проверьте, работает ли блокировка банеров. | ||
+ | |||
+ | Для проверки, зайдите на сайт http://nn.ru и проверьте, происходит ли блокировка рекламных банеров | ||
+ | |||
+ | ===дополнение=== | ||
+ | Данный подход позволяет снизить нагрузку на Internet-канал организации. Пользователи не прокачивают блокируемый объем рекламы. | ||
+ | |||
+ | ==Обеспечить работу приложений через PROXY-сервер SQUID (ICQ)== | ||
+ | |||
+ | ==Ограничить скорость доступа== | ||
+ | Для ограничения скорости доступа к интернет-контенту в squid существует система Пулов (pool). | ||
+ | |||
+ | Существует три вида пулов для ограничения скорости доступа различным способом: | ||
+ | # тип пулов позволяет указать лимит скорости для всей подсети. Указанная скорость делится равномерно между всеми активными компьютерами из данной подсети | ||
+ | # тип пула позволяет указать отдельно ограничение для всей подсети целиком и для каждого компьютера из этой подсети по отдельности. Т.е. отдельный компьютер не получит скорость больше указанного первонального лимита. Но в то же время, если все компьютеры из подсети начнут закачку одновременно они не превысят скорости выделенной для подсети целиком. | ||
+ | # тип пула позволяет указать по отдельности максимальную скорость для всей сати, максимальную скорость для одной подсети и для каждого компьютера в ней. Т.е. мы получаем три отдельных параметра. | ||
+ | |||
+ | Есть еще одна особенность указания параметров скорости при использовании системы пулов в squid. Скорость указывается двумя параметрами, например '''1000/4000''': | ||
+ | * 4000 - определяет максимальную скорость загрузки в килобайтах в секунду | ||
+ | * 1000 - определяет количество килобайт, после которого начинается применение данного ограничения | ||
+ | |||
+ | Для чего это может быть нужно? | ||
+ | |||
+ | Вы хотите что бы пользователи получали текстовую информацию с сайтов быстро и могли начать читать содержимое. И пока пользователь читает основную информацию картинки успеют загрузиться с пониженной скоростью. За счет этого другие пользователи сети так же могут увидеть текстовое содержимое сайта очень быстро. | ||
+ | |||
+ | |||
+ | В "Запрете загрузки файлов определенного типа" мы создали acl запись для сети NET155. Используем эту "переменную" для ограничения скорости доступа в интернет для всех компьютеров из этой сети. | ||
+ | |||
+ | 1. Откройте файл /etc/squid.conf и проверьте есть ли в нем запись | ||
+ | http_access deny media NET155 | ||
+ | |||
+ | 2. Найдите блок, где описываются delay_pools и добавьте туда следующие записи: | ||
+ | |||
+ | delay_pools 1 | ||
+ | |||
+ | delay_class 1 1 | ||
+ | delay_parameters 1 10000/5000 | ||
+ | delay_access 1 allow NET155 | ||
+ | delay_access 1 deny all | ||
+ | |||
+ | 3. Перезапустите squid | ||
+ | /etc/init.d/squid restart | ||
+ | |||
+ | и для проверки, попробуйте скачать файл http://solostudio.nnov.ru/sites/default/filesfile/soft/rosegarden_10_02-1_amd64_deb.zip После 1Кб данных вы должны заметить падение скорости до 4Кб/c. | ||
+ | |||
+ | ==Ограничить время доступа в Internet== | ||
+ | |||
+ | ==Презентация по SQUID== | ||
[[media:Squid-presentation.odp]] | [[media:Squid-presentation.odp]] | ||
+ | |||
+ | ==Контрольные вопросы== | ||
+ | |||
+ | # Назначение PROXY-сервера. | ||
+ | # В каком файле конфигурируется PROXY-сервер? | ||
+ | # В каком файле находится информация о работе PROXY-сервера? | ||
+ | # Что означает параметр acl? | ||
+ | # Что означает параметр src? | ||
+ | # Что означает параметр dst? | ||
+ | # Что означает параметр dstdomain? | ||
+ | # Каким образом можно запретить доступ по контентенту? | ||
+ | # На каком уровне стека протоколов TCP/IP работает proxy-сервер SQUID? | ||
+ | # Почему нельзя запретить скачивание mp3 файлов на уровне FireWall (iptables)? | ||
+ | |||
<!-- | <!-- |
Текущая версия на 08:59, 14 апреля 2011
Прокси-сервер (от англ. proxy — «представитель, уполномоченный») — служба в компьютерных сетях, позволяющая клиентам выполнять косвенные запросы к другим серверам. Сначала клиент подключается к прокси-серверу и запрашивает какой-либо ресурс (например, web-страницу), расположенный на другом сервере. Затем прокси-сервер либо подключается к указанному серверу и получает ресурс, либо возвращает ресурс из собственного кэша.
Основные задачи, решаемые с помощью proxy-сервера:
- Кэширование данных, проходящих через основной сервер сети (это единственный способ кэширования информации)
- Блокировка доступа к нежелательным web-сайтам или нежелаемому контенту (это единственный способ блокировки информации по типу данных или по содержимому)
- Поточная проверка данных, передаваемых в сеть, на вирусы (единственный способ)
- Изменение содержания передаваемой клиенту информации (например, блокировка рекламы, подмена на свой логотип)
Существует большое количество реализаций системы проксирования (3proxy, usergate, kerio и др.). Мы будем рассматривать самый распространенный в Internet прокси-сервер Squid.
Содержание
- 1 Установка Squid
- 2 Базовая настройка Squid
- 3 Проверка работоспособности установленного proxy-сервера
- 4 Запретить доступ к определенному сайту
- 5 Запретить доступ к Internet для определенного компьютера вашей локальной сети
- 6 Запретить загрузки файлов определенного типа
- 7 Выполнить блокировку рекламных банеров
- 8 Обеспечить работу приложений через PROXY-сервер SQUID (ICQ)
- 9 Ограничить скорость доступа
- 10 Ограничить время доступа в Internet
- 11 Презентация по SQUID
- 12 Контрольные вопросы
Установка Squid
Как и другие программы в пакетных дистрибутивах Linux, squid устанавливается с помощью пакетного менеджера из репозитория.
Вам нужно проверить подключен ли репозиторий и дать команду обновить список доступных пакетов:
sudo aptitude update
Далее, даем команду для установки прокси-сервера squid
sudo aptitude install squid
Базовая настройка Squid
Для правильной работы proxy-сервера Squid вам понадобится сделать базовые настройки в файле /etc/squid/squid.conf
sudo nano /etc/squid/squid.conf
Вам нужно найти и проверить следующие параметры:
Порт, по которому будет доступен ваш proxy-сервер
http_port 3128
Адрес DNS сервера (сервера преобразования имен). В некоторых случая полезно указать этот параметр прямо в конфигурационном фале.
dns_nameservers 192.168.10.1
Имя вашего proxy-сервера, которое будет отображаться в сообщениях об ошибках
visible_hostname http-proxy
Сделав эти настройки перезапустите ваш proxy-сервер:
sudo /etc/init.d/squid restart
sudo squid -k reconfigure (под ubuntu 10.10)
Проверка работоспособности установленного proxy-сервера
Для проверки работоспособности вашего proxy-сервера следует изменить настройки web-браузера на вашем комдпьютере, на работу с вновь установленным proxy.
В нашем случае web-браузером будет FireFox.
- Откройте меню Правка -> Настройки
- Перейдите в раздел Дополнительно
- Закладка Сеть
- Нажмите кнопку Настроить
- В появившемся окне укажите "Использовать Proxy-сервер"
- Введите ip адрес вашего proxy-сервера и укажите порт, который вы указывали в параметре http_port при настройке squid
Теперь попробуйте ввести любой интернет адрес и посмотрите на результат.
Если вы получаете ответ от Proxy-сервера типа:
- Access Denied - настроки вашего прокси запрещают доступ с вашего рабочего компьютера к ресурсам интернет
- Can not retrieve address - проверьте параметр dns_nameservers
- Cannot access site - существует проблема на сегменте подключения вашего proxy-сервера к интернет
При появлении предупреждения о запрете доступа ("access denied") сного вернуться к настройке вашего proxy-сервера squid
sudo nano /etc/squid/squid.conf
Доступ к Internet-ресурсам в proxy-сервере squid организуется через ACL листы. Описание правил доступа похоже не программирование:
1. Вы описываете переменную и присваиваете ей значение
acl NET155 src 192.168.155.0/255.255.255.0
2. Далее, вы описываете правила доступа к ресурсам Internet для этой переменной
http_access allow NET155
Все правила добавляются перед (до) параметра запрещения доступа
http_access deny all
Все правила доступа проверябтся последовательно и если вы уберете строку http_access deny all либо добавите правила разрешения после нее - ваш proxy-сервер будет работать не так, как вы запланировали.
Запретить доступ к определенному сайту
Одной из основных задач, которая решается только с помощью proxy-сервера - блокировка доступа к определенному web-сайту.
Попытка блокировки доступа к сайту средствами iptables приведет к необходимости выяснения всех ip-адресов соответствующих доменному имени блокируемого сайта (firewall работают на сетевом уровне стека протокола TCP/IP и не имеют доступа к адресам сайтов внутри IP пакетов).
Нашей задачей будет заблокировать доступ к сайту linux.org.ru.
Как было упомянуто ранее, все правила Squid начинаются с acl записи описания переменной. Опишем переменную для адреса блокируемого сайта.
acl BlockSite dstdomain .linux.org.ru
Здесь:
- BlockSite - имя "переменно", которое мы будет использовать в дальнейшем в правилах запрещения либо разрешения доступа. Имя переменной выбирается по вашему выбору. Учитывайте, лишь что регистр букв важен (большие и малые буквы различаются).
- dstdomain - тип "переменной", в данном случае - имя домена. Существуют так же типы: dst - ip-адрес; url_regex - список адресов сайтов с регулярными выражениями и т.д.
- .linux.org.ru - адрес того сайта, к которому блокируем доступ. Точка в начале означает что доступ будет блокироваться и к www.linux.org.ru и к www1.linux.org.ru и к ftp.linux.org.ru и т.д.
Описав "переменную" с адресом сайта мы можем добавить правило для блокировки.
http_access deny all BlockSite
Здесь:
- deny - тип действия, в данном случае запрет доступа. allow - разрешение доступа.
- all - кому запрещать доступ. Если вы поищите в конфигурационном файле /etc/squid/squid.conf по строке "acl all" то найдете строку "acl all src 192.168.0.0/16". Переменная all символизирует весь диапазон IP-адресов
- BlockSite - куда запретить доступ компьютерам из списка "all". В нашем случае, на сайт .linux.org.ru
В конфигурационный файл /etc/squid/squid.conf, после окончания существующих acl записей, нужно добавить следующие строки:
sudo nano /etc/squid/squid.conf ... acl BlockSite dstdomain .linux.org.ru .lug.nnov.ru http_access deny all BlockSite
После этого сохраните файл и перезапустите Squid
/etc/init.d/squid restart
Теперь в настроенном web-браузере на вашем компьютере введите адрес linux.org.ru и посмотрите на результат.
Если все настроено верно то при просмотре файла /var/log/squid/access.log вы увидите что то вроде:
tail /var/log/squid/access.log ... 271423496.478 0 192.168.1.60 TCP_HIT/200 10584 GET http://css.yandex.net/css/search/f9/_search.css - NONE/- text/css 1271423496.501 20 192.168.1.60 TCP_HIT/200 28915 GET http://css.yandex.net/css/search/f9/_search.js - NONE/- application/x-javascript 1271423496.543 0 192.168.1.60 TCP_HIT/200 1849 GET http://lego.static.yandex.net/2.1/common/block/b-head-logo/b-head-logo.png - NONE/- image/png 1271423496.673 0 192.168.1.60 TCP_HIT/200 834 GET http://suggest.yandex.ru/jquery.crossframeajax.html - NONE/- text/html 1271423496.696 107 192.168.1.60 TCP_MISS/200 567 GET http://www.tns-counter.ru/V13a****yandex_ru/ru/CP1251/tmsec=yandex_serp/0 - DIRECT/217.73.200.169 image/gif 1271423496.720 108 192.168.1.60 TCP_MISS/302 352 GET http://kiks.yandex.ru/su/ - DIRECT/77.88.21.143 - 1271423496.734 118 192.168.1.60 TCP_MISS/200 532 GET http://mc.yandex.ru/watch/731962 - DIRECT/77.88.21.90 image/gif 1271423496.743 8 192.168.1.60 TCP_HIT/200 2026 GET http://kiks.yandex.ru/system/fc06.html - NONE/- text/html 1271423496.767 23 192.168.1.60 TCP_HIT/200 1834 GET http://kiks.yandex.ru/system/fc06.swf - NONE/- application/x-shockwave-flash
По логу видно:
- с какого IP был запрос на доступ к сайту
- какой ответ был получен при операции (TCP_HIT/200 - код 200 - все нормально)
- объем трафика при доступе к сайту
- к какому сайту было обращение
Если вы видите строку
1271423496.734 118 192.168.1.60 TCP_MISS/200 532 GET http://linux.org.ru - DIRECT/217.76.32.61 text/html
Это значит что все отлично работает.
Запретить доступ к Internet для определенного компьютера вашей локальной сети
Сразу после установки Squid настроен по принципу "запрещено все, что не разрешено". В правилах доступа присутствует только:
acl all src 0.0.0.0/0.0.0.0 ... http_access deny all
Что означает запрет доступа к интернет через Squid для всех IP.
При настройке Squid вам следует придерживаться принципа "запрещено все что не разрешено" и добавлять разрешение на доступ в Internet лишь для определенных компьютеров либо диапазонов IP-адресов.
В начале лабораторной работы мы разрешили доступ к интернет для компьютеров из подсети 192.168.155.0/24. Давайте запретим доступ к сайту linux.org.ru с компьютера 192.168.155.5 (используйте ip вашего компьютера).
acl BlockSite dstdomain .linux.org.ru acl Host-155.5 src 192.168.155.5 .... http_access deny Host-155.5 BlockSite
Проверка работы правил
- Попробуйте зайти на сайт linux.org.ru с вашего компьютера и проверить работу блокировки
- Попробуйте зайти на yandex.ru и проверить что сайты, отличные от linux.org.ru, доступны с вашего компьютера.
Запретить загрузки файлов определенного типа
Для выполнения этой задачи нам нужно будет познакомиться с основами Регулярных Выражений (Regular Expressions, RegExp).
Т.к. squid работает с URL в запросах с вашего компьютера, нам потребуется составить правила с выражениями, которые будут соотвествтовать только URL с именами файлов интересующего нас типа. И не будут соответствовать другим.
Элементы регулярных выражений (RegExp)
- Символ ^ символизирует начало строки. ^http://* будет означать все URL, начинающиеся на http://
- Символ * означает любое количество символов.
- Символ $ символизирует конец строки. *\.avi$ будет соответствовать всем путям, заканчивающимся на ".avi".
- Символ \ разделяет блоки в строке. Если вы хотите наложить строкое правило, на присутствие двух характерных последовательностей символов с троке, то вам следует это сделать так: sex.*\.avi$ Это выражение будет соответствовать всем путям, заканчивающимся на .avi и содержащих в пути слово sex.
Для использования регулярных выражений при описании переменной вам следует указать ее тип urlpath_regex.
Параметр -i определяет НЕ чувствительность выражений к синтаксису. Буква m будет соответствовать и M и m в пути.
Составим правила для блокировки всех .mp3 и .avi файлов:
1. Опишем переменную с выражениями, соответствующими URL с именами mp3 и avi файлов:
acl media urlpath_regex -i \.mp3$ \.avi$
2. Опишем сеть NET155 (если она еще не описана)
acl NET155 src 192.168.155.0/255.255.255.0
3. Создадим правило запрета скачивания mp3 и avi файлов для сети NET155
http_access deny media NET155
4. Перезапустим squid для применения правила
sudo /etc/init.d/squid restart
проверяем корректность работы правил
- Попробуйте загрузить файл http://solostudio.nnov.ru/sites/default/files/projects/vladimir_slugin/moim_druzyam_v_noviy_god/gorod.mp3
- Попробуйте скачать файл не запрещенного zip формата http://solostudio.nnov.ru/sites/default/filesfile/soft/rosegarden_10_02-1_amd64_deb.zip
Выполнить блокировку рекламных банеров
Блокировка рекламных банеров с помощью proxy-сервера squid производится на основе списков (текстовых файлов). Squid поддерживает различные типы списков. Мы с вами будем использовать два из них:
- Тип списка url_regex - в этом типе списков задаются образцы адресов сайтов, которые будут блокироваться (часть полного адреса между http:// и до первого /)
- Тип списка urlpath_regex - в этом типе списков задаются образцы имен файлов, которые будут блокироваться (часть полного адреса, после первого /)
1. Создадим файл со списком образцов адресов сайтов, на которых обычно размещают рекламные банеры:
nano /etc/squid/bad_url ^http://.*doubleclick ^http://.*-ad.flycast.com/server/img/ ^http://1000.stars.ru/cgi-bin/1000.cgi ^http://1000.stars.ru/cgi-bin/1000.cgi ^http://12.16.1.10/~web_ani/
Все образцы адресов сатой записаны в виде регулярных выражений. Все сайты, в адресах доменов которых будет встречаться слово doubleclick будут подпадать под данное правило (и т.д.).
2. Создадим второй файл со списками образцов имен файлов (банерных картинок) которые в дальнейшем будем блокировать:
nano /etc/squid/bad_url_path 88x31.*gif 88x31.*GIF 100x80.*gif 100x80.*GIF 100x100.*gif 100x100.*GIF 120x60.*gif
В этом списке содержатся образцы имен файлов, загрузка которых будет блокироваться. Любые изображения, в именах которых встретиться 88x31 и расширение их будет gif будут заблокированы.
3. Создадим третий пустой файл, в который будем добавлять исключения для "хороших" сайтов, которые будут подпадать под созданные нами выше образцы.
nano /etc/squid/good_url
Оставляем его пустым и сохраняем.
4. Создав эти файлы мы можем приступать к добавлению правил блокировки интернет-контента на основе данных из этих списков. Откроем на редактирование конфигурационный файл squid'а и добавим туда нужные правила:
nano /etc/squid/squid.conf
Находим секцию, где уже описаны acl записи для других правил и добавим туда следующие строки
acl good_url url_regex "/etc/squid/good_url" acl bad_urlpath urlpath_regex "/etc/squid/bad_urlpath" acl bad_url url_regex "/etc/squid/bad_url"
Этими записями мы описали 3 "переменных" good_url, bad_urlpath и bad_url и поставили им в соответствие содержимое соответствующих файлов. Теперь, при загрузке squid будет перечитывать содержимое этих файлов и вносить данные из них в эти "переменные".
После описания мы можем использовать эти "переменные" в правилах блокировки интернет-контента
Ищем ниже по содержимому конфигурационного файла squid секцию, где описываются http_access правила и добавляем в конец уже имеющихся но до правила http_access deny all наши правила блокировки рекламных банеров.
http_access deny bad_urlpath !good_url http_access deny bad_url !good_url
Первым правилом мы заблокировали весь интернет-контент, в именах файлов которого содержаться образцы их списка bad_url_path и имен этих файлов нет в списке исключений good_url. Т.е. если адрес сайта, с которого производится загрузка "запрещенного" контента, есть в списке "хороших" сайтов good_url, то пользователь получит и увидит эти файлы. По аналогии работает и второе правило. Оно блокирует контент по второму списку.
5. Проверка. После выполнения настроек перезапустите squid и проверьте, работает ли блокировка банеров.
Для проверки, зайдите на сайт http://nn.ru и проверьте, происходит ли блокировка рекламных банеров
дополнение
Данный подход позволяет снизить нагрузку на Internet-канал организации. Пользователи не прокачивают блокируемый объем рекламы.
Обеспечить работу приложений через PROXY-сервер SQUID (ICQ)
Ограничить скорость доступа
Для ограничения скорости доступа к интернет-контенту в squid существует система Пулов (pool).
Существует три вида пулов для ограничения скорости доступа различным способом:
- тип пулов позволяет указать лимит скорости для всей подсети. Указанная скорость делится равномерно между всеми активными компьютерами из данной подсети
- тип пула позволяет указать отдельно ограничение для всей подсети целиком и для каждого компьютера из этой подсети по отдельности. Т.е. отдельный компьютер не получит скорость больше указанного первонального лимита. Но в то же время, если все компьютеры из подсети начнут закачку одновременно они не превысят скорости выделенной для подсети целиком.
- тип пула позволяет указать по отдельности максимальную скорость для всей сати, максимальную скорость для одной подсети и для каждого компьютера в ней. Т.е. мы получаем три отдельных параметра.
Есть еще одна особенность указания параметров скорости при использовании системы пулов в squid. Скорость указывается двумя параметрами, например 1000/4000:
- 4000 - определяет максимальную скорость загрузки в килобайтах в секунду
- 1000 - определяет количество килобайт, после которого начинается применение данного ограничения
Для чего это может быть нужно?
Вы хотите что бы пользователи получали текстовую информацию с сайтов быстро и могли начать читать содержимое. И пока пользователь читает основную информацию картинки успеют загрузиться с пониженной скоростью. За счет этого другие пользователи сети так же могут увидеть текстовое содержимое сайта очень быстро.
В "Запрете загрузки файлов определенного типа" мы создали acl запись для сети NET155. Используем эту "переменную" для ограничения скорости доступа в интернет для всех компьютеров из этой сети.
1. Откройте файл /etc/squid.conf и проверьте есть ли в нем запись
http_access deny media NET155
2. Найдите блок, где описываются delay_pools и добавьте туда следующие записи:
delay_pools 1 delay_class 1 1 delay_parameters 1 10000/5000 delay_access 1 allow NET155 delay_access 1 deny all
3. Перезапустите squid
/etc/init.d/squid restart
и для проверки, попробуйте скачать файл http://solostudio.nnov.ru/sites/default/filesfile/soft/rosegarden_10_02-1_amd64_deb.zip После 1Кб данных вы должны заметить падение скорости до 4Кб/c.
Ограничить время доступа в Internet
Презентация по SQUID
Контрольные вопросы
- Назначение PROXY-сервера.
- В каком файле конфигурируется PROXY-сервер?
- В каком файле находится информация о работе PROXY-сервера?
- Что означает параметр acl?
- Что означает параметр src?
- Что означает параметр dst?
- Что означает параметр dstdomain?
- Каким образом можно запретить доступ по контентенту?
- На каком уровне стека протоколов TCP/IP работает proxy-сервер SQUID?
- Почему нельзя запретить скачивание mp3 файлов на уровне FireWall (iptables)?