WebWost WebWostbeta

Поднимаем 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 сервера. Кстати, вот моя скорость через данный прокси: SpeedTest Надеюсь, что у вас всё получилось. Спасибо за внимание ✌

0 комментариев

Новый комментарий