Ограничиваем скорость доступа пользователям в интернет с помощью SQUID.

Рано или поздно все сталкиваются с задачей ограничения скорости доступа в интернет для пользователей. Эту задачу будем решать с помощью Squid. Мы рассмотрим различные варианты общего ограничения скорости доступа, ограничения скорости при скачивании определенных файлов из сети интернет, ограничение скорости на основе Active Directory групп.

Все операции проделываться будут на Ubuntu server 14.04.5 с развернутым Squid 3.5.19 по этой инструкции.

За ограничение скорости в Squid отвечает параметр delay_pools. Принцип работы delay_pools: каждый запрашиваемый объект сначала попадает в пул, а затем передается клиенту. Каждый пул определяется двумя параметрами: скоростью его заполнения и размером буфера. Прим. размер пула 8000 и размер буфера 8000, означает что скорость заполнения буфера будет 64 кБ/с. Неограниченный размер буфера и скорости задается как -1/-1. Размер буфера и скорость задается в байта.

Скорость заполнения пула зависит от класса delay_class. Варианты доступных классов:

  1. Общие ограничения скорости загрузки для всех.
  2. Общие ограничения скорости загрузки и скорость каждого хоста.
  3. Общие ограничения скорости загрузки, скорость сети и скорость каждого хоста.
  4. Все ограничения класса 3 + ограничения на уровне отдельно взятых пользователей (требуется аутентификация пользователей в правилах http_access).
  5. Запросы группируются по тэгам определяемым в external_acl

Вид записей delay_parameters, в зависимости от выбранного класса:

  1. delay_parameters <номер пула> <общие ограничения для всех>
  2. delay_parameters <номер пула> <общие ограничения для всех> <ограничения для хоста>
  3. delay_parameters <номер пула> <общие ограничения для всех> <ограничения для подсети> <ограничения для хоста>
  4. delay_parameters <номер пула> <общие ограничения для всех> <ограничения для подсети> <ограничения для хоста> <ограничения для пользователя>
  5. delay_parameters <номер пула> <тегированные ограничения>

Первый пример. Разграничение скорости интернета по группам пользователей.

К примеру мы имеем локальную сеть 172.31.31.0/24, список пользователей без ограничений, список пользователей кому ограничивать скорость до 1024 кБ/с.

Создадим списки пользователей с IP-адресами:

sudo touch /etc/squid/Admins_Unlim.txt # Администраторы без ограничение скорости
sudo touch /etc/squid/Users_Speed_1M.txt # Пользователи с ограничением скорости 1Mb

IP-адреса пользователей в текстовые файлы заносим в строчном порядке:

172.31.31.10
172.31.31.13
172.31.31.15
и т.д.

Переходим к редактированию конфигурации Squid

sudo nano /etc/squid/squid.conf

Указываем списки доступа (acl):

# Локальная сеть
acl localnet src 172.31.31.0/24
# Путь к списку IP-адресов пользователей, без ограничения скорости
acl Admins_Unlim src "/etc/squid/Admins_Unlim.txt"
# Путь к списку IP-адресов пользователей, с ограничением скорости 1Mb
acl Users_Speed_1M src "/etc/squid/Users_Speed_1M.txt"

Указываем права доступа:

# Разрешаем только локальную сеть
http_access allow localnet
# Блокирует все остальное
http_access deny all

Задаем пулы по которым будут проходить пользователи:

# Кол-во пулов
delay_pools 2
# Первый пул и его класс
delay_class 1 1
# Второй пул и его класс
delay_class 2 1

Задаем группы доступа к пулам:

# Доступ к пулу 1 пользователей из списка Admins_Unlim
delay_access 1 allow Admins_Unlim
# Остальных не пропускаем в этот пул
delay_access 1 deny all
# Доступ к пулу 2 пользователей из списка Users_Speed_1M
delay_access 2 allow Users_Speed_1M
# Остальных не пропускаем в этот пул
delay_access 2 deny all

Задаем параметры пулов:

# Первому пулу без ограничения размера буфера и скорости
delay_parameters 1 -1/-1
# Второму пулу ограничиваем размер буфера и скорость в 1024 кБ/с
delay_parameters 2 128000/128000

Заметка: Параметры пулов указываются по порядку: общие — подсеть — хост и в том же порядке они перекрывают друг друга. Если, например, на общем уровне действуют ограничения на размер файла, то они автоматически распространяются на подсеть и хост.

Сохраняем конфиг. и перезапускаем Squid. Проверяем работу.

Второй пример. Разграничение скорости интернета по группам пользователей Active Directory

Для ограничения скорости интернета на основе Active Directory групп, применяются практически аналогичные настройки что описаны выше, за исключением параметров определения этих самых групп AD. Ниже описанный способ предполагает что у вас уже настроена связка Squid + Active Directory (как настроить связку подробно описано здесь). Рассмотрим несколько иную ситуацию ограничения скорости, дабы разнообразить описание.

Имеем входящий канал интернета 10Mb, две локальные сети 172.31.31.0/24 и 172.31.32.0/24, группы пользователей в AD — Admins_Unlim (администраторы — без ограничений), Users_Speed_128 (пользователи с ограничениями). Задача поделить канал интернета поровну на две сети, группе пользователей Admins_Unlim предоставлять скорость без ограничения, группе Users_Speed_64 жестко ограничивать скорость до 64 кБ/с, всем остальным авторизованным пользователям AD ограничивать скорость 512 кб/с.

Переходим к редактированию конфигурации Squid

sudo nano /etc/squid/squid.conf

Указываем какие группы в AD мы будем использовать в Squid:

# Указываем какие группы в AD будут использоваться в Squid
external_acl_type Admins_Unlim ttl=5 negative_ttl=5 %LOGIN/usr/lib/squid3/ext_kerberos_ldap_group_acl -a -g Admin_Unlim -D TESTZONE.LOCAL
external_acl_type Users_Speed_64 ttl=5 negative_ttl=5 %LOGIN/usr/lib/squid3/ext_kerberos_ldap_group_acl -a -g Users_Speed_64 -D TESTZONE.LOCAL

Указываем разрешенные локальные сети (acl):

# Локальная сеть 1
acl localnet1 src 172.31.31.0/24
# Локальная сеть 2
acl localnet1 src 172.31.32.0/24
# Группа в AD без ограничений скорости
acl Admins_Unlim external Admins_Unlim
# Группа в AD с жесткими ограничениями скорости
acl Users_Speed_64 external Users_Speed_64

Указываем права доступа:

# Разрешаем доступ только авторизованным пользователям AD. 
http_access allow auth
# Разрешаем доступ из Локальной сети 1
http_access allow localnet1
# Разрешаем доступ из Локальной сети 2
http_access allow localnet2
# Остальным доступ блокируем
http_access deny all

Задаем пулы по которым будут проходить пользователи:

# Кол-во пулов
delay_pools 2
# Первый пул и его класс
delay_class 1 1
# Второй пул и его класс
delay_class 2 1
# Третий пул и его класс
delay_class 3 3

Задаем группы доступа к пулам:

# Доступ к пулу 1 пользователей из списка Admins_Unlim
delay_access 1 allow Admins_Unlim
# Остальных не пропускаем в этот пул
delay_access 1 deny all
# Доступ к пулу 2 пользователей из списка User_Speed_64
delay_access 2 allow User_Speed_64
# Остальных не пропускаем в этот пул
delay_access 2 deny all
# Доступ к пулу 3 Локальной сети 1
delay_access 3 allow localnet1
# Доступ к пулу 3 Локальной сети 2
delay_access 3 allow localnet2
# Остальных не пропускаем в этот пул
delay_access 3 deny all

Задаем параметры пулов:

# Первому пулу без ограничения размера буфера и скорости
delay_parameters 1 -1/-1
# Второму пулу ограничиваем размер буфера и скорость на пользователя 64 кБ/с
delay_parameters 2 8000/8000
# Третьему пулу ограничиваем размер буфера и скорость на локальную сеть 5Mb и на хост 512 кБ/с
delay_parameters 3 -1/-1 640000/640000 64000/64000

Создаем в Active Directory две группы, которые мы указали в конфиге (Admins_Unlim, Users_Speed_64) и включаем в них пользователей. Сохраняем конфиг. и перезапускаем Squid. Проверяем работу.

Мы рассмотрели основные варианты ограничения скорости интернета с использованием delay_class 1,2 и 3 класса. Их вполне достаточно чтобы реализовывать различные задачи по ограничению скорости.

Обзор использования 4 и 5 delay_class классов.

Немного слов об этих двух классах.

4 класс идентичный классу 3, только в нем есть возможность задавать размер буфера и скорости не только по хосту, но и по пользователю (если используется NCSA-авторизация. Как настроить ее описано здесь). Хочу заметить что если пользователь авторизуется на нескольких ПК под одним логином, то скорость ему поделится на равные части от выделенной на каждого пользователя (прим. на пользователя выделено 16000/16000, пользователь заходит в интернет под своим логином на двух разных ПК, то скорость будет у него на каждом из ПК равна 8000/8000).

Использование пула выглядит так:

# Кол-во пулов
delay_pools 1
# Первый пул и его класс
delay_class 1 4
# Доступ к пулу 1 пользователей из списка прокси-авторизации internet_users
delay_access 1 allow internet_users
# Остальных не пропускаем в этот пул
delay_access 1 deny all
# Не ограничиваем размер буфера и скорость на локальную сеть и на хост, а пользователю ограничиваем на 512 кБ/с
delay_parameters 1 -1/-1 -1/-1 -1/-1 64000/64000

Сохраняем конфиг. и перезапускаем Squid. Проверяем работу.

5 класс пока что не дошли разобраться в нем… 🙁

 

Понравилась или оказалась полезной статья, поблагодари автора

 

БесполезноСлабоватоПриемлемоОтличноПревосходно (Еще нет оценок)
Загрузка...

Только один комментарий Комментировать

  1. Владимир /

    будет ли корректно работать такая конструкция ?)

    http_access allow localnet
    http_access allow localhost
    http_access deny all

    acl shef src «/etc/squid/user»
    acl dostupurl url_regex «/etc/squid/dostup_url»
    acl bad_url url_regex «/etc/squid/bad_url»
    acl bad_slovo url_regex «/etc/squid/bad_slovo»
    acl multimedia url_regex -i «/etc/squid/ban_suite»
    #acl multimedia2 rep_mime_type -i ^video
    acl media1 urlpath_regex -i mp3$ flv$ avi$ mp4$ swf$
    acl rabota url_regex -i .permstat.gks.ru* .consultant.ru*

    http_access deny media1 !shef
    http_access deny bad_slovo
    http_access deny bad_url !shef

    delay_pools 1
    delay_class 1 2
    delay_parameters 1 20000/12000 9000/9000

    #delay_access 1 allow multimedia2 !shef !dostupurl

    delay_access 1 allow multimedia !shef
    delay_access 1 allow multimedia !rabota
    delay_access 1 allow multimedia !dostupurl

    delay_access 1 deny all

    желание порезать скорость не по хостам а по контенту)
    и как squid отработает логику если писать так #delay_access 1 allow multimedia2 !shef !dostupurl

Оставить ответ

8 − 2 =