Лабораторные работы по ПО/Настройка Proxy-сервера Squid
Прокси-сервер (от англ. 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Кб данных вы должны заметить падение скорости до 5Кб/c.
Ограничить время доступа в Internet
Презентация по SQUID
Контрольные вопросы
- Назначение PROXY-сервера.
- В каком файле конфигурируется PROXY-сервер?
- В каком файле находится информация о работе PROXY-сервера?
- Что означает параметр acl?
- Что означает параметр src?
- Что означает параметр dst?
- Что означает параметр dstdomain?
- Каким образом можно запретить доступ по контентенту?
- На каком уровне стека протоколов TCP/IP работает proxy-сервер SQUID?
- Почему нельзя запретить скачивание mp3 файлов на уровне FireWall (iptables)?