Простая инструкция по установке Tinyproxy

Небольшое введение

Tinyproxy это такой маленький http/https прокси-сервер, на мой взгляд, очень простой в использовании и конфигурировании, вполне подходящий для несложных задач пропускания http(s) трафика. Например в офисе или дома. Лично я использую его, чтоб можно было посещать статистику и личный кабинет собственного провайдера в обход VPN.

Конфигурация network namespace.

Если у вас есть специальный network namespace для прокси, перед установкой сервера настраиваем его (добавляем нужные файлы hosts и resolv.conf, как это описано здесь Копия)

Рестартируем систему (или сетевой менеджер/демон, тут уж зависит от вашей ОС).

Устанавливаем tinyproxy

Для Sclackware можно скачать пакет с исходниками с помощью sbopkg, взять готовый и откомпилированный здесь (Для Slackware 12-14.2), или собрать из исходников на GitHub и готовый пакет установить с помощью installpkg.

Создаем пользователя и группу

1. Создаем группу для proxy-сервера, например proxy:

groupadd proxy

2. Создаем отдельного пользователя для запуска прокси-сервера:
Можно сделать это с помощью скрипта-обертки adduser над программой useradd.
— На первый вопрос вводим имя пользователя, например, provproxy.
— Далее пропускаем (нажимаем enter)
— В ответ на initial group, вводим имя ранее созданной группы для прокси-сервера, в данном случае proxy (в вашем — ту группу, которую создали вы).
— Далее, на вопрос о дополнительных группах, нельзя устанавливать что-либо, нажимаем Enter
— Home directory нужна, там будет лежать PID-файл, логи (если нужно) и конфигурационный файл. По умолчанию директория совпадает с именем пользователя и располагается в подкаталоге /home.
— Shell должна быть установлена строго в /bin/false, поскольку это не интерактивный пользователь. Если скрипт ответил вам: - Warning: /bin/false is not in /etc/shells (potential problem using FTP)
Do you wish to change the shell ? (Y/n)

То отвечаем n, а потом в /etc/shells добавляем строчку
/bin/false
— Expiry date пропускаем (Enter)
— Далее пропускаем всю User Information
— На вопрос о пароле придумываем что-нибудь чтоб прошло.
Далее правим /etc/shadow, находим строчку с именем пользователя и удаляем все, что между первым и вторым двоеточием. Было:
provproxy:$5$S8/tp/ap2wF/K$qaYnfHuR8opsWO0WwTaXCjiHjmge7mWuH5WwEd5Kn70:17888:0:99
Стало: provproxy::17888:0:99
Права на каталог надо установить в 700 (полный доступ для пользователя provproxy):
chmod 700 /home/provproxy

Можно не пользоваться интерактивным скриптом, а сделать все с помощью базовых команд:
1. Добавить пользователя
useradd -g proxy -d /home/provproxy -s /bin/false provproxy

где:
-g proxy группа пользователя (ранее созданная proxy)
-d /home/provproxy домашний каталог пользователя
-s /bin/false — оболочка для пользователя. Обычно здесь прописывается /bin/sh, /bin/bash для интерактивных пользователей, или /bin/false для неинтерактивных, что нам и надо в данном случае.
Строчка /bin/false должна быть в файле /etc/shells — если ее нет, дописать.

2. Создаем домашний каталог:
mkdir /home/provproxy
3. Меняем владельца каталога на пользователя provproxy
chown provproxy:proxy /home/provproxy
4. Меняем права доступа на каталог:
chmod 700 /home/provproxy

Инициализационный скрипт tinyproxy

Был подробно описан в этой заметке: Запускающий скрипт для tinyproxy Копия

Сам скрипт:
— На PasteBin
На GitHub
Скачать с Mega.nz

Поскольку сам инициализационный скрипт описан довольно полно, то я остановлюсь лишь на двух важных моментах.

PID-файл: в скрипте необходимо правильно указать путь к PID-файлу, но об этом поговорим ниже. У меня PID-файл создается в домашнем каталоге пользователя provproxy. Местоположение PID-файла задается в этой строке скрипта. Если надо, не забудьте исправить на свое значение:

PIDFILE="/home/provproxy/tinyproxy.pid"

Команда запуска прокси-сервера:
По умолчанию там просто указан путь к исполняемому файлу tinyproxy:

TINYPROXYCMD="/usr/sbin/tinyproxy"

Но я хочу эту команду немного подправить.

Запуск сервера при старте системы.

При старте системы все обычно запускается от root‘а, а нам не надо совершенно, чтоб под root‘ом крутились всякие там сервера. Не зря же мы отдельного пользователя делали. Дополняем команду:

TINYPROXYCMD="sudo -u provproxy /usr/sbin/tinyproxy"

В таком виде, скрипт, запускаемый при старте из-под root‘а вызовет tinyproxy от имени нужного нам пользователя. Справедливости ради, надо заметить, что tinyproxy, как любой уважающий себя сервер, умеет сам себе понижать права до определенного пользователя, указанного в файле конфигурации. Но на этом остановимся ниже. На мой взгляд, одно другому не мешает, зато так виднее и жестко задано, от какого пользователя стартовать.

Альтернативный файл конфигурации.

По умолчанию tinyproxy ищет свой файл конфигурации в /etc/tinyproxy.conf, но можно задать альтернативный, в домашнем каталоге пользователя. Делается это путем добавления ключа и пути к файлу. Объединю этот вариант с предыдущим:

TINYPROXYCMD="sudo -u provproxy /usr/sbin/tinyproxy -c /home/provproxy/tinyproxy.conf"

Альтернативный конфигурационный файл в домашнем каталоге.

Раз уж началось с альтернативного файла конфигурации, так давайте его сделаем (от root). Копируем файл /etc/tinyproxy.conf в /home/provproxy/tinyproxy.conf

cp /etc/tinyproxy.conf /home/provproxy/tinyproxy.conf

Далее устанавливаем ему владельца (можно перейти в директорию /home/provproxy перед этим, я перешел — пути будут неполные):

chown provproxy:proxy tinyproxy.conf

И права — пользователю provproxy на tinyproxy.conf нужны права только на чтение, ничего он не пишет в конфигурационный файл, и тем более не пытается исполнить.

chmod 400 tinyproxy.conf

Конфигурирование.

Открываем файл от root‘а и настраиваем параметры прокси-сервера.

User nobody
Group nobody

Оставляем так же. Пользователь nobody в изначально правильно сконфигурированной системе, это такая «золушка», которая вообще ничего не может. Когда сервер запустится под пользователем provproxy, он сможет создать PID-файл, прочитать свою конфигурацию и писать логи себе в домашний каталог. Больше ничего. Если изначально система правильно установлена и настроена.

Port 8888

Ставим тут нужный вам порт, значение должно быть больше 1024 (верхние порты можно занять, только будучи root, а мы так не делаем). Можно посмотреть список портов в Википедии и задать какой-нибудь никому не нужный, а потом сообщить вашим клиентам.

Listen

В зависимости от ваших нужд, если не будет раскомментирован, прокси попытается слушать запросы на всех доступных ему IP, поскольку у меня прокси «сидел» на отдельном адресе, то я строчку раскомментировал и нужный прописал.

Bind

Делаем также, как и в предыдущем пункте.

Timeout 600
Таймаут (в секундах). Если сайт не ответил за это время, прокси считает что он сдох, и отправит клиенту (браузеру, например) соответствующий код, типа истек таймаут (не путать с 404 и другими ошибками).

ErrorFile <файл>
...
...
...

HTML-файл, который будет отображен в браузере, если случится определенная ошибка.

DefaultErrorFile "/usr/share/tinyproxy/default.html"

Файл «ошибочной» страницы по умолчанию, рекомендую сделать свой, положить в пользовательский каталог прокси, и поменять права (как на файл конфигурации).

#StatHost "tinyproxy.stats"

Смотреть статистику удаленно, обычно не надо, оставляем закомментированным.

StatFile "/usr/share/tinyproxy/stats.html"

Если предыдущая строчка раскомментирована, то это файл, куда пишется статистика. Можно поменять на домашний каталог (и файл в нем).

LogFile "/var/log/tinyproxy/tinyproxy.log"

Если раскомментировать, то сервер будет вести лог в указанный файл. Можно расположение файла поменять на домашний каталог пользователя, созданного для сервера.

#Syslog On

Сервер будет писать логи в syslog (если раскомментировать).

LogLevel Info

Установка уровня протоколирования (см сам конфигурационный файл, там есть комментарий с пояснением).

#PidFile "/var/run/tinyproxy/tinyproxy.pid"

Местонахождение PID-файла. Нужен для скрипта инициализации, параметр должен быть такой же, как и значение переменной $PIDFILE в скрипте (д.б. раскомментировано и изменено на нужное, в данном случае на /home/provproxy/tinyproxy.pid)

#XTinyproxy Yes

Выдает следующему серверу изначальный IP-адрес (X-Forwarded-For).

MinSpareServers 5
MaxSpareServers 20

Максимальное и минимальное количество процессов, обрабатывающих запросы, для сервера. Чем больше, тем быстрее. Но лучше оставить как есть, если не знаешь, зачем тебе больше — можно засрать память и устроить тормоза.

StartServers 10

Сколько потоков (серверов) запускать при старте.

MaxRequestsPerChild 0

Количество запросов. Луче не менять.

Allow 127.0.0.1
Allow 10.10.12.0/17

Адреса с которых разрешен доступ. Указываем нужные IP и подсети.

AddHeader "X-My-Header" "Powered by Tinyproxy"

Добавление своих заголовков HTTP

ViaProxyName "tinyproxy"

Добавление заголовка via.

Включение /отключение Via-заголовка:

#DisableViaHeader Yes

По умолчанию включен, для отключения надо раскомментировать и написать No, плюс закомментировать строчку #DisableViaHeader Yes.

Далее идет фильтрация URL (настройки Filter…)

Далее идет настройка для анонимного сервера. Если не нужны особые меры безопасности — раскомментирую все 3 строки:

Anonymous "Host"
Anonymous "Authorization"
Anonymous "Cookie"

ConnectPort 443
ConnectPort 563

Порты для SSL.

Дополнительно, для тех, кто не знает. Если строчка закомментирована — сработает значение по умолчанию. Комментарий, это символ # в начале любой строки конфигурационного файла.

Проверка

Прописываем нужный адрес прокси в браузере:

Проверяем соединение:

Вот тут не показывается, что используется прокси, потому что прокси настроен верно — с отключением via и других заголовков, передающих IP-адрес.

Источники

Tinyproxy, краткая инструкция

2 Responses to Простая инструкция по установке Tinyproxy

  1. Pingback: tinyproxy свалился после обновления | Персональный блог Толика Панкова

  2. Pingback: Домашний сервер на базе Slackware Linux | Персональный блог Толика Панкова

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *