Pull to refresh

Squid для самых маленьких. Часть 4 Режем канал

Reading time6 min
Views35K
В предыдушем топике мы рассматривали программы для анализа логов сквида, с помощью которых можно смотреть кто, куда, когда ходил. Также можно посмотреть размер скачиваемого файла. Всё стало супер, теперь можно «шантажировать» тех кто качает порнуху, или сидит в соц сетях, лучшим продолжением этой эппопеи, которая не известно когда закончится :) будет ограничение cкорости закачки для разного рода групп людей. Ну, что, готовы? :) Поехали…
История:
Введение в сквид
Настройка
Статистика


Начало. Создаем ACL


Создаем группы ACL:
acl mp3_deny src "/etc/squid/lists/mp3_deny_users"
acl super_users src "/etc/squid/lists/super_users"
acl deny_all src "/etc/squid/lists/deny_all_users"

Вот мы и создали списки, а точнее три группы пользователей, адреса которых содержаться в файлах. Так как айпи были присвоены до меня, и не сходятся по разрешению что им качать а что нет, будет проше выписать их IP в файл чем создавать диапозоны, но для вас все что угодно :)
acl mego_super_user src 192.168.0.0-256 # =) только аккуратно с этим диапозоном
Пример содержания файла со списком
nano "/etc/squid/lists/mp3_deny_users"
192.168.0.213
192.168.0.75
192.168.0.52
195.168.0.254

Теперь пора создать список запрещенных разрешений:
acl mobile urlpath_regex -i (\.thm|\.sis|\.swf|\.jad|\.jar|\.3gp|\.mp4)((\#|\&|\?|\s){1}|$)
acl multimedia urlpath_regex -i (\.swf|\.mp3|\.m3u|\.flv|\.wav|\.vqf|\.avi|\.wmv|\.mpeg|\.mp|\.asf|\.mpe|\.dat|\.mpg|\.wma|\.midi|\.aiff|\.au|\.qt|\.ram|\.rm|\.iso|\.raw|\.mov)((\#|\&|\?|\s){1}|$)
acl archive urlpath_regex -i (\.tar.gz|\.gz|\.tar|\.zip|\.rar|\.cab|\.arj|\.lzh|\.ace|\.7-zip|\.gzip|\.uue|\.bz2|\.iso)((\#|\&|\?|\s){1}|$)
acl soft urlpath_regex -i (\.exe|\.msi|\.rpm)((\#|\&|\?|\s){1}|$)
acl mp3 urlpath_regex -i (\.wav|\.mp3|\.mp4)((\#|\&|\?|\s){1}|$)

Самое главное. Что же это такое, DELAY POOL


Вот теперь все, теперь нам нужно разобраться с этими delay pools с которыми некоторые не решаются работать, потому что не поняли. А я вам скажу, что если вы вьедите, то все будет замечательно, и никаких проблем не будет, ну а если нет, то пишите в каменты, я буду писать для вас ваши delay pools пока не поймете :)
В сквиде существует три типа delay pools, говоря по русски, я дальше и буду так оперировать, ведра. Вот предположим у нас есть ведро к которому подведен мегалитровый канал, в него заливается вода без ограничений, кроме провайдера, который нам её и ограничил, можно создать три типа ведра, на главное ведро, на ведро подсети, и на конретное ведро(на конкретный IP). Пытаюсь еще раз обьсянить, у нас идет вода в главное ведро(если вам не нравиться такое сравнение, то думайте что это буфер), в нем висит сквид который отдает воду всем кому она нужна.
delay class 1 1 #создает первое ведро с глобальным ограничением
тоесть, все кто будут брать воду из первого ведра, то у них будет ограничение.
delay class 1 2 #создает первое ведро с ограничение на под сеть, тоесть 192.168.0.0/24 ну или чё вы у себя пропишите. Теперь разьясняю:
Предположим у вас 3 под сети, 192.168.0.0, 192.168.1.0 192.168.200.0. в ней Н-ое количество качающих. У вас канал 1024кбит/сек. и вы решили поделить на каждую подсеть по 340 кбит/сек. Так вот, если вася из 0 подсети начал качать фильм, потом петя из 1 подсети тоже начал качать новый дистр линуха, и маша начала качать новую программку для… для чегонибудь…
При такой ситуации у каждого скорость будет 340 кбит/сек, или 42 кбайт/сек. Если в этот момент федя из 0 подсети решил скачать что-то то унего и у васи скорость поделится пополам, будет 170, если к пети подключаться еще 3 качальщика, то скорость поделиться на 4, и скорость будет 85. Ну а маша будет качать в одиночку… ИтогоЖ
Канал 1024(Загруженость полная){:
192.168.0.0_340 (Загруженость полная){:
Вася: 170
Федя: 170}
192.168.1.0_340(Загруженость полная){:
Петя: 85
192.168.1.28: 85
192.168.1.30: 85
192.168.1.2 : 85}
192.168.200_340(Загруженость полная){:
Маша: 340}}

В итоге, чё мы получаем, тот кто качает фильм режет канал тому кто качает в этот момент очень важный файл. А Качающая маша никому не мешает, так как на данном этапе режется подсеть, а не глобальное ведро… Надеюсь Вы поняли. Если нет, loop;
Продолжаем…
delay class 1 3 # Создает ведро для резания скорости по IP
Вот наш пример на котором вы изучаете действие Ведер…
мы видим что маша неправильно режет канал! Что Мы должны сделать? Правильно обрубить скачку её софтины, как резать скорость скачки по файлам мы будем во время работы с конфигами. скажу только, что мы специально создали два регэкса archive и soft для этого, мы зажимаем шланг на программу аж на 50кбит/сек. Теперь, если вы не ограничивали скорость на ведро подсети(делается -1/-1), то можно посмотреть что нам это дает:
Без ограничений подсети:
Канал 1024(Загруженость полная){:
192.168.0.0_470 (Загруженость полная){:
Вася: 235
Федя: 235}
192.168.1.0_470(Загруженость полная){:
Петя: 117,5
192.168.1.28: 117,5
192.168.1.30: 117,5
192.168.1.2: 117,5}
192.168.200_80(Загруженость полная){:
Маша: 80}}
Как видите, такое ограничение дает другим участникам обмена данными через ведра существенный прирост, а вот что было бы если вы ограничили бы скорость ведра подети на 340:
Канал 1024(Загруженость 74%){:
192.168.0.0_340 (Загруженость полная){:
Вася: 170
Федя: 170}
192.168.1.0_340(Загруженость полная){:
Петя: 85
192.168.1.28: 85
192.168.1.30: 85
192.168.1.2: 85}
192.168.200_80(Загруженость полная){:
Маша: 80}}
Как вы можете наблюдать, при таком раскладе выигрывают только те кто будут качать из 200 подсети, соседи маши! Как ограничивать и что, решать вам, моё дело вам обьяснить как. И порекомендовать что.
Едем дальше…

Разрабатываем схему движения инета


Теперь давайте набрасаем небольшой шаблон, по которому у нас будут получать инет:
  • Вспоминаем что у нас есть списки по расширению: mobile, multimedia, archive, soft, mp3
  • Так как у нас создано 4 ACl группы, они могут отличаться от основных, мы будем расчитывать канал на 4 подсети
  • Теперь Нужно посмотреть кто у вас больше всех забивает канал: качает файлы, музыку, фильмы. У меня есть те кто качают файлы для мобилы, я это выяснил с помощью SqStat из пред. части, вам тоже стоит понаблюдать в течении дня кто что качает, чтобы потом не бится ап стену и не правя наш шаблон, пока ктото начал качать очередной фильм
  • Найти тех личностей кто боги, ну или почти :) обычно руководителям позволяется больше, ну кроме качания фильмов на больших скоростях, больших от половины ширины канала :)

Вот вроде бы и все. Я вам рекомендую сначала узнать кто что качает, а уже потом начинать резать им канал, ибо это самый тру way…

Работа с конфигом


Я опишу ситуацию в нашем примере, и буду подробно комментировать все параметры
delay_pools 6 # здесь все просто, это количество ведер, после добавления необходимо увеличить число
delay_class 1 2 # ведро для mp3-шников
delay_class 2 2 # ведро подсети 0
delay_class 3 2 # ведро подсети 1
delay_class 4 2 # ведро подсети 200
delay_class 5 3 # спец ведро для маши, как написано раньше :)
delay_class 6 3 # ведро для пользователей второй подсети
# все, мы инициализировали ведра...© Звучит прикольно =)
# Теперь необходимо делать разрешения, кому в какое ведро лезть за данными, а также фильтровать скорость получения этих данных...
#под сеть 0 - acl mp3_deny src
#под сеть 1 - acl super_users
#под сеть 200 - acl deny_all
delay_access 1 allow mp3_deny_src
delay_access 1 allow mp3
delay_access 1 deny all
# В это ведро(пул) попадают те кто находятся в mp3_deny_src, и качают мп3 файл, у них скорость по 10кб на каждого.
delay_access 2 allow mp3_deny_src
delay_access 2 deny all
#здесь те кто в группе mp3_deny_src, но почемуто не качают мп3 :)
delay_access 3 allow super_users
delay_access 3 deny all
#Почти властелины, можно качать все, но в рамках подсети с ведром в 42кб
delay_access 4 allow deny_all
delay_access 4 allow mobile archive soft mp3 # вариант не рабочий, правильный закоменчанный:
# те кто попали в группу deny_all, им запрещено качать всё
#delay_access 4 allow multimedia
#delay_access 4 allow archive
#delay_access 4 allow soft
#delay_access 4 allow mp3

#если вы поняли теорию ведер, то поймете почему 4 ведро не правильно сделано, в нем одинакова скорость как для обычных файлов, так и для запретных
delay_access 4 deny all
delay_access 5 allow masha
delay_access 5 deny all
#Маша качает всёна скорости в 10кб
delay_access 6 allow mego_super_user
delay_access 6 deny all
#вот теперь мы расскаидали каждого по своему ведру. Ограничиваем скорость ведра
# Первый параметр указывает скорость (в килобайтах) а второй указывает буфер, до превышения которого качается на полной скорости.
delay_parameters 1 -1/-1 10000/10000 #мптришники качают файлы на скорости в 10килобайт сек на подсеть
delay_parameters 2 42000/42000 42000/42000
delay_parameters 3 42000/42000 42000/42000
delay_parameters 4 42000/42000 42000/42000
delay_parameters 5 10000/10000 10000/30000 10000/30000 # маша качает всё на скорости в 10 кбайт
delay_parameters 6 50000/70000 30000/35000 10000/15000

вот и всё, самый большой интерес представляет шестое ведро:
каждый из него качает все на скорости в 10, если в под сети скорость превышает, то начинется резанье канал,
Если из других подсетей тоже качают, и их больше двух, то и тогда скорость начинает резаться…
Если вы делаете на фряхе, то при сборке сквида обязательно соберите с опцией --enable-delay-pools!
P.S. очень старался всё как можно понятней разжевать. Если я вам помог разобраться, то значит я не зря писал этот топик. Я буду очень рад. Если что-то не понятно, задавайте вопросы, обязательно отвечу.
P.S.S. написать всё это сне помог дефолтный конфиг сквида, если вы его начнете читать, то сможете узнать туеву кучу новго!
P.S.S.S Уважаемый KorP к сожаленнию сейчас нет времени на домен, так что пока что есть в голове то и пишу
UPD.
reply_body_max_size 1000 allow all файл больше 1 килобайта не качает

Кросспост из моего блога
Tags:
Hubs:
+5
Comments5

Articles