Tinyproxy — это легковесный и минималистичный HTTP/HTTPS прокси-сервер для операционных систем на базе Linux, предназначенный для пересылки веб-трафика с низким потреблением ресурсов.
Что такое Tinyproxy
Tinyproxy разработан для простых сценариев использования, где требуется базовый HTTP/HTTPS прокси-функционал без избыточных возможностей. Он подходит для небольших сетей, локальной разработки, обхода некоторых ограничений доступа или для использования в качестве прокси-сервера "последней мили" в цепочке. Основные преимущества Tinyproxy включают низкое потребление памяти, простоту настройки и высокую производительность для своего класса задач.
Установка Tinyproxy
Установка Tinyproxy выполняется с помощью пакетного менеджера дистрибутива Linux.
Установка на Debian/Ubuntu
sudo apt update
sudo apt install tinyproxy
Установка на CentOS/RHEL/Fedora
sudo yum install epel-release # Для CentOS/RHEL, если EPEL не установлен
sudo yum install tinyproxy
# Или для Fedora
sudo dnf install tinyproxy
После установки Tinyproxy обычно запускается автоматически. Проверить статус сервиса можно командой:
sudo systemctl status tinyproxy
Если сервис не запущен, его можно запустить и добавить в автозагрузку:
sudo systemctl start tinyproxy
sudo systemctl enable tinyproxy
Базовая конфигурация
Основной конфигурационный файл Tinyproxy расположен по пути /etc/tinyproxy/tinyproxy.conf. Все изменения в этом файле требуют перезапуска сервиса Tinyproxy.
sudo nano /etc/tinyproxy/tinyproxy.conf
После изменений:
sudo systemctl restart tinyproxy
Ключевые директивы
Port: Определяет порт, на котором Tinyproxy будет прослушивать входящие соединения. По умолчанию:8888.
Port 8888Allow: Определяет IP-адреса или подсети, которым разрешено использовать прокси. По умолчанию все входящие соединения запрещены. Необходимо добавить хотя быAllow 127.0.0.1для локального доступа илиAllow 0.0.0.0/0для доступа из любой сети (не рекомендуется для публичных серверов).
Allow 127.0.0.1 Allow 192.168.1.0/24Listen: Указывает IP-адрес интерфейса, на котором Tinyproxy будет прослушивать соединения. Если не указан, прослушивает все доступные интерфейсы.
Listen 192.168.1.100Timeout: Устанавливает таймаут простоя соединения в секундах.
Timeout 600UserиGroup: Определяют пользователя и группу, от имени которых будет работать Tinyproxy после запуска. По умолчаниюnobodyиnogroup.
User nobody Group nogroup
Пример минимальной рабочей конфигурации
Предположим, прокси должен работать на порту 8888 и быть доступным только из локальной сети 192.168.1.0/24 и с локального хоста.
# /etc/tinyproxy/tinyproxy.conf
User nobody
Group nogroup
Port 8888
Allow 127.0.0.1
Allow 192.168.1.0/24
# Остальные директивы можно оставить по умолчанию или закомментировать
# Если требуется логирование, убедитесь, что LogFile и PidFile указаны
# LogFile "/var/log/tinyproxy/tinyproxy.log"
# PidFile "/var/run/tinyproxy.pid"
Расширенная конфигурация
Управление производительностью
MaxClients: Максимальное количество одновременно обслуживаемых клиентов.MinSpareServers,MaxSpareServers: Определяют количество незанятых дочерних процессов, ожидающих новых соединений.StartServers: Количество дочерних процессов, запускаемых при старте Tinyproxy.MaxRequestsPerChild: Максимальное количество запросов, которые может обработать дочерний процесс перед перезапуском (для предотвращения утечек памяти).
MaxClients 100
MinSpareServers 5
MaxSpareServers 20
StartServers 10
MaxRequestsPerChild 0 # 0 означает без ограничений
Управление заголовками HTTP
DisableViaHeader: Удаляет заголовокVia, который Tinyproxy добавляет по умолчанию, указывая, что запрос прошел через прокси.
ini DisableViaHeader YesX-Tinyproxy: Добавляет заголовокX-Tinyproxyсо значением, например, IP-адресом клиента.
ini X-Tinyproxy Yes
Фильтрация и контроль доступа
ConnectPort: Разрешает проксировать только соединения на определенные порты для методаCONNECT(используется для HTTPS). По умолчанию разрешены443и563.
ini ConnectPort 443 ConnectPort 80FilterиFilterURLs: Позволяют использовать файл со списком URL-шаблонов для блокировки доступа.
ini Filter "/etc/tinyproxy/filter" FilterURLs Yes # Применяет фильтр к URL, а не к хосту
Пример файла/etc/tinyproxy/filter:
*.badsite.com /ads/Deny: Запрещает доступ с определенных IP-адресов или подсетей. ДирективыAllowиDenyобрабатываются в порядке их следования в файле.
Цепочка прокси-серверов (Upstream)
Tinyproxy может пересылать запросы на другой прокси-сервер.
* Upstream: Указывает вышестоящий прокси-сервер для всех запросов.
ini
Upstream proxy.example.com:8080
* Upstream с условием: Можно указать вышестоящий прокси для определенных доменов или URL.
ini
Upstream ftp ftp.example.com:8080
Upstream socks5 example.com:1080 ".example.com"
Upstream no-cache ".no-cache.example.com"
Поддерживаемые протоколы для Upstream: http, https, socks4, socks5, socks4a, socks5h.
Использование Tinyproxy
После настройки и запуска Tinyproxy, клиенты могут использовать его, указав IP-адрес сервера и порт Tinyproxy в настройках прокси своей операционной системы или браузера.
Например, для 192.168.1.100 на порту 8888:
* HTTP Proxy: 192.168.1.100:8888
* HTTPS Proxy: 192.168.1.100:8888 (Tinyproxy работает как HTTP Connect прокси для HTTPS)
Безопасность
Конфигурация безопасности Tinyproxy включает несколько ключевых аспектов:
- Сетевой экран (Firewall): Ограничьте доступ к порту Tinyproxy только для доверенных IP-адресов или подсетей.
- UFW (Ubuntu/Debian):
bash sudo ufw allow from 192.168.1.0/24 to any port 8888 sudo ufw enable - Firewalld (CentOS/RHEL/Fedora):
bash sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="8888" protocol="tcp" accept' sudo firewall-cmd --reload
- UFW (Ubuntu/Debian):
- Директива
Allow: В файлеtinyproxy.confиспользуйте директивуAllowдля явного указания разрешенных IP-адресов. Никогда не используйтеAllow 0.0.0.0/0без строгого контроля на уровне сетевого экрана. - Запуск от непривилегированного пользователя: Tinyproxy по умолчанию работает от имени пользователя
nobodyи группыnogroup. Это снижает потенциальный ущерб в случае компрометации прокси. - Обновления: Регулярно обновляйте пакет Tinyproxy, чтобы получать исправления безопасности.
Мониторинг и логирование
Tinyproxy ведет логи в файл, указанный директивой LogFile. По умолчанию это /var/log/tinyproxy/tinyproxy.log.
Пример записи в логе:
[20/Oct/2023:10:30:05 +0300] "GET http://example.com/ HTTP/1.1" 200 1256 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
Формат логов аналогичен формату Apache combined log format, что позволяет использовать стандартные инструменты анализа логов.
Сравнение с альтернативами
Tinyproxy часто сравнивают с более функциональными прокси-серверами.
| Характеристика | Tinyproxy | Squid | Nginx (как прокси) |
|---|---|---|---|
| Тип | HTTP/HTTPS (CONNECT) Forward Proxy | HTTP/HTTPS (CONNECT) Forward/Reverse Proxy, Caching | HTTP/HTTPS Reverse Proxy, (Forward Proxy с модулями) |
| Сложность настройки | Низкая | Средняя/Высокая | Средняя/Высокая |
| Потребление ресурсов | Очень низкое (CPU, RAM) | Среднее/Высокое | Низкое/Среднее |
| Кэширование | Нет (ограниченное, только в памяти) | Расширенное, на диске | Возможно с модулями |
| Аутентификация | Только по IP-адресам (Allow/Deny) | Различные методы (Basic, Digest, NTLM, LDAP) | Различные методы (Basic, Digest, LDAP) |
| Фильтрация URL | Базовая (по файлу со списком) | Расширенная (ACL, регексы) | Расширенная (регексы, модули) |
| SSL/TLS Termination | Нет (только CONNECT) | Да | Да |
| Основное назначение | Простой прокси, локальная разработка, обход ограничений | Корпоративный прокси, кэширование, безопасность | Балансировка нагрузки, веб-сервер, обратный прокси |
Tinyproxy оптимален для задач, где не требуется сложное кэширование, аутентификация пользователей или глубокая инспекция трафика, а приоритет отдается минимальному потреблению ресурсов и простоте.
Устранение неполадок
При возникновении проблем с Tinyproxy, выполните следующие шаги:
- Проверка статуса сервиса:
bash sudo systemctl status tinyproxy
Убедитесь, что сервис запущен и не содержит ошибок. - Проверка логов:
bash sudo tail -f /var/log/tinyproxy/tinyproxy.log
Ищите сообщения об ошибках или предупреждениях, которые могут указывать на проблему. - Проверка конфигурации:
- Убедитесь, что
Portкорректно указан и не занят другим процессом. - Проверьте директивы
AllowиDeny. Возможно, ваш IP-адрес заблокирован. - Убедитесь, что
Listenуказан правильно, если вы не прослушиваете все интерфейсы.
- Убедитесь, что
- Проверка сетевого экрана:
Убедитесь, что порт Tinyproxy открыт в файрволе для нужных IP-адресов.
bash sudo ufw status # Для UFW sudo firewall-cmd --list-all # Для Firewalld - Тестирование локально: Попробуйте использовать прокси с того же сервера, где он установлен (например, с
curl).
bash curl -x http://127.0.0.1:8888 http://example.com/
Если это работает, но удаленный доступ нет, проблема, вероятно, в сетевом экране или директивахAllow/Listen. - Права доступа: Убедитесь, что пользователь
nobody(или указанный вUser) имеет права на чтение конфигурационного файла и запись в лог-файл.