SCROLL
Среднее время на прочтение: 2 мин.

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

Рано или поздно все сталкиваются с задачей ограничения скорости доступа в интернет для пользователей. Рассмотрим решение данной задачи при помощи прокси-сервера Squid (установить его можно по этой статье)

 

За ограничение скорости в 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

[stextbox id=’info’]Параметры пулов указываются по порядку: общие — подсеть — хост и в том же порядке они перекрывают друг друга. Если, например, на общем уровне действуют ограничения на размер файла, то они автоматически распространяются на подсеть и хост.[/stextbox]

Сохраняем конфиг. и перезапускаем 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