Tinyproxy – это легкий, но мощный HTTP-прокси с открытым исходным кодом, который можно использовать как в качестве прямого (исходящего), так и обратного (входящего) HTTP-прокси.
Одной из главных особенностей является использование фильтров, которые могут служить в качестве списка разрешенных или заблокированных доменов.
Чтобы правильно контролировать Tinyproxy (используемый в качестве прямого прокси), необходимо обратить внимание на несколько вещей.
🛡️ Как использовать обратный прокси Nginx для ограничения внешних вызовов внутри веб-браузера
Проверка HTTP через прокси
Давайте начнем с самой важной проверки: Фактическая проверка HTTP, которая проходит через форвардный прокси, создавая исходящее HTTP-соединение с местом назначения.
К счастью, плагин мониторинга check_http, который входит в пакет monitoring-plugins на Debian и Ubuntu и в пакет nagios-plugins на RedHat и производных, позволяет использовать прокси.
Хитрость заключается в изменении метода запроса (параметр -j).
Вместо более распространенного метода GET или POST здесь используется метод CONNECT.
-j, –method=STRING (for example: HEAD, OPTIONS, TRACE, PUT, DELETE, CONNECT, CONNECT:POST)
Set HTTP method.
Вывод –help для check_http должен даже показать реальный пример использования check_http с прокси:
CHECK SSL WEBSERVER CONTENT VIA PROXY USING HTTP 1.1 CONNECT:
check_http -I 192.168.100.35 -p 80 -u https://www.verisign.com/ -S -j CONNECT -H www.verisign.com
all these options are needed: -I <proxy> -p <proxy-port> -u <check-url> -S(sl) -j CONNECT -H <webserver>
Для мониторинга собственного через Proxy:
В данной ситуации Tinyproxy прослушивает 127.0.0.1:8888.
Использование check_http полезно для добавления этой автоматической проверки в программу мониторинга, такую как Nagios или Icinga.
В качестве альтернативы (вручную) можно использовать curl, чтобы быстро проверить, работает ли HTTP-запрос через прокси. Из man-страницы curl:
-x, –proxy [protocol://]host[:port] Use the specified proxy.
The proxy string can be specified with a protocol:// prefix. No protocol specified or http:// will be
treated as HTTP proxy. Use socks4://, socks4a://, socks5:// or socks5h:// to request a specific SOCKS
version to be used. (The protocol support was added in curl 7.21.7)HTTPS proxy support via https:// protocol prefix was added in 7.52.0 for OpenSSL, GnuTLS and NSS.
В следующем примере мы используем curl через Tinyproxy (опять же, слушая 127.0.0.1:8888) и отправляю запрос HEAD (-I) в свой блог:
Последим за логами
Лог-файл Tinyproxy (по умолчанию находится в /var/log/tinyproxy/tinyproxy.log) содержит важную информацию о соединениях.
Он также показывает, был ли заблокирован (отфильтрован) целевой домен.
По умолчанию в журнале не отображается много информации, только при установке уровня LogLevel не ниже NOTICE можно увидеть важные события журнала.
Если Tinyproxy испытывает большую нагрузку (много одновременных соединений), может потребоваться увеличить количество одновременных серверов Tinyproxy (дочерних процессов) или увеличить количество одновременных соединений.
Записи в логах, такие как «Ожидающие серверы» или подобные, являются такими событиями в журнале.
Причина также может заключаться в том, что многие HTTP-запросы в данный момент выполняются с задержкой (медленный сайт назначения) и заставляют серверы «зависнуть», пока не будет достигнут тайм-аут Tinyproxy (по умолчанию 300 с).
Внутренняя (лайв) статистика Tinyproxy
Tinyproxy также поставляется с собственным сайтом статистики.
Конфигурационный файл дает подсказку:
StatHost – это «внутренний поддельный DNS», который указывает Tinyproxy отображать внутреннюю HTTP-страницу, содержащую статистику в реальном времени. Эта статистика содержит:
- Количество открытых соединений (лайв значение)
- Количество запросов (счетчик с момента последнего запуска)
- Количество неудачных соединений (счетчик с момента последнего запуска)
- Количество отклонённых соединений (счётчик с момента последнего запуска)
- Количество отклонённых соединений из-за высокой нагрузки (счётчик с момента последнего запуска)
Статистику можно получить, сделав HTTP запрос к Tinyproxy (например, через веб-сервер) и запросив домен, настроенный в StatHost (по умолчанию: tinyproxy.stats):
Как видно из вывода, это HTML-вывод, содержащий таблицы и красиво отформатированные для человеческого глаза столбцы.
Если вы хотите (автоматически) разобрать этот вывод, то лучше использовать вывод в формате JSON.
Но этот HTML-вывод может быть изменен. Шаблон, который будет использоваться, можно задать в конфигурации Tinyproxy с помощью опции StatFile.
Скопировав и изменив существующий шаблон, вы можете легко создать более удобный для разбора вывод, например JSON. Обратите внимание, что для того, чтобы «обмануть Tinyproxy», начальные фигурные скобки должны быть установлены дважды (Tinyproxy использует фигурные скобки для определения внутренних переменных):
Этот новый шаблон (stats-json.html) теперь может быть определен в конфигурации Tinyproxy:
И после очередной перезагрузки (/etc/init.d/tinyproxy reload работает, systemctl reload tinyproxy – нет на Debian Bullseye), HTTP-статистика может быть получена в формате JSON:
А с помощью парсера JSON это можно отобразить удобнее:
Подобный вывод теперь можно добавить в программу мониторинга, например, с помощью плагина для мониторинга check_json или другого.
см. также: