Частина 5.3 Squid
Squid¶
У цьому розділі ви дізнаєтеся про Squid, проксі-кеш HTTP.
Цілі: Ви дізнаєтеся, як:
встановити squid\ налаштувати його як проксі та кешувати вміст HTTP.
squid, proxy, HTTP
Знання: \ Складність:
Час читання: 20 хвилин
Загальні положення¶
Налаштування проксі-сервера передбачає вибір між двома типами архітектури:
- Стандартна архітектура проксі-сервера, що вимагає спеціальної конфігурації кожного клієнта та його веб-браузерів
- Приєднана архітектура проксі-сервера, яка передбачає перехоплення кадрів, надісланих клієнтом, і переписування їх на проксі-сервер
У будь-якому випадку відбувається розрив мережі: клієнт більше не може фізично звертатися до віддаленого сервера напряму, не проходячи через проксі-сервер.
Два брандмауери захищають робочу станцію клієнта, але ніколи не спілкуються безпосередньо із зовнішньою мережею.
Примітка
Для цієї архітектури потрібна конфігурація браузера на клієнтській робочій станції.
Немає необхідності налаштовувати всі клієнтські робочі станції з приєднаним проксі.
Конфігурація відбувається на рівні шлюзу, де він отримує запити клієнтів і прозоро переписує кадри для надсилання їх на проксі.
Примітка
Ця архітектура вимагає певної конфігурації на маршрутизаторі.
У випадку стандартної архітектури проксі-сервера або власного проксі-сервера одним із основних інтересів цього типу служби є діяти як кеш.
Таким чином, файл, завантажений один раз із WAN (можливо, з повільнішого з’єднання, ніж LAN), зберігається в пам’яті в кеші проксі-сервера для використання наступними клієнтами. Таким чином відбувається оптимізація пропускної здатності повільного з’єднання.
Як ви побачите пізніше, це не єдине використання проксі.
Розгортання проксі може:
- Заборонити доступ до певних ресурсів на основі різних параметрів
- Налаштувати аутентифікацію та моніторинг активності клієнтів в Інтернеті
- Налаштувати ієрархію розподілених кешів
- Приховати архітектуру локальної мережі з точки зору WAN (скільки клієнтів є в локальній мережі?)
Серед переваг можна виділити наступні:
- Анонімність в Інтернеті
- Автентифікація
- Журнал активності клієнта
- Фільтрування
- Обмеження доступу
- Оптимізація пропускної здатності
- Безпека
Примітка
Впровадження автентифікації блокує багато зловмисних впливів вірусів на локальну мережу.
Важливо
Служба проксі стає критично важливою службою, що вимагає високої доступності.
Під час роботи з проксі-сервером Squid адміністратор повинен використовувати журнали. Тому важливо знати основні коди відповідей HTTP.
Код | Категорії |
---|---|
1XX | Info "Інформація" |
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 | Розмір в мега |
16 | 16 папок верхнього рівня |
256 | 256 папок другого рівня |
Коли служба запускається вперше, вона створює каталог кешу:
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:
Опція | Опис |
---|---|
Дата | Позначка часу журналу |
Час відгуку | Час відповіді на запит |
@client | IP-адреса клієнта |
Код стану | Код відповіді HTTP |
Розмір | Розмір передачі |
Метод | Метод HTTP (Put / Get / Post / тощо) |
URL | URL запиту |
Пір-код | Код відповіді між проксі |
Тип файлу | Тип мети запиту 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