Лабораторные работы по ПО/Настройка Proxy-сервера Squid: различия между версиями

Материал из wiki.nntc.nnov.ru
Перейти к навигации Перейти к поиску
(Запретить загрузки файлов определенного типа)
Строка 169: Строка 169:
  
 
==Запретить загрузки файлов определенного типа==
 
==Запретить загрузки файлов определенного типа==
 +
Для выполнения этой задачи нам нужно будет познакомиться с основами '''Регулярных Выражений (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
 +
http_access deny media NET155
 +
 +
3. Перезапустим 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
  
 
==Выполнить блокировку рекламных банеров==
 
==Выполнить блокировку рекламных банеров==

Версия 07:48, 17 апреля 2010

Прокси-сервер (от англ. proxy — «представитель, уполномоченный») — служба в компьютерных сетях, позволяющая клиентам выполнять косвенные запросы к другим серверам. Сначала клиент подключается к прокси-серверу и запрашивает какой-либо ресурс (например, web-страницу), расположенный на другом сервере. Затем прокси-сервер либо подключается к указанному серверу и получает ресурс, либо возвращает ресурс из собственного кэша.

Основные задачи, решаемые с помощью proxy-сервера:

  • Кэширование данных, проходящих через основной сервер сети (это единственный способ кэширования информации)
  • Блокировка доступа к нежелательным web-сайтам или нежелаемому контенту (это единственный способ блокировки информации по типу данных или по содержимому)
  • Поточная проверка данных, передаваемых в сеть, на вирусы (единственный способ)
  • Изменение содержания передаваемой клиенту информации (например, блокировка рекламы, подмена на свой логотип)

Существует большое количество реализаций системы проксирования (3proxy, usergate, kerio и др.). Мы будем рассматривать самый распространенный в Internet прокси-сервер Squid.

Установка 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


Проверка работоспособности установленного proxy-сервера

Для проверки работоспособности вашего proxy-сервера следует изменить настройки web-браузера на вашем комдпьютере, на работу с вновь установленным proxy.

FireFox proxy configuration.jpg

В нашем случае 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

http_access deny media NET155

3. Перезапустим squid для применения правила

sudo /etc/init.d/squid restart

проверяем корректность работы правил

Выполнить блокировку рекламных банеров

Обеспечить работу приложений через PROXY-сервер SQUID (ICQ)

Ограничить скорость доступа

Ограничить время доступа в Internet

Презентация по SQUID

media:Squid-presentation.odp

Контрольные вопросы

  1. Назначение PROXY-сервера.
  2. В каком файле конфигурируется PROXY-сервер?
  3. В каком файле находится информация о работе PROXY-сервера?
  4. Что означает параметр acl?
  5. Что означает параметр src?
  6. Что означает параметр dst?
  7. Что означает параметр dstdomain?
  8. Каким образом можно запретить доступ по контентенту?