Tinyproxy — це легкий, відкритий HTTP/HTTPS проксі-сервер, розроблений для мінімального споживання ресурсів у системах Linux. Він забезпечує базову функціональність проксі, придатну для вбудованих пристроїв, особистого використання або невеликих мережевих середовищ, де ефективність ресурсів є критично важливою.
Огляд та випадки використання
Tinyproxy надає пріоритет невеликому розміру та простій конфігурації над розширеними функціями, такими як розширене кешування, комплексні методи автентифікації або можливості SOCKS-проксі, що зустрічаються у більших проксі-рішеннях. Він функціонує переважно як HTTP/HTTPS (метод CONNECT) проксі.
Типові випадки використання Tinyproxy включають:
- Особистий проксі: Захист IP-адрес клієнтів або обхід базових геообмежень для окремих користувачів.
- Вбудовані системи: Надання проксі-сервісів на пристроях з обмеженими ресурсами CPU, RAM та сховища.
- Середовища розробки: Локальне тестування проксі-орієнтованих програм або інспекція мережевого трафіку.
- Шлюз для невеликої мережі: Простий, некешуючий проксі для обмеженої кількості клієнтів.
- Ланцюгові проксі: Виступає як посередник у налаштуванні з кількома проксі.
Встановлення
Tinyproxy доступний у стандартних репозиторіях пакетів більшості дистрибутивів Linux.
Debian/Ubuntu
sudo apt update
sudo apt install tinyproxy
RHEL/CentOS/Fedora
sudo dnf install tinyproxy
# Або для старіших CentOS/RHEL:
# sudo yum install tinyproxy
Після встановлення Tinyproxy зазвичай запускається автоматично та прослуховує порт 8888.
Конфігурація
Конфігурація Tinyproxy керується одним файлом, зазвичай розташованим за адресою /etc/tinyproxy/tinyproxy.conf. Усі директиви закоментовані у файлі за замовчуванням, що забезпечує самодокументацію.
Основні директиви
-
Port: Вказує порт, який прослуховує Tinyproxy.
Port 8888
Зміна цього вимагає перезапуску служби Tinyproxy. -
Listen: Прив'язує Tinyproxy до певної IP-адреси. За замовчуванням він прослуховує всі доступні інтерфейси (0.0.0.0). Вказання адреси обмежує доступ.
Listen 192.168.1.10 -
Allow: Визначає IP-адреси або підмережі, яким дозволено підключатися до проксі. Можна використовувати кілька директивAllow. Якщо директивиAllowне вказані, Tinyproxy дозволяє підключення з усіх хостів. Явне заборонення всіх, а потім дозвіл певних діапазонів є поширеною практикою безпеки.
# Заборонити все за замовчуванням (якщо директиви Allow відсутні, це неявно хибно) # Allow 127.0.0.1 # Allow 192.168.1.0/24 -
Timeout: Встановлює тайм-аут бездіяльності для з'єднань у секундах.
Timeout 600 -
User/Group: Вказує користувача та групу, до яких Tinyproxy має скинути привілеї після запуску. Запуск від імені користувача, що не є root, є найкращою практикою безпеки.
User tinyproxy Group tinyproxy -
LogLevel: Керує деталізацією журналювання. Варіанти включаютьCritical,Error,Warning,Notice,Info,Debug.
LogLevel Info -
LogFile: Вказує шлях до файлу журналу.
LogFile "/var/log/tinyproxy/tinyproxy.log" -
MaxClients: Встановлює максимальну кількість одночасних клієнтських з'єднань, які Tinyproxy буде обробляти. Перевищення цього ліміту призводить до відхилення з'єднання.
MaxClients 100 -
DisableViaHeader: Якщо увімкнено, Tinyproxy не додаватиме заголовокViaдо вихідних запитів. Це може підвищити конфіденційність, запобігаючи розкриттю присутності проксі.
DisableViaHeader Yes -
ConnectPort: Вказує, які порти Tinyproxy дозволить для запитівCONNECT(використовується для тунелювання HTTPS). Можна використовувати кілька директивConnectPort.
ConnectPort 443 ConnectPort 563
Розширені директиви конфігурації
-
Upstream: З'єднує Tinyproxy з іншим проксі-сервером. Ця директива вказує вихідний проксі для певних доменів або всього трафіку.
```
# Використовувати upstream_proxy.example.com:8080 для всіх запитів
Upstream http upstream_proxy.example.com:8080Використовувати інший upstream для певних доменів
Upstream http 10.0.0.1:3128 "example.com"
Upstream http 10.0.0.1:3128 ".example.org"
`` Ключове словоhttpвказує на HTTP-проксі. ДирективиUpstream` обробляються по порядку; застосовується перше співпадіння. -
NoCache: Запобігає надсиланню Tinyproxy певних HTTP-заголовків, які могли б спричинити кешування на стороні клієнта. Це не означає, що сам Tinyproxy має механізм кешування.
NoCache -
Filter/FilterURLs/FilterBypass: Забезпечує базову фільтрацію вмісту на основі регулярних виразів.Filter "/etc/tinyproxy/filter.txt": Вказує файл, що містить регулярні вирази для блокування URL-адрес.FilterURLs Yes: Вмикає фільтрацію URL-ададрес.FilterBypass "192.168.1.0/24": Дозволяє вказаним клієнтам обходити фільтрацію.
Файл
filter.txtміститиме один регулярний вираз на рядок. Наприклад, для блокування Facebook:
.*facebook\.com.*
Це рудиментарний механізм фільтрації, а не заміна спеціалізованих рішень для фільтрації вмісту.
Керування службою
Після зміни tinyproxy.conf службу Tinyproxy необхідно перезапустити, щоб зміни набули чинності.
Systemd (Сучасні дистрибутиви Linux)
sudo systemctl restart tinyproxy
sudo systemctl enable tinyproxy # Переконайтеся, що він запускається при завантаженні
sudo systemctl status tinyproxy
SysVinit (Старіші дистрибутиви Linux)
sudo /etc/init.d/tinyproxy restart
sudo /etc/init.d/tinyproxy status
Тестування проксі
Після конфігурації та перезапуску служби проксі можна протестувати.
Використання curl
curl -x http://localhost:8888 http://ipinfo.io/ip
Замініть localhost:8888 на IP-адресу та порт сервера Tinyproxy, якщо тестуєте з іншої машини. Вивід має відображати публічну IP-адресу сервера Tinyproxy, а не клієнта.
Конфігурація браузера
Налаштуйте свій веб-браузер (наприклад, Firefox, Chrome) на використання HTTP-проксі за IP-адресою та портом сервера Tinyproxy. Відкрийте веб-сайт, щоб підтвердити підключення.
Міркування щодо безпеки
- Контроль доступу: Завжди обмежуйте доступ до проксі за допомогою директиви
Allow. За замовчуванням Tinyproxy може дозволяти підключення з усіх хостів, якщо директивиAllowвідсутні. - Брандмауер: Налаштуйте брандмауер вашої системи (наприклад,
ufw,firewalld), щоб дозволяти вхідні з'єднання до порту Tinyproxy лише з довірених діапазонів IP-адрес.
bash # Приклад використання ufw sudo ufw allow from 192.168.1.0/24 to any port 8888 sudo ufw enable - Користувач без прав root: Переконайтеся, що Tinyproxy працює від імені користувача без прав root (директиви
UserтаGroup), щоб мінімізувати потенційні ризики безпеки. - Журналювання: Відстежуйте журнали Tinyproxy на наявність незвичайної активності.
DisableViaHeader: Розгляньте можливість увімкнення цього для підвищення конфіденційності, хоча це не забезпечує анонімності.
Порівняння з Squid
Tinyproxy та Squid є HTTP-проксі-серверами для Linux, але вони орієнтовані на різні випадки використання та пропонують різні набори функцій.
| Функція | Tinyproxy | Squid |
|---|---|---|
| Основна мета | Мінімальне використання ресурсів, простота | Висока продуктивність, розширені функції, кешування |
| Використання ресурсів | Дуже низьке споживання CPU/RAM | Помірне до високого споживання CPU/RAM, особливо з великими кешами та високим трафіком |
| Кешування | Немає вбудованого кешування | Розширене, настроюване кешування для HTTP-об'єктів |
| Автентифікація | Немає нативно | Basic, Digest, NTLM, Kerberos, зовнішні помічники |
| Контроль доступу | На основі IP (Allow директива) |
Високогранулярні ACL на основі IP, домену, URL, користувача, часу, методів тощо. |
| Протоколи | HTTP, HTTPS (CONNECT) | HTTP, HTTPS (CONNECT), FTP, Gopher, SOCKS (на стороні клієнта для upstream) |
| Прозорість | Немає підтримки прозорого проксі | Повна підтримка прозорого проксі |
| Складність | Проста конфігурація, мало директив | Складна конфігурація, багато директив, потужні можливості скриптингу |
| Типове використання | Вбудовані системи, особистий проксі, невелика локальна мережа | Корпоративні мережі, інтернет-провайдери, великі організації, фільтрація вмісту, безпека |
Усунення несправностей
- Перевірка журналів: Директива
LogFileвказує, куди Tinyproxy записує свої журнали. ЗбільштеLogLevelдоDebugдля більш детального виводу під час усунення несправностей.
bash sudo tail -f /var/log/tinyproxy/tinyproxy.log - Статус служби: Перевірте, чи працює Tinyproxy, використовуючи
systemctl status tinyproxyабо/etc/init.d/tinyproxy status. - Брандмауер: Переконайтеся, що ваш брандмауер не блокує з'єднання до порту Tinyproxy. При необхідності тимчасово вимкніть брандмауер для тестування.
- Синтаксис конфігурації: Перегляньте
tinyproxy.confна наявність синтаксичних помилок. Tinyproxy часто не запускається або повідомляє про помилки у своїх журналах, якщо конфігурація неправильна. - Мережеве підключення: Переконайтеся, що сервер Tinyproxy має мережеве підключення до своїх цільових пунктів призначення.