Настройка Squid для начинающих
Многие администраторы сталкиваются с проблемой разумного использования времени и канала для выхода в сеть Интернет, задумываются о возможности экономии времени и денег, об ограничении скорости для отдельных видов файлов или личностей, в конце концов об экономии всего, что связано с теми или иными аспектами выхода в глобальную сеть.
Я, с помощью этой статьи, попытаюсь наглядно и доходчиво объяснить о настройках самого распространенного прокси сервера - прокси сервера Squid.
Начальные настройки SQUID для доступа пользователей
Мы не будем вдаваться в процесс установки прокси сервера Squid, а перейдем сразу к его настройке.
Самое элементарное, что нам после установки следует сделать, так это разрешить доступ пользователям нашей локальной сети. Для этого служат параметры http_port, http_access. Кроме этого, мы заведем acl (список контроля доступа) для нашей локальной сети.
Итак, http_port нам нужен постольку, поскольку наш прокси сервер Squid должен обслуживать только компьютеры нашей локальной сети и быть невидимым для внешнего мира, дабы исключить возможность "плохим людям" внешней сети воспользоваться нашим каналом или трафиком, а в случае, если будут обнаружены "дыры" в коде прокси сервера Squid, воспользоваться ими.
Параметр http_access используется для разрешения или запрещения доступа к определенным ресурсам, определенным адресам либо с определенных адресов, к определенным сайтам, по определенным протоколам, портам и всему тому, что непосредственно указано с помощью Acl (списков контроля доступа).
Таблица N 1. Некоторые подсети.
Код: Выделить всё
Диапазон адресов |Полная форма |Краткая форма
192.168.0.1-192.168.0.254 192.168.0.0/255.255.255.0 192.168.0.0/24
192.168.20.1-192.168.20.254 192.168.20.0/255.255.255.0 192.168.20.0/24
192.168.0.1-192.168.254.254 192.168.20.0/255.255.0.0 192.168.20.0/16
10.0.0.1-10.254.254.254 10.0.0.0/255.0.0.0 10.0.0.0/8
Код: Выделить всё
acl LocalNet src 192.168.0.0/24
Код: Выделить всё
http_port 192.168.0.200:3128
Код: Выделить всё
http_access allow LocalNet
http_access deny all
Будьте внимательны, указывая http_access, так как Squid использует их в порядке указания Вами.
Изучаем ACL (списки контроля доступа)
Система управления доступом в прокси сервере Squid является очень гибкой и обширной. Она состоит из элементов со значениями и списков доступа c указанием allow (разрешение) или deny (запрещение).
Формат Acl следующий:
Код: Выделить всё
acl имя элемент список
Код: Выделить всё
http_access указание имя_acl
Код: Выделить всё
* acl имя src список
В следующем примере мы разрешим Васе Пупкину (Pupkin) и отделу программирования (Progs) доступ к нашему прокси серверу, а всем остальным запретим:
Код: Выделить всё
acl Progs src 192.168.0.1-192.168.0.9
acl Pupkin src 192.168.0.10
http_access allow Progs
http_access allow Pupkin
http_access deny all
Данный элемент (dst) указывает IP-адрес назначения, то есть IP-адрес того сервера, доступ к которому желает получить клиент прокси сервера.
В следующем примере мы запретим Васе доступ к подсети 194.67.0.0/16 (к примеру, в ней находится тот же aport.ru):
Код: Выделить всё
acl Net194 dst 194.67.0.0/16
http_access deny Pupkin Net194
С помощью этого элемента (dstdomain) мы указываем домен, доступ к которому желает получить клиент прокси сервера.
В следующем примере мы запретим Васе доступ к варезным сайтам nnm.ru и kpnemo.ru:
Код: Выделить всё
acl SitesWarez dstdomain .nnm.ru .kpnemo.ru
http_access deny Pupkin SitesWarez
Код: Выделить всё
* acl имя [-i] srcdom_regex список
* acl имя [-i] dstdom_regex список
Код: Выделить всё
Acl SitesRegexSex dstdom_regex sex
Acl SitesRegexComNet dstdom_regex \.com$ \.net$
http_access deny Pupkin SitesRegexSex
http_access deny Pupkin SitesRegexComNet
Ключ -i призван игнорировать регистр символов в регулярных выражениях.
Код: Выделить всё
* acl имя [-i] url_regex список
Пример указания файлов с расширением avi, начинающихся на слово sex:
Код: Выделить всё
acl NoAviFromSex url_regex -i sex.*\.avi$
Пример для указания музыкальных файлов:
Код: Выделить всё
acl media urlpath_regex -i \.mp3$ \.asf$ \.wma$
Указание номера порта назначения, то есть порта, к которому желает подключится клиент нашего прокси сервера.
Как пример, запретим всем использование программы Mirc через наш прокси сервер:
Код: Выделить всё
Acl Mirc port 6667-6669 7770-7776
http_access deny all Mirc
Указание протокола передачи
Как пример, запретим вышеупомянутому Васе использование протокола FTP через наш прокси сервер:
Код: Выделить всё
acl ftpproto proto ftp
http_access deny Pupkin ftpproto
Указание метода http запроса клиентом (GET, POST)
Возьмем ситуацию, когда следует запретить Васе Пупкину просматривать его почту на сайте mail.ru, но при этом разрешить прогуливаться по сайту без запретов, то есть запретить Васе возможность войти в свой почтовый ящик через форму входа на сайте:
Код: Выделить всё
acl SiteMailRu dstdomain .mail.ru
acl methodpost method POST
http_access deny Pupkin methodpost SiteMailRu
Достаточно часто в нашей стране возникает ситуация, что канала доступа в глобальную сеть Интернет на всех пользователей не хватает и возникает желание дать каждому по максимуму, но при этом не дать каналу "загнуться" из-за любителей позагружать файлы.
Средства прокси-сервера Squid позволяют этого добится несколькими путями:
первый путь это оптимизация кеширования объектов;
второй - это ограничение по времени определенных пользователей, что не совсем корректно;
третий путь заключается в ограничении скорости для определенных типов файлов, пользователей и всего того, что определено нами через Acl.
Ограничения по времени
Ограничить пользователей по времени можно следующим образом:
Код: Выделить всё
acl имя time дни чч:мм-ЧЧ:ММ
При этом чч:мм должно быть меньше чем ЧЧ:ММ, то есть можно указать с 00:00-23:59, но нельзя указать 20:00-09:00.
Давайте запретим всё тому же Васе иметь доступ в сеть Интернет с 10 до 15 часов каждый день:
Код: Выделить всё
acl TimePupkin time 10:00-15:00
http_access deny Pupkin TimePupkin
Код: Выделить всё
acl TimePupkin time 13:00-14:00
http_access allow Pupkin TimePupkin Mirc
http_access deny Pupkin Mirc
Код: Выделить всё
acl TimePupkin time MS 13:00-14:00
Ограничения по скорости
Регулировка скорости в прокси сервере Squid осуществляется с помощью пулов. Пул - это своего рода бочонок с пивом, в который пиво постоянно заливают до краёв, а клиенты наливают в свои стаканы или иные ёмкости для дальнейшего внутреннего потребления по мере надобности через свои персональные краны.
Пулы регулируются с помощью трех параметров: delay_class, delay_parameters, delay_access. Количество пулов указывается с помощью параметра delay_pools.
Пулы могут быть трёх классов:
* Весь поток пива ограничен одним краном (на всю сеть).
* Весь поток пива ограничен одним краном, но при этом кран делится на подкранчики (на каждый IP).
* Весь поток пива ограничен одним краном, но кран делится на подкранчики (на подсети), которые также делятся на мини кранчики (на каждый IP).
Форматы:
Код: Выделить всё
delay_pools количество_объявленных_пулов
delay_access номер_пула действие имя_acl
Код: Выделить всё
delay_class номер_пула класс_пула
delay_parameters номер_пула параметры
для первого класса:
Код: Выделить всё
delay_parameters 1 байт_на_всю_сеть
Код: Выделить всё
delay_parameters 1 на_всю_сеть на_клиента
Код: Выделить всё
delay_parameters 1 на_всю_сеть на_подсеть на_клиента
Код: Выделить всё
acl Prog src 192.168.0.1-192.168.0.9
acl Pupkin src 192.168.0.10
acl LocalNet src 192.168.0.0/255.255.255.0
acl media urlpath_regex -i \.mp3$ \.asf$ \.wma$
delay_pools 4
# сначала ограничим mp3
delay_class 1 1
delay_parameters 1 3000/3000
delay_access 1 allow media
delay_access 1 deny all
# ограничим бедного Васю
delay_class 2 1
delay_parameters 2 4000/4000
delay_access 2 allow Pupkin
delay_access 2 deny all
# ограничим отдел программирования
delay_class 3 2
delay_parameters 3 10000/10000 5000/5000
delay_access 3 allow Prog
delay_access 3 deny all
# а теперь ограничим остальных (второй класс пула)
delay_class 4 2
delay_parameters 4 10000/10000 2000/2000
delay_access 4 deny media
delay_access 4 deny Pupkin
delay_access 4 deny Prog
delay_access 4 allow LocalNet
delay_access 4 deny all
Код: Выделить всё
delay_class 1 2
delay_parameters 1 -1/-1 5000/15000
delay_access 1 allow LocalNet
delay_access 1 deny all
Таким образом клиент не съест весь канал, но достаточно быстро получит первые 15 Кбайт.
Оптимизируем кеширование объектов в SQUID
Существует множество типов файлов, которые обновляются не достаточно часто, чтобы позволить прокси серверу реагировать на заголовки от вебсерверов о том, что данный объект не подлежит кешированию либо он был на удивление только что изменён. Это довольно частая ситуация.
Для разрешения таких ситуаций призван параметр refresh_pattern в файле настроек прокси-сервера Squid, но полностью с формулами и т.п. мы его рассматривать не будем.
Формат:
Код: Выделить всё
refresh_pattern [-i] строка МИНВ процент МАКСВ параметры
* МИНВ (минимальное время) - время в минутах, когда объект, имеющийся в кеше считается свежим.
* МАКСВ (максимальное время) - максимальное время в минутах, когда объект считается свежим.
Параметры - это один или несколько следующих параметров:
* override-expire - игнорировать информацию об истечении свежести объекта и использовать МИНВ.
* override-lastmod - игнорировать информацию о дате изменения файла и использовать МИНВ.
* reload-into-ims - вместо запроса клиентского запроса "не кешировать документы" (no-cache) посылать запрос "Если изменен с" (If-Modified-Since)
* ignore-reload - игнорировать запросы клиентов "не кэшировать документы" (no-cache) или "перезагрузить документ" (reload).
Итак, мы подошли к самом главному. Ну, так какие же типы файлов реже всех обновляются? Как правило, это разнообразные музыкальные файлы и картинки.
Установим свежесть объектов, для этого для картинок и музыкальных файлов укажем, скажем так для примера, целых 30 дней (43200 минут):
Код: Выделить всё
refresh_pattern -i \.gif$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.png$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.jpg$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.jpeg$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.pdf$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.zip$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.tar$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.gz$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.tgz$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.exe$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.prz$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.ppt$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.inf$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.swf$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.mid$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.wav$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.mp3$ 43200 100% 43200 override-lastmod override-expire
Заключение
Прокси сервер Squid не является одним лишь распространенным прокси сервером, существуют и другие. Но как показывает статистика, большинство используют именно этот прокси сервер, но при этом всё равно у многих начинающих возникают проблемы с настройкой.
С помощью этой статьи я попытался хоть немного раскрыть для обширных масс некоторые функции прокси сервера Squid.
Иcточник: https://opennet.ru