Уже достаточно давно в репозиториях Ubuntu / Debian не содержится обновленных пакетов прокси-сервера Tinyproxy. Последняя версия, доступная для установки — 1.8.4, датируется 2016 годом. В то время как в версии 1.10 произошли существенные изменения — переработана система тредов и поддержки соединений, а также появилась поддержка Basic аутентификации (к сожалению, только для 1 пользователя), появилась поддержка socks5 upstream.
Последнюю актуальную версию 1.11 от 2022 года можно установить только из исходников на GIthub. Для упрощения этой задачи и возможности менеджмента tinyproxy как сервиса, я предлагаю скрипт установки. Он не универсальный, но отлично отражает суть процесса установки и конфигурации.
Прилагаемый мной скрипт протестирован на CentOS Linux 7 и Ubuntu 18.04 с небольшим отличием в группе, используемой для задания прав группе и используемых пакетах.
Обратите внимание на комментарии к коде — по ним вы сможете изменить необходимое под себя.
#!/bin/bash
if [ -f /etc/os-release ]; then
. /etc/os-release
if [ "$ID" = "centos" ]; then
echo "CentOS detected"
OS="centos"
elif [ "$ID" = "ubuntu" ]; then
echo "Ubuntu detected"
OS="ubuntu"
else
echo "Not supported OS"
fi
fi
if [ "$OS" = "ubuntu" ]; then
apt-get install -y build-essential autoconf gcc make
GROUP="nogroup"
elif [ "$OS" = "centos" ]; then
yum install -y gcc-c++ autoconf make wget
GROUP="nobody"
fi
wget https://github.com/tinyproxy/tinyproxy/releases/download/1.11.1/tinyproxy-1.11.1.tar.gz
tar -xvzf tinyproxy-1.11.1.tar.gz
pushd tinyproxy-1.11.1/
./configure
make
make install
mkdir -p '/usr/local/bin'
install -c tinyproxy '/usr/local/bin'
popd
pushd tinyproxy-1.11.1/etc
mkdir -p '/usr/local/etc/tinyproxy'
install -c -m 644 tinyproxy.conf '/usr/local/etc/tinyproxy'
popd
pushd tinyproxy-1.11.1/data/templates/
mkdir -p '/usr/local/share/tinyproxy'
install -c -m 644 debug.html default.html stats.html '/usr/local/share/tinyproxy'
popd
pushd tinyproxy-1.11.1/docs/
mkdir -p '/usr/local/share/man/man5'
install -c -m 644 man5/tinyproxy.conf.5 '/usr/local/share/man/man5'
mkdir -p '/usr/local/share/man/man8'
install -c -m 644 man8/tinyproxy.8 '/usr/local/share/man/man8'
popd
ln -s /usr/local/etc/tinyproxy /etc/
popd
cat > /lib/systemd/system/tinyproxy.service << EOL
[Unit]
Description=tinyproxy service
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=nobody
Group=$GROUP
ExecStart=/usr/local/bin/tinyproxy -d -c /etc/tinyproxy/tinyproxy.conf
[Install]
WantedBy=multi-user.target
EOL
mkdir -p /var/run/tinyproxy/
mkdir -p /var/log/tinyproxy/
chown -R nobody:$GROUP /var/run/tinyproxy/
chown -R nobody:$GROUP /var/log/tinyproxy/
# Включаем запись лога в файл. Если не требуется - закомментировать
sed -i 's/#LogFile "\/usr\/local\/var\/log\/tinyproxy\/tinyproxy.log"/LogFile "\/var\/log\/tinyproxy\/tinyproxy.log"/' /etc/tinyproxy/tinyproxy.conf
sed -i 's/#PidFile "\/usr\/local\/var\/run\/tinyproxy\/tinyproxy.log"/LogFile "\/var\/run\/tinyproxy\/tinyproxy.pid"/' /etc/tinyproxy/tinyproxy.conf
# Ставим уровень логирования, который показывает только соединения и ошибки.
sed -i 's/LogLevel Info/LogLevel Connect/' /etc/tinyproxy/tinyproxy.conf
# Разрешаем доступ с любого IP. По умолчанию - только с хоста самого прокси. Добавьте Allow IP или ваш Subnet, если требуется
sed -i 's/Allow 127.0.0.1/#Allow 127.0.0.1/' /etc/tinyproxy/tinyproxy.conf
sed -i 's/Allow ::1/#Allow ::1/' /etc/tinyproxy/tinyproxy.conf
# Меняем порт на 7878, как менее часто используемый для совместимости
sed -i 's/Port 8888/Port 7878/' /etc/tinyproxy/tinyproxy.conf
systemctl enable tinyproxy.service
systemctl start tinyproxy.service
systemctl status tinyproxy.service
netstat -tulpn | grep 7878
echo "Tinyproxy installed and service started"