ВСТУП

Багато адміністратори стикаються з проблемою розумного використання
часу і каналу для виходу в мережу Інтернет, замислюються про можливості
економії часу і грошей, про обмеження швидкості для окремих видів
файлів або особистостей, зрештою про економію всього, що пов’язано з
тими чи іншими аспектами виходу в глобальну мережу.

Я, з допомогою цієї статті, спробую наочно і доступно пояснити про
налаштуваннях самого поширеного проксі сервера проксі
сервера 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

Припустимо, що у Вас мережу з адресами від 192.168.0.1 до 192.168.0.254,
тоді додамо новий Acl (див. таблицю № 1):

acl LocalNet src 192.168.0.0/24

Припустимо, що у Вас проксі сервер Squid розташований за адресою
192.168.0.200 на порт 3128, тоді пишемо у файлі конфігурації:

http_port 192.168.0.200:3128

Наступним нашим дією буде заборону використання нашого проксі
сервера, крім як користувачами нашої локальної мережі:

http_access allow LocalNet
http_access deny all

У даному випадку слово allow є дозволом, а слово deny
забороною, тобто ми дозволяємо доступ до проксі-сервера Squid з
адрес нашої локальної мережі і забороняємо доступ всім іншим.

Будьте уважні, вказуючи http_access, так як Squid використовує їх у
порядку вказівки Вами.

ВИВЧАЄМО ACL (СПИСКИ КОНТРОЛЮ ДОСТУПУ)

Система управління доступом в проксі сервер Squid є дуже гнучкою
і обширною. Вона складається з елементів зі значеннями і списків доступу c
зазначенням allow (дозвіл) або deny (заборона).

Формат Acl наступний:

acl ім’я елемент списку

Формат списку доступу:

http_access вказівку имя_acl

Ми розглянемо деякі елементи, що дозволяє використовувати проксі
сервер Squid, звичайно ж з прикладами:

* acl ім’я src список

За допомогою цього елемента (src) ми вказуємо IP-адресу джерела, тобто
клієнта від якого прийшов запит до нашого проксі серверу.

У наступному прикладі ми дозволимо Васі Пупкіну (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

* acl ім’я dst список

Даний елемент (dst) вказує IP-адреса призначення, тобто IP-адресу
того сервера, доступ до якого бажає отримати клієнт проксі сервера.

У наступному прикладі ми заборонимо Васі доступ до підмережі 194.67.0.0/16 (до
наприклад, у ній знаходиться той же aport.ru):

acl Net194 dst 194.67.0.0/16
http_access deny Pupkin Net194

* acl ім’я dstdomain список

За допомогою цього елемента (dstdomain) ми вказуємо домен, доступ до
якого бажає отримати клієнт проксі сервера.

У наступному прикладі ми заборонимо Васі доступ до варезних сайтів nnm.ru і
kpnemo.ru:

acl SitesWarez dstdomain .nnm.ru .kpnemo.ru
http_access deny Pupkin SitesWarez

У випадку, якщо буде необхідно вказати домен джерела, то використовуйте
srcdomain.

* acl ім’я [-i] srcdom_regex список
* acl ім’я [-i] dstdom_regex список

Дані елементи відрізняються від srcdomain і dstdomain лише тим, що в них
використовуються регулярні вирази, які в даній статті ми не
розглядаємо, але приклад все-таки наведемо:

Acl SitesRegexSex dstdom_regex sex
Acl SitesRegexComNet dstdom_regex .com$ .net$
http_access deny Pupkin SitesRegexSex
http_access deny Pupkin SitesRegexComNet

У даному прикладі ми заборонили доступ Пупкіну Василю на всі домени,
містять слово sex і на всі домени в зонах .com і .net.

Ключ -i покликаний ігнорувати регістр символів у регулярних виразах.

* acl ім’я [-i] url_regex список

За допомогою цього елемента (url_regex) ми вказуємо шаблон регулярного
вирази для URL.

Приклад позначення файлів з розширенням avi, починаються на слово sex:

acl NoAviFromSex url_regex -i sex.*.avi$

У разі, якщо Ви бажаєте вказати шаблон тільки для шляху URL, тобто
крім протокол та ім’я хоста (домену), то використовуйте urlpath_regex.

Приклад для вказівки музичних файлів:

acl media urlpath_regex -i .mp3$ .asf$ .wma$

* acl имя_acl port список

Зазначення номера порту призначення, тобто порту, до якого бажає
підключитися клієнт нашого проксі сервера.

Як приклад, заборонимо всім використання програми Mirc через наш проксі
сервер:

Acl Mirc port 6667-6669 7770-7776
http_access deny all Mirc

* acl имя_acl proto список

Вказівка протоколу передачі.

Як приклад, заборонимо вищезазначеного Васі використання протоколу FTP
через наш проксі сервер:

acl ftpproto proto ftp
http_access deny Pupkin ftpproto

* acl имя_acl method список

Вказівка http методу запиту клієнтом (GET, POST).

Візьмемо ситуацію, коли слід заборонити Васі Пупкіну переглядати його
пошту на сайті mail.ru, але при цьому дозволити прогулюватися по сайту без
заборон, тобто заборонити Васі можливість увійти в свій поштовий ящик
через форму входу на сайті:

acl SiteMailRu dstdomain .mail.ru
acl methodpost method POST
http_access deny Pupkin methodpost SiteMailRu

ОБМЕЖЕННЯ КОРИСТУВАЧІВ

Досить часто в нашій країні виникає ситуація, що каналу доступу в
глобальну мережу Інтернет на всіх користувачів не вистачає і виникає
бажання дати кожному по максимуму, але при цьому не дати каналу
«загнутися» через любителів позагружать файли.

Кошти проксі-сервера Squid дозволяють цього домогтися декількома шляхами:

— перший шлях-це оптимізація кешування об’єктів;

— другий — це обмеження по часу певних користувачів, що не
зовсім коректно;

— третій шлях полягає в обмеженні швидкості для певних типів
файлів, користувачів і всього того, що визначено нами через Acl.

ОБМЕЖЕННЯ ПО ЧАСУ

Обмежити користувачів часу можна наступним чином:

acl ім’я time дні чч: мм-ЧЧ: ММ

Де: M — Понеділок, T — Вівторок, W — Середа, H — Четвер, F –
П’ятниця, A — Субота, S — Неділя.

При цьому чч: мм повинна бути менше ніж ЧЧ: ММ, тобто можна вказати з
00:00-23:59, але не можна вказати 20:00-09:00.

Давайте заборонимо все того ж Васі мати доступ в мережу Інтернет з 10 до
15 годин щодня:

acl TimePupkin time 10:00-15:00
http_access deny Pupkin TimePupkin

Якщо хочеться дозволити Васі користуватися програмою Mirc з 13 до 14
годин, то пишемо:

acl TimePupkin time 13:00-14:00
http_access allow Pupkin TimePupkin Mirc
http_access deny Pupkin Mirc

А що робити, якщо необхідно заборонити або дозволити в певні дні
тижні? Squid також дозволяє це зробити, приміром, з 13 до 14 в
понеділок та неділю:

acl TimePupkin time MS 13:00-14:00

Як бачите, нічого складного в цьому немає.

ОБМЕЖЕННЯ ПО ШВИДКОСТІ

Регулювання швидкості в проксі сервер Squid здійснюється з допомогою
пулів. Пул — це свого роду барило з пивом, який постійно пиво
заливають до країв, а клієнти наливають у свої склянки або інші ємності
для подальшого внутрішнього споживання у міру потреби через свої
персональні крани.

Пули регулюються за допомогою трьох параметрів: delay_class,
delay_parameters, delay_access. Кількість пулів вказується з допомогою
параметра delay_pools.

Пули можуть бути трьох класів:

1. Весь потік пива обмежений одним краном (на всю мережу).

2. Весь потік пива обмежений одним краном, але при цьому кран ділиться
на подкранчики (на кожен IP).
3. Весь потік пива обмежений одним краном, але кран ділиться на
подкранчики (на підмережі), які також діляться на міні кранчики (на
кожен IP).

Формати:

delay_pools количество_объявленных_пулов
delay_access номер_пула дію имя_acl

дія може бути allow (дозволити) і deny (заборонити). При цьому,
даний пул діє на тих, кому він дозволений і не діє на тих,
кому він заборонений. У разі, якщо зазначене allow all, а потім deny Pupkin,
на Пупкіна даний клас все-одно подіє, т. к. IP-адреса Пупкіна
оголошений в acl Pupkin, входить в список адрес acl all. Майте це
зважаючи.

delay_class номер_пула класс_пула
delay_parameters номер_пула параметри

параметри відрізняються в залежності від класу пулу:

для першого класу:

delay_parameters 1 байт_на_всю_сеть

для другого класу:

delay_parameters 1 на_всю_сеть на_клиента

для третього класу:

delay_parameters 1 на_всю_сеть на_подсеть на_клиента

Для прикладу, у нас канал на 128 Кбит (в середньому 15 Кбайт в секунду) і ми
бажаємо Васі (Pupkin) дати всього 4 Кбайта/сек (на все про все один
маленький келишок), відділу програмування (Prog) дати всього 10
Кбайт/сек і на кожного усього за 5 Кб/сек (всього два келишка), всіх
інших обмежити в 2 Кбайта/сек на кожного і 10 Кб/сек на всіх, а
файли mp3 (media) обмежити в 3 Кбайта в секунду на всіх (на всю бочку
пива такий маленький кран). Тоді пишемо:

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

Часто виникає питання, а як краще всього використовувати настільки малий
канал, щоб він автоматично ділився між усіма тими, хто в даний
момент що-небудь завантажує? На це питання є однозначна відповідь –
засобами проксі-сервера Squid цього зробити не можливо, але все-таки
дещо зробити можна:

delay_class 1 2
delay_parameters 1 -1/-1 5000/15000
delay_access 1 allow LocalNet
delay_access 1 deny all

Таким чином ми виділяємо на всю нашу мережу на підмережі максимальний
канал (-1 означає необмеженість), а кожному користувачеві даємо
швидкість максимум в 5 Кб/сек після того, як він завантажить на максимальній
швидкості перші 15 Кбайт документа.

Таким чином клієнт не з’їсть весь канал, але досить швидко отримає
перші 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.