Поднимаем Socks5 proxy
Поднимаем и настраиваем Socks5 proxy на VPS с Centos
Al-Sher
Всем привет. Сегодня я решил поделиться способом поднятия proxy на VPS. В качестве прокси мы будем использовать такой сетевой протокол, как Socks5. В качестве рабочего сервера мы снова будем использовать VPS от Reg.Ru с установленной на нём Centos 7.
Socks5
Для начала давайте поговорим о том, почему же выбор пал именно на Socks, а не, например, на https proxy... Начнем с определения Socks: > SOCKS (сокращение от «SOCKet Secure») — сетевой протокол, который позволяет пересылать пакеты от клиента к серверу через прокси-сервер прозрачно (незаметно для них) и таким образом использовать сервисы за межсетевыми экранами (фаерволами).
Источник: Википедия Получается, что от через Socks, в отличие от http-proxy, мы передаем данные как бы от самого пользователя, то есть не добавляя в них ничего лишнего. Данный вид прокси считается наиболее анонимным, а так же позволяет создавать целые цепочки socks-proxy. Работают Socks'ы через TCP и UDP, то есть используют протоколы транспортного уровня и именно поэтому данный вид proxy считается более анонимным, ведь на пути от клиента до сервера невозможно передать дополнительную информацию, гарантируя стабильную работу. Теперь поговорим немного про разницу между socks4 и socks5... На самом деле, socks5 просто расширяет такой сетевой протокол, как socks4. В нём, из отличительных особенностей, хочется отметить поддержку UDP и ipv6.
Установка
Поднимать Socks5-proxy мы будем используя 3proxy. Давайте подготовим необходимый софт для него:
yum install gcc mc wget nano tar
Загрузим 3proxy с github:
wget https://github.com/z3APA3A/3proxy/archive/0.8.10.tar.gz
Эта версия является последней на момент написания статьи, перед загрузкой лучше проверьте не вышла ли новая версия на Github'e автора. Распакуем скаченные исходники и зайдем в распакованную папку:
tar -xvf 0.8.10.tar.gz
cd 3proxt-0.8.10.tar.gz
Если вдруг вы хотите сделать ваш прокси анонимным, то отредактируем файл src/proxy.h, добавив в него код:
#define ANONYMOUS 1
И компилируем:
make -f Makefile.Linux
Перенесем скомпилированный бинарный файл в /usr/bin:
cp src/3proxy /usr/bin
Настройка 3proxy
Думаю неправильно запускать proxy сервер от root'a... Да и вообще работать от root'a, но сегодня не об этом ? Создадим пользователя, от которого и будем запускать 3proxy:
adduser -r -M 3proxy
Тут мы создаем нового пользователя 3proxy, у которого нет домашнего каталога, а так же он является системны. Узнаем его id:
id 3proxy
В ответ получим что-то похожее на это:
uid=997(3proxy) gid=995(3proxy) groups=995(3proxy)
Давайте создадим файл конфигурации:
mkdir /etc/3proxy
nano /etc/3proxy/3proxy.cfg
Кстати, образец файла конфигурации лежит в cfg/3proxy.cfg.sample. При желании можете изучить его ? Ну а мы остановимся на простенькой конфигурации:
# Запускаем как daemon
daemon
# От пользователя с id 997 и группы 995
setgid 995
setuid 997
# Устанавливаем адреса DNS
nserver 8.8.8.8
nserver 8.8.4.4
# Размер кэша для запросов DNS
nscache 65536
# Таймауты
timeouts 1 5 30 60 180 1800 15 60
# Закрываем внутренний интерфейс
deny * * 127.0.0.1,192.168.1.1
# Разрешаем HTTP, HTTPS и FTP трафик
allow * * * 80-88,8080-8088 HTTP
allow * * * 443,8443 HTTPS
allow * * * 21 FTP
# Указываем на расположение файла с пользователями и паролями
users $/etc/3proxy/.auth
# Или указываем пользователей вручную
# users admin:CL:password
# Создаем логи, если нужны
# log /var/log/3proxy/3proxy.log D
# logformat "L%d-%m-%Y %H:%M:%S %z %N.%p %E %U %C:%c %R:%r %O %I %h %T"
# Сжимаем логи
# archiver gz /usr/bin/gzip %F
# Храним логи 7 дней
# rotate 7
# Включаем авторизацию по логинам и паролям
auth cache strong
# Запускаем socks прокси на 3128 порту
socks -n -p3128 -a
# При наличии ipv6 добавляем и его
# XX.XX.XX.XX - ваш ipv4
# YYYY:YYYY:YYYYY::Y - ваш ipv6
socks -46 -p3128 -a -iXX.XX.XX.XX -eXX.XX.XX.XX -eYYYY:YYYY:YYYYY::Y
Создадим наших пользователей в файле /etc/3proxy/.auth, добавив туда такой код:
user:CL:password
Где user - имя пользователя, а password - его пароль. Не забываем настроить права доступа, а так же создать папку для логов:
mkdir /var/log/3proxy
chown 3proxy:3proxy -R /etc/3proxy
chown 3proxy:3proxy -R /var/log/3proxy
chown 3proxy:3proxy /usr/bin/3proxy
sudo chmod 444 /etc/3proxy/3proxy.cfg
sudo chmod 400 /etc/3proxy/.auth
Автозапуск
Создадим инициализирующий файл /etc/init.d/3proxyinit с таким содержимым:
#!/bin/sh
#
# chkconfig: 2345 20 80
# description: 3proxy tiny proxy server
#
case "$1" in
start)
echo Starting 3Proxy
/usr/bin/3proxy /etc/3proxy/3proxy.cfg
RETVAL=$?
echo
[ $RETVAL ]
;;
stop)
echo Stopping 3Proxy
if [ -f /etc/3proxy/3proxy.pid ]; then
/bin/kill `cat /etc/3proxy/3proxy.pid`
else
/usr/bin/killall 3proxy
fi
RETVAL=$?
echo
[ $RETVAL ]
;;
restart|reload)
echo Reloading 3Proxy
if [ -f /etc/3proxy/3proxy.pid ]; then
/bin/kill -s USR1 `cat /etc/3proxy/3proxy.pid`
else
/usr/bin/killall -s USR1 3proxy
fi
;;
*)
echo Usage: $0 "{start|stop|restart}"
exit 1
esac
exit 0
Делаем файл исполняемый:
chmod +x /etc/init.d/3proxyinit
Добавляем в автозапуск:
chkconfig 3proxyinit on
Откроем порт для iptables:
sudo iptables -I INPUT -p tcp -m tcp --dport 3128 -j ACCEPT
Для Firewalld:
firewall-cmd --permanent --zone=public --add-port=3128/tcp
firewall-cmd --reload
Заключение
Давайте запустим наш proxy:
3proxy /etc/3proxy/3proxy.cfg
Если всё работает нормально, то поздравляю вас с поднятием proxy сервера. Кстати, вот моя скорость через данный прокси: Надеюсь, что у вас всё получилось. Спасибо за внимание ✌