Squid — настрока: доступно и просто

Всему приходит время, и каждый начинающий сисадмин изучает новые программные пакеты для работы. Вот и дошло время для Squid, я думаю не стоит объяснять что это такое, если вы это читаете значит вы уже представляете что такое сквид и для чего он нужен!


Вот когда-то и мне тоже пришлось изучать эти дебри конфига… Я сначала думал что его просто не реально настроить, из-за большого количества параметров. Но со временем я понял, что там уже всё настроено для нормальной работы. Для раздачи интернета вам необходимо всего лишь добавить

  • acl all src 0.0.0.0/24
  • http_access allow all

Итак, эти две магические сточки сделают следущее:
Первая строка Создаст acl (Access Control List) с именем all для абсолютно всех ip-адресов.
Вторая разрешит acl all доступ.

Вот собственно и всё, теперь все кто будут ломиться на нашу проксю, смогут безнаказанно ломиться в инет, хотя можно и посмотреть кто, куда, и на сколько, но это тему уже другой статьи. Но этого можно избежать. Предположим у вас под сеть 192.168.0.0/24. Сервер со сквидом весит на адресе 192.168.0.1:3128(порт 3128 по дефолту), и второй интерфейс (не важно какой) смотрит в инет, то, для того чтобы пользоваться интернетом могли только компьютеры из вашей под сети необходимо убрать acl all, (его вообще не рекомендуется использовать в alllow!!!)и создать, к примеру вот так:

  • acl my_network src 192.168.0.0/24
  • acl all src 0.0.0.0/24
  • http_access allow my_network
  • http_access deny all

Теперь, в интернет смогут заходить все у кого ip-адресс входит в наш acl my_network.

Настройка

В этой части я расскажу вам про то, какие основные параметры необходимо менять, хотя и не обязательны, ведь разработчики самого сквида выставили довольно хорошо львиную долю значений. Итак, начнем по порядку…
Так как я часто работаю через ssh соединение, иногда на некоторых серверах бывает отвратительная скорость, в связи с этой проблемой рекомендую писать все в самом начале конфига, что дает ему довольно хорошо читаемый вид, и не нужно поиском искать все значения. Хотя, хочу заметить, что все второстепенные параметры(кроме списков доступов ACL и парочки других) не задаются в конфиге по умолчанию. На деле же прописан дефолтный параметр, и он имеет комментарий. Так что нам не придется искать каждый параметр. НО(!!!) если вы уже правили, то не нужно начинать писать все в самом верху, необходимо найти рас комментированные значения и менять их. Поехали.

Первое что я советую сметить, хотя бы на время тестирования это параметр shutdown_lifetime по дефолту он имеет значение 30 секунд, что очень долго. Приведу пример, иногда бывает такое, что ты что-то накосячил, и инет у всего офиса пропал, ты быстро изменил свою ошибку, но сам сквид после того как ты ему послал SIGTERM или SIGHUP(перезагружаешь) ждет время, которое стоит в этом параметре, в течении которого новые соединения не будут устанавливаться, а старые должны закончить закачку. Я обычно ставлю:
shutdown_lifetime 5
Слудущими параметрами будут параметры описывающие кеш cache_dir, maximum_object_size
Итак, если у нас стоит нормальный шлюз, которые проксирует инет, и в организации хватает компов >30, то нужно ставить минимум 2 гига, хотя два в принципе и достаточно большинству. У параметра cache_dir много параметров, я не хочу на них останавливаться, ибо все это отлично описано в манах. Я привиду лишь, то что считаю наиболее рациональным, стандартные 256 Мб ни куда не годятся 🙂
cache_dir ufs /var/squid/cache 2048 16 256
после этого необходимо пересоздать каталоги командой Squid -z, что сотрет весь наш предедуший кеш.

maximum_object_size говорит сквиду стоит ли записывать файлы размером больше определенного.
maximum_object_size 10024, мне кажется что этого вполне хватит, потом некоторые можно будет выуживать из кеша. Иногда полезно если у вас работники качают свежую версию, например Adobe Flash Player.

visible_hostname «%Имя хоста%»

Совет

Вот кажется и все. Как я уже говорил, что в сквиде все уже хорошо настроено, и не нуждо беспокоиться… Хочу поделиться одним очень замечательным советом, который мне смог сэкономить много времени это команда
squid -k reconfigure
Этой командой сквид перечитает свой конфиг файл, и применит его. Теперь не нужно будет постоянно перезапускать сквид. Даже если у вас в конфиге остались ошибки, сквид на них сругнется, но работать останется на предыдушей версии конфига, которая находится в памяти.

Статистика

Каждый, кто поднимает проксю, потом хочет смотреть кто её пользуется, кто сколько качает. И иногда бывает очень полезным просмотр в режиме реального времени, кто что качает. В данном топике будут рассмотрены следующие программы:
SqStat — Real Time статистика через web
Sarg — Анализатор логов Squid с последующей генерации HTML
SquidView — Интерактивный консольный монитор логов Squid

0. Введение

Я не буду здесь рассказывать как настроить Apache. В инете и так много мануалов на эту тему, так что вперед и с песней, я буду рассказывать про те фичи, которые внедрял у себя.
Да, рассказывать буду на примере Debian Etch, у вас могут отличаться пути, имейте ввиду…
Поехали…

1. SquidView

Данная программа работает в консоли, и выводит там же все что делает Squid.
Установка:

aptitude install squidview

Подождем пару секунд, если у вас быстрый интернет. Все, теперь мы можем смотреть кто, что качает. Если у вы не меняли расположение логов, и оставили большинство параметров squid дефолтными, то для просмотра необходимо только запустить его, но с правами root’а, потомучто логи сквида пишутся им…

sudo squidview

Я думаю что этого вполне хватит вам, но также сообщу очень полезные вещи, нужно нажимать кнопки, и смотреть:

  • h — помощь, здесь мы можем узнат ь еще больше 😉
  • l — enter — генерация отчета, вы также можете настроить дополнительные настройки
  • T — начинется учет статистики по размеру скачиваемого
  • O — просмотре кто чё качал по юзерам, после T

По SquidView вроде бы все, если что нибудь не до рассказал, пишиите, добавлю!

SqStat

Screenshot

Это скрипт который позволяет смотреть активные соединения, загрузку канала, и среднюю загрузку канала.
Я предполагаю что у вас уже настроен апач.
Скачиваем последнюю версию,

wget -c samm.kiev.ua/sqstat/sqstat-1.20.tar.gz
tar xvfz sqstat-1.20.tar.gz
cd ./sqstat-1.20
mkdir /var/www/squid-stat
cp -R * /var/www/squid-stat*

Всё, теперь нам необходимо настроить Squid-cgi или cachemgr.cgi, Ставим:
aptitude install squid-cgi

Теперь необходимо настраивать доступ…

nano /etc/squid/squid.conf

Добавляем
acl manager proto cache_object
http_access allow manager localhost
http_access deny manager
#Данная строка задает пароль secret и разрешает делать все
cachemgr_passwd secret all

Сейчас необходимо поправить /etc/squid/cachemgr.conf
echo "*" >> /etc/squid/cachemgr.conf
Вместо * можете поставить адрес сетевой которую прослушивает squid

Вот вродебы и всё!

http://localhost/cgi-bin/cachemgr.cgi

У меня почему то не получилось завести при адресе 127.0.0.1 и ввел 192.168.0.1 и все заработало. теперь вам необходимо ввести в поле Cache Host адрес внещней сетевой. Порт какой у вас стоит, в поле логин, если вы делали всё по мануалу, можно ничего не водить, и в поле пароля пишем secret. Если всё прошло удачно, то вы увмидете список доступных параметров… Можете посмотреть, а мы переходим к настройке SqStat…

nano /var/www/squid-stat/config.inc.php
//Это адрес на котором слушает ваш сквид
$squidhost[0]="192.168.0.1";
$squidport[0]=3128;
$cachemgr_passwd[0]="secret";
//Этот параметр разрешает резолвить имена записями в ващей системе
$resolveip[0]=false;
//В этом файле содержится айпи и имена кмопьютеров, можно использовать кирилицу :)
$hosts_file[0]="hosts";
$group_by[0]="host";

В принципе, сам конфиг хорошо документирован, изучайте, благо там изучать нечего ))

Теперь делаем поддомен, так намного удобнее)

nano /etc/apache2/sites-enabled/sqstat

ServerAdmin [email protected]
DocumentRoot /var/www/squid-stat/
ServerName proxy.server.local

Для резолвинга пишем в /etc/hosts

nano /etc/hosts
192.168.0.1 proxy.server.local

Вот и всё 🙂 почти все

squid -k reconfigure
/etc/init.d/apache2 reload

3. Sarg

Эта программа генерирует html отчеты, риcует графики, и тд…
Ставим:

aptitude install sarg

nano /etc/squid/sarg.conf
language Russian_koi8
graphs yes
title "Squid User Access Reports"
temporary_dir /tmp
output_dir /var/www/sarg
max_elapsed 28800000
charset Koi8-r

Kонечно же никто Вам не запрещает поизгаляться над стилем отображения всего этого хозяйства — конфиг снабжён очень подробными комментариями.

crontab -u root -e
* 08-18/1 * * * /usr/sbin/sarg-reports today
* 00 * * * /usr/sbin/sarg-reports daily
* 01 * * 1 /usr/sbin/sarg-reports weekly
* 02 1 * * /usr/sbin/sarg-reports monthly

UPD. Для решения проблемы со скивдом 3-ей версии неоходимо сделать мягкую ссылку:
ln -s /var/log/squid3/access.log /root/.squidview/log1

Режем канал

Теперь будет ограничение 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, им запрещено качать всё
<b>#delay_access 4 allow multimedia
#delay_access 4 allow archive
#delay_access 4 allow soft
#delay_access 4 allow mp3</b>
#если вы поняли теорию ведер, то поймете почему 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 килобайта не качает

Поделитесь с друзьями

Добавить комментарий

0 комментариев
Вбудовані Відгуки
Переглянути всі коментарі
0
Ми любимо ваші думки, будь ласка, прокоментуйте.x