Лабораторные работы по ПО/Настройка Proxy-сервера Squid: различия между версиями
Gumanoed (обсуждение | вклад) (→Выполнить блокировку рекламных банеров) |
Gumanoed (обсуждение | вклад) (→Выполнить блокировку рекламных банеров) |
||
Строка 212: | Строка 212: | ||
* Тип списка '''url_regex''' - в этом типе списков задаются образцы адресов сайтов, которые будут блокироваться (часть полного адреса между http:// и до первого /) | * Тип списка '''url_regex''' - в этом типе списков задаются образцы адресов сайтов, которые будут блокироваться (часть полного адреса между http:// и до первого /) | ||
* Тип списка '''urlpath_regex''' - в этом типе списков задаются образцы имен файлов, которые будут блокироваться (часть полного адреса, после первого /) | * Тип списка '''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" | ||
+ | |||
+ | |||
+ | |||
+ | http_access deny bad_urlpath !good_url | ||
+ | http_access deny bad_url !good_url | ||
==Обеспечить работу приложений через PROXY-сервер SQUID (ICQ)== | ==Обеспечить работу приложений через PROXY-сервер SQUID (ICQ)== |
Версия 16:15, 13 апреля 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"
http_access deny bad_urlpath !good_url http_access deny bad_url !good_url
Обеспечить работу приложений через PROXY-сервер SQUID (ICQ)
Ограничить скорость доступа
Ограничить время доступа в Internet
Презентация по SQUID
Контрольные вопросы
- Назначение PROXY-сервера.
- В каком файле конфигурируется PROXY-сервер?
- В каком файле находится информация о работе PROXY-сервера?
- Что означает параметр acl?
- Что означает параметр src?
- Что означает параметр dst?
- Что означает параметр dstdomain?
- Каким образом можно запретить доступ по контентенту?
- На каком уровне стека протоколов TCP/IP работает proxy-сервер SQUID?
- Почему нельзя запретить скачивание mp3 файлов на уровне FireWall (iptables)?