SQUID, HTTP проксі-сервер

В цій статті я розгляну базове налаштування HTTP проксі-сервера SQUID, стаття базується на моєму стажі налаштування.

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


Всі дії я буду проводити на вже встановленому дистрибутиві Ubuntu 22.04
версія Squid 5.7.

Встановлення пакета squid та додаткових пакетів.

sudo apt install squid apache2-utils vim -y

Перейдемо до директорії з файлами конфігурації

cd /etc/squid
# переіменуємо основний файл конфігурації
mv squid.conf{,.back} 
# ця команда переіменує файл squid.conf в squid.con.back

# створимо чистий файл конфігурації
touch squid.conf
# створимо файл з іменами та хешами
touch passwd

Базова конфігурація, відкриваємо файл squid.conf

# вкажемо порт який будемо використовувавти (стандартний 3128)
http_port 3128
# журнал доступу
access_log /var/log/squid/access.log

# кешувння в файлову систему
cache_dir ufs /var/spool/squid 100 16 256
# кешування в оперативну пам'ять
cache_mem 256 MB
# вказуємо максимальний розмір обьекту кешування
maximum_object_size 32 MB

# створимо правила доступу
acl localnet src 172.16.100.0/24

# авторизація на сервері
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
acl auth_users proxy_auth REQUIRED

# надамо доступ тільки із мережі localnet та тільки авторизованим
http_access allow localnet auth_users
# все інше заборонемо
http_access deny all

Розберемося з кешуванням
Що таке кешування, як вище було сказано це - тимчасове зберігання відповіді на запити, що дозволяє прискорити доступ до ресурсів і зменшити обсяг вихідного трафіку.

Директиви кешування в squid:
cache_dir - ця директива вказує на кешування в файлову систему, вона має наступні параметри:

  • ufs (Unix File System) - цей параметр вказує що ми будемо кешувати в файлову систему Unix.

  • /var/spool/squid - це шлях зберігання кешу

  • 100 - це максимальна кількість каталогів в кеші. Кеш розділений на каталоги для полегшення операцій зберігання та пошуку.

  • 16 - це кількість рівнів підкаталогів у каталозі. Висока кількість рівнів може полегшити пошук у великих кешах.

  • 256 - це максимальний розмір кешу одного каталогу в мегабайтах.

Тут варто сказати що якщо у Вас буде створено 100 каталогів та встановлений максимальний розмір 256 мегабайтів одного каталогу тоді Вам може знадобитися під кеш 25,6 гігабайта пам’яті в файловій системі.

cache_mem - ця директива вказує на кешування в оперативну пам’ять, вона має наступний параметр:

  • 256 MB - це максимальний розмір оперативної пам’яті який може використовуватися для тимчасового зберігання кешу.

maximum_object_size - ця директива визначає максимальний розмір об'єкта який дозволено кешувати та зберігати в файловій системі, директива ніяк не впливає на максимальний розмір об’єктів які можуть кешуватися в оперативну пам’ять, вона має наступний параметр:

  • 32 MB - це максимальний розмір об'єкта який squid зможе кешувати та зберігати в пам’яті файлової системи.


ACL (Access Control List або Список Контролю Доступу),
це механізм який дозволяє вам налаштовувати правила для контролю доступу до ресурсів чи функціоналу на основі різних умов.
В нашому випадку ми використовуємо для вказання мережі із якої дозволено доступ acl localnet src 172.16.100.0/24 та вказання надаємо доступ тільки авторизованим користувачам acl auth_users proxy_auth REQUIRED, розберемо цю директиву на доступі із мережі:

  • acl - оголошення що будемо використовувати список доступу.

  • localnet - назва списку доступу

  • src - тип списку доступу

  • 172.16.100.0/24 - аргумент за яким здійснюється доступ

Списки доступу це дуже важлива директива через те, що не вірно налаштований доступ може призвести до непрацездатності сервера або може зробити прогалину в безпеці Вашої мережі. Списки доступу налаштовуються індивідуально під задачу. Детальніше про списки доступу можна ознайомити на wiki squid

Авторизація
- це процес визначення та перевірки ідентичності користувачів, які намагаються отримати доступ до ресурсів через проксі-сервер. Squid підтримує різні методи авторизації, і одним із найпоширеніших є базова HTTP-авторизація та авторизація через ідентифікатори користувача (ідентифікатори клієнта).

В нашому випадку ми використовуємо ідентифікатори користувача - це його IP адреса та HTTP-авторизацію. З ідентифікатора користувача все просто ми вже визначили в списках доступу (acl) що дозволимо підключатися тільки із мережі localnet, розберімось з HTTP-авторизацією, за це в нашій конфігурації відповідають наступні рядки:

# авторизація на сервері
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

auth_param - це директива яка вказує що буде проводитися аутентифікація користувача, вона визначає параметри аутентифікації:

  • basic - параметр вказує на те що буде проведена базова HTTP-авторизація

  • program - параметри вказує що буде використовуватися зовнішня програма для аутентифікації.

    • /usr/lib/squid/basic_ncsa_auth - програма для проведення базової HTTP-авторизації

  • /etc/squid/passwd - параметри який передаємо в програму авторизації, в нашому випадку це файл в якому будуть зберігатися імена та хеш користувачів.

  • children - параметри яким ми вказуємо скільки дочірніх процесів буде використано для обробки запитів авторизації, в нашому випадку це 5.

  • realm - параметри який визначає текст, який відображається у вікні запиту на введення імені користувача та пароля, в нашому випадку це `Squid proxy-caching web server`.

  • credentialsttl - параметр вказує, протягом якого часу Squid може вважати авторизацію дійсну без необхідності повторної аутентифікації, в нашому випадку `2 hours` - 2 години.


Надання та заборона доступу

В Squid, контроль доступу визначає, яким користувачам та яким джерелам дозволяється чи забороняється використовувати проксі-сервер. Для цього використовується директива http_access, за замовчуванням доступ заборонено всім. Вище ми з Вами розглядали списки доступу (acl) в яких визначено що доступу надаємо тільки користувачам які підключаються із мережі localnet та тільки користувачам які авторизувалися. В наші конфігурації надання та заборона доступу визначені в наступних рядках:

# надамо доступ тільки із мережі localnet та тільки авторизованим
http_access allow localnet auth_users
# все інше заборонемо
http_access deny all

http_access - це директива яка дозволяє чи забороняє доступ за вказаними умовами

  • allow - дозволити доступ наступним спискам доступу (acl):

    • localnet - користувачам із мережі 172.16.100.0/24

    • auth_users - користувачам які пройшли авторизацію

  • deny - заборонити доступ

    • all - параметр яки визначений та забороняє доступ всім.

Важливо розібрати останній рядок “http_access deny all”, вище я вказав що за замовчуванням в squid доступ заборонено тоді виникає питання навіщо цей рядок нам, на офіційному ресурсі сказано наступне “If none of the "access" lines cause a match, the default is the opposite of the last line in the list. If the last line was deny, the default is allow. Conversely, if the last line is allow, the default will be deny. For these reasons, it is a good idea to have an "deny all" entry at the end of your access lists to avoid potential confusion”.

Базову конфігурацію самого серверу ми закінчили зберігаємо файл squid.conf, перезавантажуємо squid:

systemctl restart squid

Залишилося створити користувачів для доступу на наш сервер, виконаємо наступну команду:

# додамо користувача
htpasswd /etc/squid/passwd proxyuser

htpasswd - це інструмент командного рядка, який використовується для створення та управління файлами паролів для аутентифікації HTTP.

  • /etc/squid/passwd - файл в якому зберігаються імена та хеш користувачів.

  • proxyuser - ім’я користувача.

# виконавши команду ми повинні вказати паролль для користувача
root@your-node:~# htpasswd /etc/squid/passwd proxyuser
# пароль користувача
New password:
# повторіть пароль користувача
Re-type new password:

На цьому ми закінчили налаштування нашого проксі-сервера. Коротко про те що ми зробили:

  • Встановили на Ubuntu 22.04 проксі сервер Squid 5.7

  • Налаштували файл конфігурації:

    • Включили кешування

    • Налаштували ідентифікацію користувачів за мережею

    • Налаштували базову HTTP-авторизацію користувачів


Дякую за увагу, залишайте свої питання в коментарях буду радий відповісти.

Наступного разу ми об’єднаємо HTTP проксі-сервер та політики маршрутизації (таблицю маршрутизації) із попередньої статті.

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Олег Ковалєвський
Олег Ковалєвський@oleh.k

95Прочитань
1Автори
3Читачі
На Друкарні з 26 квітня

Більше від автора

Вам також сподобається

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Вам також сподобається