Використання проксі-сервера Squid в ОС FreeBSD

Squid – пакет програм з відкритим початковим кодом, який виконує функції кешуючого та проксі-сервера, та підтримує кільки мережевих протоколів, включаючи HTTP, FTP, SSL. Використання Squid надає наступні можливості:

  • централізований доступ до Інтернет через один сервер;
  • зменшення зовнішнього трафіку за рахунок кешування об'єктів;
  • авторизація;
  • можливість регулювати пропускну здатність каналу;
  • можливість обміну змістом кешу з сусідніми проксі-серверами;
  • блокування або заміна небажаної інформації (банери, музичні файли, порнографічні сайти тощо).

Squid працює за наступною схемою: клієнтські програми, які бажають отримати об'єкти з Інтернету, надсилають запити до проксі-серверу, який в свою чергу надсилає запит до HTTP або FTP серверів від власного імені та повертає результат клієнту. Таким чином, в локальній мережі з проксі-сервером безпосередній доступ до Інтернет повинен мати тільки один комп'ютер. Всі об'єкти, крім тих що формуються динамічно, які проходять через Squid, зберігаються в кеші протягом певного часу (зазвичай добу). При повторному запиті цих об'єктів ким-небудь з клієнтів, проксі-сервер повертає їх з кешу, заздалегідь перевіривши, чи не закінчився термін зберігання цих об'єктів, і чи не змінились самі об'єкти на Web-серверах.

В ОС FreeBSD проксі-сервер Squid можливо або скомпілювати з колекції портів (/usr/potrts/www/squid30), або встановити вже зібраний пакет. Перший варіант дозволяє задавати потрібні опції, другий — економити час. Особисто я віддаю перевагу першому способу.

Проксі-сервер функціонує як фонова програма (демон). Для його автоматичного запуску при завантаженні операційної системи необхідно в конфігураційний файл /etc/rc.conf додати параметр squid_enable="YES".

Після встановлення програми необхідно відредагувати основний конфігураційний файл /usr/local/etc/squid/squid.conf. Файл має доволі великі розміри (4844 рядка) та містить багато параметрів, які детально прокоментовані. Опис всіх параметрів можна знайти в офіційній документації (http://www.squid-cache.org/Doc/). В пропонованій статті наводиться тільки базове налаштовування проксі-серверу Squid.

В статті розглянута остання, наразі, стабільна версія програми 3.0.13, яка була встановлена на комп'ютері з операційною системою FreeBSD 7.0. Також існують версії Squid для інших Unix-подібних операційних систем та для Windows. Налаштовування проксі-серверу для цих систем відрізнятимуться від наведеної тільки шляхами до робочих директорій.

Параметри проксі-серверу

Для роботи Squid необхідно створити структуру директорій, де він зберігатиме кешовані об'єкті, кожен об'єкт в окремому файлі. Для цього необхідно запустити програму з параметром -z:

/usr/local/sbin/squid -z

За замовчанням максимальний розмір кешу складає 100 Мб. Він складається з 16 директорій, кожна з яких, в свою чергу, складається з 256 директорій. Якщо виникне потреба змінити ці параметри, то в головному конфігураційному файлі squid.conf необхідно знайти і розкоментувати рядок

cache_dir ufs /usr/local/squid/cache 100 16 256 

та задати власні параметри. Після чого потрібно створити кеш наново.

За замовчанням, проксі-серверу надається тільки 8 Мб оперативної пам'яті для кешування об'єктів. Для збільшення цього значення необхідно змінити параметр cache_mem, наприклад:

cache_mem 64 Mb

Порт, на який прослуховує Squid, задається параметром http_port. Зазвичай це 3128 порт. Якщо на комп'ютері встановлено кілька мережевих карт, то можна конкретизувати адресу, за якою проксі-сервер прийматиме запити, наприклад:

http_port 192.168.1.1:3128

Директорія, в якій зберігаються повідомлення про помилки визначається параметром error_directory, наприклад:

error_directory /usr/local/etc/squid/errors/Ukrainian-1251

Для української мови доступні файли повідомлень в кодуваннях CP1251, koi8-8 UTF8.

Контроль доступу користувачів

Для керування доступом до Інтернет-ресурсів призначені списки контролю доступу — acl, які мають наступний формат:

acl <ім'я списку> src <елементи списку>

Власне доступ визначається параметром http_access, який має наступний формат:

http_access <allow/deny> <ім'я списку>

де allow означає дозвіл, deny — заборону.

Можна організувати авторизацію користувачів по IP-адресам, наприклад:

acl LocalNet src 192.168.1.1 – список з одного комп'ютера;
acl LocalNet src 192.168.1.1 192.168.1.2 192.168.1.1 ... – список з кількох комп'ютерів;
acl LocalNet src 192.168.1.0/24 – вся мережа класу С
acl all src 0.0.0.0/0.0.0.0 — всі мережі

http_access allow LocalNet — дозвіл для acl LocalNet.
http_access deny all — заборона для всіх інших

За допомогою конструкції acl ... arp можливо задавати в списку MAC-адреси:

acl LocalNet arp XX:XX:XX:XX:XX:XX

Для цього Squid повинен бути зібраний з опцією SQUID_ARP_ACL.

Якщо перед списком доступу вказаний символ “!”, то правило діє коли запит не відповідає списку, наприклад:

http_access allow !LocalNet — дозволити доступ всім, крім вказаних в acl LocalNet.

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

htpasswd -c /usr/local/etc/squid/passwd user1 – для першого користувача
htpasswd /usr/local/etc/squid/passwd user2 – для інших користувачів.

де usr/local/etc/squid/passwd — файл паролів.

Перевірки логіна та пароля виконується за допомогою утіліти /usr/local/bin/squid/ncsa_auth, що входить до складу Squid. Список користувачів, яким дозволений доступ задається за допомогою конструкції acl ... proxy_auth:

auth_param basic program /usr/local/libexec/squid/ncsa_auth  /usr/local/etc/squid/passwd 

acl LocalUsers proxy_auth user1 user2 ...

http_access allow LocalUsers
http_access deny all

При заданні правил доступу має значення їх послідовність. Для кожного запиту правила переглядаються один за одним, доти, поки не буде знайдено відповідне, після чого перегляд закінчується. Тому, зазвичай, спочатку задаються правила “дозволити вибраним”, а в кінці правило “заборонити всім”.

Блокування небажаних Інтернет-ресурсів

Списки небажаних ресурсів (рекламні банери, аудіо та відео файли тощо) зручно задавати за допомогою регулярних виразів. Регулярні вирази використовуються в acl наступних форматів:

acl <ім'я списку> url_regex  <елементи списку> - регулярний вираз для всієї адреси ресурсу
acl <ім'я списку> urlpath_regex <елементи списку> - регулярний вираз для URL-шляху ресурсу
acl <ім'я списку> dstdom_regex <елементи списку> - регулярний вираз для доменів

Якщо перед списком вказати параметр “-і”, то вираз стає нечутливим до регістру. Приклади списків:

acl media urlpath_regex -i \.mp3$ \.asf$ \.wma$ \.avi$ \.mpg$ \.mpеg$ \.ogg$ - список  аудіо та відео файлів;
acl pornolist url_regex .*porno\.* .*sex\.* .*adult\.* .*puss*\.* - порнографічні сайти;

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

acl banners url_regex "/usr/local/etc/squid/banners" — список банерів.

де /usr/local/etc/squid/banners текстовий файл наступного змісту:

88x31.*gif 
100x80.*gif
100x100.*gif
120x60.*gif
179x69.*gif
193x72.*gif
468x60.*gif

Заблокувати сайти можна безпосередньо вказавши домени в списку типу dstdomain:

acl warezlist dstdomain "/usr/local/etc/squid/warez" — файлообмінники

де /usr/local/etc/squid/warez — текстовий файл наступного змісту:

.depositfiles.com 
.rapidshare.com
.letitbit.net
.smsfiles.ru
.vip-file.com
.filefactory.com
.s8.4files.net
.free-share.ru

Правила, що забороняють доступ до вказаних ресурсів повинні бути розташовані перед правилами, що дозволяють доступ:

http_access deny media
http_access deny banners
http_access deny pornolist
http_access deny warezlist
http_access allow LocalNet
http_access deny all

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

Для обмеження швидкості, з якою користувачі зможуть отримувати Інтернет-ресурси, призначені пули затримки, які поділяються на три класи. Пули першого класу визначають загальну швидкість для всієї мережі. Пули другого класу визначають загальну швидкість для всієї мережі та швидкість для кожного окремого комп'ютера. Пули третього класу визначають загальну швидкість для всієї мережі, швидкість для кожної підмережі та швидкість для кожного окремого комп'ютера.

Наприклад, необхідно поділити мережу на дві групи. Перша група не матиме жодних обмежень по швидкості. Друга група матиме швидкість 16384 байт/сек. (128Кбайт/сек) на всю групу, та 10240 байт/сек. (10Кбайт/сек) на кожний комп'ютер після завантаження 10000 байт:

delay_pools 2 — створюється два пула

delay_class 1 2 – перший пул другого класу
delay_parameters 1 -1/-1 -1/-1 — обмеження відсутні
delay_access 1 allow FirstGroup — користуватися першим пулом дозволено з комп'ютерів, вказаних в acl FirstGroup
delay_access 1 deny all — іншим заборонено

delay_class 2 2 – другий пул другого класу
delay_parameters 2 16384/10000 10240/10000 — обмеження по швидкості, загальне та на кожний комп'ютер
delay_access 2 allow SecondGroup— користуватися другим пулом дозволено з комп'ютерів, вказаних в acl SecondGroup
delay_access 2 deny all — іншим заборонено

Висновки

Використання кешуючого проксі-сервера з відкритим початковим кодом Squid дозволяє організувати централізований доступ до всесвітньої мережі Інтернет з комп'ютерів локальної мережі. При цьому вдається значно підвищити швидкість отримання інформації за рахунок кешування запитуваних об'єктів. Проксі-сервер Squid надає широкі можливості для керування доступом користувачів та контролю отримуваних ними Інтернет-ресурсів.

© Інформаційні технології. Аналітика , Рідна Мережа