Перейти до змісту

Частина 5.3 Squid

Squid

У цьому розділі ви дізнаєтеся про Squid, проксі-кеш HTTP.


Цілі: Ви дізнаєтеся, як:

✔ встановити squid\ ✔ налаштувати його як проксі та кешувати вміст HTTP.

🏁 squid, proxy, HTTP

Знання: ⭐ ⭐\ Складність: ⭐ ⭐

Час читання: 20 хвилин


Загальні положення

Налаштування проксі-сервера передбачає вибір між двома типами архітектури:

  • Стандартна архітектура проксі-сервера, що вимагає спеціальної конфігурації кожного клієнта та його веб-браузерів
  • Приєднана архітектура проксі-сервера, яка передбачає перехоплення кадрів, надісланих клієнтом, і переписування їх на проксі-сервер

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

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

Proxy-based architecture

Примітка

Для цієї архітектури потрібна конфігурація браузера на клієнтській робочій станції.

Немає необхідності налаштовувати всі клієнтські робочі станції з приєднаним проксі.

Конфігурація відбувається на рівні шлюзу, де він отримує запити клієнтів і прозоро переписує кадри для надсилання їх на проксі.

Captive proxy-based architecture

Примітка

Ця архітектура вимагає певної конфігурації на маршрутизаторі.

У випадку стандартної архітектури проксі-сервера або власного проксі-сервера одним із основних інтересів цього типу служби є діяти як кеш.

Таким чином, файл, завантажений один раз із WAN (можливо, з повільнішого з’єднання, ніж LAN), зберігається в пам’яті в кеші проксі-сервера для використання наступними клієнтами. Таким чином відбувається оптимізація пропускної здатності повільного з’єднання.

Як ви побачите пізніше, це не єдине використання проксі.

Розгортання проксі може:

  • Заборонити доступ до певних ресурсів на основі різних параметрів
  • Налаштувати аутентифікацію та моніторинг активності клієнтів в Інтернеті
  • Налаштувати ієрархію розподілених кешів
  • Приховати архітектуру локальної мережі з точки зору WAN (скільки клієнтів є в локальній мережі?)

Серед переваг можна виділити наступні:

  • Анонімність в Інтернеті
  • Автентифікація
  • Журнал активності клієнта
  • Фільтрування
  • Обмеження доступу
  • Оптимізація пропускної здатності
  • Безпека

Примітка

Впровадження автентифікації блокує багато зловмисних впливів вірусів на локальну мережу.

Важливо

Служба проксі стає критично важливою службою, що вимагає високої доступності.

Під час роботи з проксі-сервером Squid адміністратор повинен використовувати журнали. Тому важливо знати основні коди відповідей HTTP.

КодКатегорії
1XXInfo "Інформація"
2XXУспіх
3XXПеренаправлення
4XXПомилка запиту клієнта
5XXПомилка сервера

Приклади:

  • 200: ok
  • 301: Переміщено назавжди
  • 302: Тимчасово переміщено
  • 304: Не змінено
  • 400: Поганий запит
  • 401: Неавторизовано
  • 404: не знайдено

Про Squid

Squid підтримує протоколи HTTP і FTP.

Переваги встановлення рішення на базі сервера Squid:

  • Апаратні рішення дорогі
  • Розробляється з 1996 року
  • Випущено за ліцензією GNU/GPL
Розміри
  • Забезпечує високу доступність
  • Для кешування використовує швидкі жорсткі диски
  • Оперативна пам'ять і ЦП повинні мати правильний розмір

Примітка

Дозвольте 14 МБ оперативної пам’яті на ГБ дискового кешу.

Встановлення

Встановіть пакет squid:

sudo dnf install squid

Важливо

Слідкуйте за тим, щоб не запускати службу, поки кеш не буде ініціалізовано!

Дерево та файли сервера Squid

Єдиний файл конфігурації – /etc/squid/squid.conf.

Журнали служби (зупинка та перезапуск) знаходяться в /var/log/squid.cache.log, тоді як клієнтські запити знаходяться в /var/log/squid/access.log. За замовчуванням файли кешу знаходяться в /var/spool/squid/.

Команда squid

Команда squid керує сервером squid.

Синтаксис команди:

squid [-z|-s|-k parse|-k rotate]
ОпціяОпис
-zІніціалізує каталоги кешу
-sВмикає ведення журналу системного журналу
-k parseТестовий файл конфігурації
-k rotateОбертає лог

Реєстрація запитів клієнтів може швидко призвести до зберігання великих обсягів даних.

Рекомендується регулярно створювати новий файл журналу та архівувати старий у стисненому форматі.

Ви можете зробити це вручну за допомогою параметра -k rotate команди squid або автоматично за допомогою спеціальної служби Linux logrotate.

Конфігурація

Налаштуйте Squid у /etc/squid/squid.conf.

  • Номер порту проксі (порт прослуховування) http_port
http_port num_port

Примітка

Номер порту встановлено на 3128 за замовчуванням, але часто змінюється на 8080. Не забудьте відкрити відповідний порт брандмауера!

Коли служба перезапускається, сервер Squid слухатиме порт, визначений директивою http_port.

  • Резервування оперативної пам'яті cache_mem
cache_mem taille KB|taille MB|taille GB

Наприклад:

cache_mem 1 GB

Порада

Найкраща практика: 1/3 загальної виділеної оперативної пам’яті
  • Протокол Інтернет-кешу (ICP) icp_port

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

Директива icp_port визначає номер порту, який Squid використовує для надсилання та отримання запитів ICP від ​​сусідніх серверів Squid.

Порада

Встановіть 0, щоб вимкнути.
  • Анонімний користувач FTP ftp_user

Директива ftp_user пов'язує користувача FTP з анонімними з'єднаннями FTP. Користувач повинен мати дійсну адресу електронної пошти.

ftp_user bob@rockylinux.lan
  • Налаштувати списки контролю доступу

Синтаксис ACL:

acl name type argument
http_access allow|deny aclname

Приклад:

acl LUNCHTIME time 12:00-14:00
http_access deny LUNCHTIME

Більш детальне обговорення ACL міститься в розділі «Розширена конфігурація».

  • Максимальний розмір кешованого об’єкта maximum_object_size

Синтаксис директиви maximum_object_size:

maximum_object_size size

Приклад:

maximum_object_size 32 MB

Об’єкт не кешується, якщо розмір об’єкта перевищує обмеження maximum_object_size.

  • Назва проксі-сервера visible_hostname

Синтаксис директиви visible_hostname:

visible_hostname name

Приклад:

visible_hostname proxysquid

Примітка

Надане значення може відрізнятися від імені хоста.
  • Визначте кеш для squid cache_ufs
cache_ufs format path size nbFolderNiv1 nbFolderNiv2

Можливе визначення кількох кешів у різних файлових системах для оптимізації часу доступу.

Приклад:

cache_dir ufs /var/spool/squid/ 100 16 256
ОпціяОпис
ufsФайлова система Unix
100Розмір в мега
1616 папок верхнього рівня
256256 папок другого рівня

Коли служба запускається вперше, вона створює каталог кешу:

sudo squid -z
sudo systemctl start squid

Розширена конфігурація

Список контролю доступу Les (ACL)

Синтаксис директиви http_access

http_access allow|deny [!]acl_name

Приклад:

http_access allow LUNCHTIME
http_access deny !LUNCHTIME

ACL !acl_name протилежний ACL acl_name.

Синтаксис директиви acl:

acl name type argument

Порядок ACL накопичується. Кілька ACL з однаковою назвою представляють один ACL.

Приклади:

Авторизація в обідній час:

acl LUNCHTIME time 12:00-14:00
http_access allow LUNCHTIME

Заборонити відео:

acl VIDEOS rep_mime_type video/mpeg
acl VIDEOS rep_mime_type video/avi
http_access deny VIDEOS

Керування IP-адресами:

acl XXX src 192.168.0.0/255.255.255.0
acl XXX dst 10.10.10.1

Керування FQDN:

acl XXX srcdomain .rockylinux.org
acl XXX dstdomain .linux.org

Управління портом:

acl XXX port 80 21

Управління протоколом:

acl XXX proto HTTP FTP

Алгоритми кешування

Існують різні алгоритми кешу з різними характеристиками:

  • LRU - Least Recently Used: видаляє найстаріші об'єкти з оперативної пам'яті
  • LRU-THOLD: копіює об’єкт до кешу відповідно до його розміру
  • MRU: Most Recently Used: видаляє найменш затребувані дані
  • GDSF: Greedy Dual Size Frequency: видаляє відповідно до оригінального розміру та часу доступу із збереженням найменшого
  • LFUDA: Least Frequently Used With Dynamic Aging:те саме, що GDSF, але без поняття розміру. Корисно для кешу з великими файлами.

Аутентифікація клієнта

Squid покладається на зовнішні програми для керування автентифікацією. Його можна базувати на простому плоскому файлі, такому як htpasswd, або на LDAP, SMB, PAM чи інших службах.

Автентифікація також може бути юридичною необхідністю. Не забудьте змусити своїх користувачів підписати статут про використання!

Tools

Команда squidclient

Використовуйте команду squidclient, щоб перевірити запит до сервера squid.

Синтаксис команди squidclient:

squidclient [-s] [-h target] [-p port] url

Приклад:

squidclient -s -h localhost -p 8080 http://localhost/
ОпціяОпис
-sТихий режим (у консолі нічого не відображається)
-hВизначає цільовий проксі
-pПорт прослуховування (за замовчуванням 3128)
-rЗмушує сервер перезавантажити об’єкт

Проаналізуйте журнали

Ви можете контролювати записи журналу Squid за допомогою команди:

tail -f /var/log/squid/access.log

Пояснення щодо log line:

ОпціяОпис
ДатаПозначка часу журналу
Час відгукуЧас відповіді на запит
@clientIP-адреса клієнта
Код стануКод відповіді HTTP
РозмірРозмір передачі
МетодМетод HTTP (Put / Get / Post / тощо)
URLURL запиту
Пір-кодКод відповіді між проксі
Тип файлуТип мети запиту Mime

Безпека

Брандмауер має бути відкритий для порту прослуховування:

sudo firewall-cmd --add-port=3128/tcp --permanent
sudo firewall-cmd --reload

Практичне завдання

В цій практичній роботі ви встановите Squid на свій сервер і використовуватимете його для завантаження оновлень.

Завдання 1: Встановити та налаштувати Squid

Встановити Squid:

sudo dnf install squid
sudo systemctl enable squid
sudo firewall-cmd --add-port=3128/tcp --permanent
sudo firewall-cmd --reload

Видаліть коментар у цьому рядку файлу /etc/squid/squid.conf, щоб створити каталог кешу на диску:

cache_dir ufs /var/spool/squid 100 16 512

За потреби відрегулюйте розмір кешу.

Створіть каталоги кешу та запустіть службу.

sudo squid -z
sudo systemctl start squid

Завдання 2: Використовуйте свій проксі з curl

Відкрийте новий термінал на проксі-сервері, щоб стежити за доступом проксі.

sudo tail -f /var/log/squid/access.log

На другому терміналі використовуйте curl для доступу до веб-сторінки через проксі:

$ curl -I --proxy "http://192.168.1.10:3128" https://docs.rockylinux.org  
HTTP/1.1 200 Connection established

HTTP/2 200 
content-type: text/html
...

Як бачите, існує два HTTP-з'єднання. Перший — із проксі, а другий — із проксі на віддалений сервер.

Ви можете побачити трасування на другому терміналі:

1723793294.548     77 192.168.1.10 TCP_TUNNEL/200 3725 CONNECT docs.rockylinux.org:443 - HIER_DIRECT/151.101.122.132 -

Вміст тут не кешується, оскільки ви запитуєте з’єднання https з віддаленим сервером.

Завдання 3: Налаштуйте DNS для використання вашого проксі-сервера

Відредагуйте файл /etc/dnf/dnf.conf, щоб використовувати проксі-сервер squid:

[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False
proxy=http://192.168.1.10:3128

Очистіть кеш dnf і спробуйте оновити:

sudo dnf clean all
sudo dnf update

Переконайтеся на своєму терміналі, що підключення dnf використовує ваш проксі для завантаження свого оновлення. Зауважте, що «URL-адресу сховища» у наступному рядку буде замінено фактичною URL-адресою дзеркала:

1723793986.725     20 192.168.1.10 TCP_MISS/200 5238 GET "URL of repository"/9.4/extras/x86_64/os/repodata/7d78a729-8e9a-4066-96d4-ab8ed8f06ee8-FILELISTS.xml.gz - HIER_DIRECT/193.106.119.144 application/x-gzip
...
1723794176.255      1 192.168.1.10 TCP_HIT/200 655447 GET "URL of repository"/9.4/AppStream/x86_64/os/repodata/1af312c9-7139-43ed-8761-90ba3cd55461-UPDATEINFO.xml.gz - HIER_NONE/- application/x-gzip

У цьому прикладі ви можете побачити одне з’єднання з TCP_MISS (немає в кеші), а інше — з TCP_HIT (використовуйте кеш для відповіді клієнту).

Висновок

Тепер ви знаєте, як встановити Squid у локальній мережі. Це дозволить вам централізувати вихідні підключення до Інтернету та захистити вашу локальну мережу.

Перевірте свої знання

✔ Який порт прослуховується сервером squid за замовчуванням?

  • 8080
  • 1234
  • 443
  • 3128

✔ Що таке Squid?

  • Зворотний кеш-проксі
  • Кеш-проксі

Author: Antoine Le Morvan

Contributors: Ganna Zhyrnova