Автоматическое развертывание SOCKS5-прокси с авторизацией по логин-пароль


Недавно делал одну интересную штуку пля заказчика с фриланс сайта. Ему требовался скрипт который будет автоматически на Ubuntu 16.04 и Ubuntu 18.04 поднимать SOCKS5-прокси с авторизацией по логин пароль (который будет задаваться в этом-же скрипте авторазвертывания).

Автоматическое развертывание SOCKS5-прокси

Фактически вся установка и настройка пустого VPS-сервера должна сводится к авторизации на сервере и выполнении команды:

# wget -O - https://unlock.gita-dev.ru/autodeploy-socks.sh | /bin/sh

Проверку того, что скрипт отработал корректно проводим при помощи CURL-запроса:

$ curl -x socks5h://proxy_user:password123@10.212.11.184:3128 http://mail.ru/

За основу я взял уже готовое решение которое я описывал в статье "Настройка простого SOCKS5-прокси сервера в Debian Linux" и после небольшой доработки напильником мы получаем требуем скрипт автоматизации:

#!/bin/sh

# Environment variables
SOCKS_PORT="3128"
SOCKS_USER="proxy_user"
SOCKS_PASSWORD="password1234"

# Update infrastructure
apt-get update -y
apt-get upgrade -y

# Install packages
apt-get install -y build-essential git tar gzip

# Download and compile sources
cd /usr/src/
git clone https://github.com/z3APA3A/3proxy.git
cd ./3proxy/
make -f Makefile.Linux
cp /usr/src/3proxy/bin/3proxy /usr/local/bin/3proxy

# Create config file
echo "nserver 8.8.8.8" > /etc/3proxy.cfg
echo "nserver 8.8.4.4" >> /etc/3proxy.cfg
echo "nscache 65536" >> /etc/3proxy.cfg
echo "timeouts 1 5 30 60 180 1800 15 60" >> /etc/3proxy.cfg
echo "daemon" >> /etc/3proxy.cfg
echo "log /var/log/3proxy.log D" >> /etc/3proxy.cfg
echo "logformat \"- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T\"" >> /etc/3proxy.cfg
echo "auth strong" >> /etc/3proxy.cfg
echo "users $SOCKS_USER:CL:$SOCKS_PASSWORD" >> /etc/3proxy.cfg
echo "allow proxy_user" >> /etc/3proxy.cfg
echo "socks -p$SOCKS_PORT -a" >> /etc/3proxy.cfg

# Create SystemD Service
echo "[Unit]" > /lib/systemd/system/3proxy.service
echo "Description=3Proxy SOCKS5 Daemon" >> /lib/systemd/system/3proxy.service
echo "Wants=network-online.target" >> /lib/systemd/system/3proxy.service
echo "After=network-online.target" >> /lib/systemd/system/3proxy.service
echo "" >> /lib/systemd/system/3proxy.service
echo "[Service]" >> /lib/systemd/system/3proxy.service
echo "Type=forking" >> /lib/systemd/system/3proxy.service
echo "ExecStart=/usr/local/bin/3proxy /etc/3proxy.cfg" >> /lib/systemd/system/3proxy.service
echo "" >> /lib/systemd/system/3proxy.service
echo "[Install]" >> /lib/systemd/system/3proxy.service
echo "WantedBy=multi-user.target" >> /lib/systemd/system/3proxy.service

# Enable and run 3proxy service
systemctl enable 3proxy
systemctl start 3proxy

Как видите ничего сложно, обычный shell-скрипт автоматизирующий рутинные операции.