Настройка SOCKS сервера

SOCKS - сетевой протокол, который позволяет клиент-серверным приложениям прозрачно использовать сервисы за межсетевыми экранами (фаерволами). SOCKS — это сокращение от "SOCKet Secure". SOCKS не зависит от конкретных протоколов уровня приложений (7-го уровня модели OSI) и базируется на стандарте TCP/IP — протоколе 4-го уровня.

  • Что такое SOCKS proxy server?

Хотя этот протокол разработан достаточно давно, он является относительно новым (по сравнению с HTTP proxy). SOCKS позволяет работать с любыми (версия Socks 4 - с TCP, Socks 5 - с TCP и UDP) протоколами. SOCKS proxy просто передает данные от клиента к серверу, не вникая в содержимое самих данных (поэтому он может работать с HTTP, FTP, SMTP, POP3, NNTP, etc.).

Поскольку SOCKS передает все данные от клиента серверу, ничего не добавляя от себя, то с точки зрения web-сервера socks proxy является клиентом. Поэтому анонимность этого типа proxy-серверов всегда является действительно полной.
HTTP прокси, в отличии от SOCKS прокси, умеет кэшировать данные и может более тщательно фильтровать содержимое передаваемых данных.
Если сравнивать прокси HTTP и Socks5, то предпочтительней использовать Socks5. Так как они анонимней, поддерживают больше функций, а также работают с любыми сайтами и программами, поддерживающие соединение через прокси.

Настройка SOCKS5 через SSH туннель

Настройка SOCKS5 через ssh. Создать SOCKS5- прокси довольно просто. Достаточно выполнить команду по следующей схеме:

ssh -f -C2qTnN -D [bind_address:]<порт> <удаленный_пользователь>@<удаленный_сервер>
  • -f Запросит ssh перейти в фоновый режим только перед выполнением команды.
  • -C Включит сжатие всех данных (включая stdin, stdout, stderr и данные для перенаправленных Х11 и TCP/IP соединений).
  • -2 Принуждает ssh использовать только протокол версии 2.
  • -q Тихий режим. Подавляет все предупреждения и диагностические сообщения. Будут отображены только фатальные ошибки.
  • -T Отменить переназначение терминала.
  • -n Перенаправляет стандартный ввод из /dev/null (фактически, предотвращает чтение из стандартного ввода).
  • -N Не выполнять удаленную команду.
  • -D [локальный IP : ] порт

Например:

sudo ssh -f -C2qTnN -D 1080 roman@8.8.8.8

После введения пароля к удаленному серверу, SSH перейдёт в фоновый режим.

Далее вам следует открыть любой браузер, в котором прописать адрес SOCKS5 прокси в параметрах соединения.

Для браузера firefox:

  1. Идём «Правка» → «Настройки» → вкладка «Дополнительно» → вкладка «Сеть» → раздел «Соединение» → кнопка «Настроить»
  2. Устанавливаем там пункт «Ручная настройка сервиса прокси», в поле «Узел SOCKS» пишем наш IP адрес (обычно 127.0.0.1), а в поле «Порт» — указанный порт (в примере 1080).
  3. Ставим ключ на пункт "SOCKS 5" и применяем настройки.

После чего идём на любой сайт для определение IP-адреса, например: https://dieg.info/ и видим не свой IP, а IP удалённого сервера, к которому мы установили SSH - соединение.

Возможности Dante

Домашняя страница Dante - A free SOCKS server.

Dante — это стабильный SOCKS-прокси с открытым исходным кодом. В этом мануале вы научитесь устанавливать и настраивать SOCKS-прокси Dante на удаленном сервере VPS.

Часть функционала в виде дополнительных модулей платная, например модуль Bandwidth control стоит 400 EUR (евро).

Для запуска SOCKS сервера вам предварительно потребуется купить недорогой VPS и настроить его, например по этому руководству Чек лист по настройке VPS/VDS, выделенного сервера Linux с нуля.

Установка SOCKS сервер Dante в Ubuntu версии 18 и выше

В случае Ubuntu выше 18.04.4 LTS (Ubuntu 20.04.1 LTS Focal, Ubuntu 22.04 LTS Jammy) Dante Server ставится стандартно из репозитория. Предварительно обновим пакеты:

apt update
apt full-upgrade

Посмотрим версию пакета Dante SOCKS сервера в репозиториях

apt search dante-server

dante-server/jammy 1.4.2+dfsg-7build4 amd64
  SOCKS (v4 and v5) proxy daemon (danted)

Установим:

apt install dante-server

Проверим добавился ли Dante в автозагрузку:

systemctl is-enabled danted
enabled

Правим конфигурационный файл /etc/danted.conf (сделайте предварительно бэкапа этого файла). Прописываем параметры в явном виде. Ниже полностью рабочий конфигурационный файл Dante Servera с доступом клиента по логину и паролю.

danted.conf
logoutput: syslog stdout /var/log/sockd.log
#logoutput: stderr
 
internal: ens3 port = 1080
external: ens3
 
socksmethod: username
#socksmethod: username none
 
user.privileged: root
user.unprivileged: nobody
user.libwrap: nobody
 
client pass {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        log: error connect disconnect
}
 
client block {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        log: connect error
}
 
socks pass {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        log: error connect disconnect
}
 
socks block {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        log: connect error
}
  • logoutput определяет, как Dante будет регистрировать подключения (в данном случае это происходит с помощью обычного системного лога).
  • user.privived предоставляет серверу root-права для проверки разрешений
  • user.uncitationd блокирует работу сервера в качестве непривилегированного пользователя (так как в этом нет необходимости, если нет более детализированных разрешений).
  • internal определяет порт, на котором запущен сервис, и IP-адреса, к которым можно подключиться.
  • external определяет сетевой интерфейс для исходящих подключений (это eth0 по умолчанию на большинстве серверов).

Перечитаем конфиг демона

systemctl restart danted

Cервер Dante будет использовать для аутентификации обычные учетные записи пользователей Linux. Это нормально, однако пароль, используемый для этого соединения, будет отправлен в виде простого текста. Потому лучше создать выделенного пользователя SOCKS, у которого не будет никаких других прав в системе

Создадим пользователя, который будет использовать наш SOCKS сервер и добавим его в группу proxy или в ту группу которая указана в параметре user.privileged конфига Dante.

useradd -s /bin/false proxyuser && sudo passwd proxyuser
usermod -aG proxy proxyuser

Разрешим в фаерволе, я использую UFW, порт TCP 1080 для подключения клиентов

sudo ufw allow 1080/tcp

Все. Удачи! — Dmytro Yakovenko 2022/05/12

Если возникли ошибки при запуске Dante. Для того чтобы увидеть подробно причину ошибки нужно запустить демона вручную, командой danted. В моем случае ошибка сразу понятна - не настроен метод аутентификации

# danted
Jul 20 16:13:47 (1595250827.128796) danted[31184]: warning: checkconfig(): no socks authentication methods enabled.  This means all socks requests will be blocked after negotiation.  Perhaps this is not intended?
Jul 20 16:13:47 (1595250827.128892) danted[31184]: error: checkconfig(): no internal address given for server to listen for clients on
Jul 20 16:13:47 (1595250827.128927) danted[31184]: alert: mother[1/1]: shutting down

Проверка подключения через Dante

Для подключения можно использовать бесплатные антидетект браузеры с поддержкой SOCKS 5.

Для тестирования можно использовать использовать curl. Данная утилита установлена по умолчанию во всех современных средах Windows, Mac и Linux, поэтому вы можете открыть любую локальную оболочку для ее запуска:

curl -v -x socks5://your_dante_user:your_dante_password@your_server_ip:1080 http://www.google.com/

Установка SOCKS сервер Dante в Ubuntu версии 14 и 16

В репозиториях Ubuntu 14.04.5 LTS Trusty и Ubuntu 16.04.2 LTS установлена старая версия Dante Server 1.1.19 и к тому же она не может работать с логином и паролем (доступ к прокси можно регулировать только Правила iptables). Баг этот известен давно, но так и не был исправлен(how to set up danted (dante-server) SOCKS proxy on Ubuntu 14.04 with authentication).

  • Инсталляция и настройка SOCKS сервера Dante Server из исходных кодов в Хостинг VPS/VDS на Ubuntu 14.04.5 LTS Trusty в контейнере OpenVZ.
cd /opt
wget http://www.inet.no/dante/files/dante-1.4.2.tar.gz
tar -xvf dante-1.4.2.tar.gz
cd dante-1.4.2/

Компиляция Dante Server. Вначале установим необходимые утилиты и зависимости Dante для компиляции Ubuntu:

aptitude install gcc cc libwrap0 libwrap0-dev libpam0g-dev make

CentOS 6.6:

yum install gcc pam-devel tcp_wrappers-devel
mkdir /opt/dante
./configure --prefix=/opt/dante

К конце будет выведен статус конфигурации

Client:            Enabled
Server:            Enabled
Preloading:        Enabled
Libwrap:           Enabled
BSD Auth:          Disabled, usable bsd_auth.h not found
PAM:               Enabled
GSSAPI:            Not found/disabled
KRB5:              Not found/disabled
SASL:              Not found/disabled
UPNP:              Not found/disabled
Compatability:     issetugid setproctitle strlcpy strvis

                     Modules:

redirect:          Not found
bandwidth:         Not found
ldap:              Not found
make
make install

Проверим запускается ли собранный файл, посмотрим версию сервера:

/opt/dante/sbin/sockd -v
Dante v1.4.2.  Copyright (c) 1997 - 2014 Inferno Nettverk A/S, Norway

Рабочий конфигурационный файл (подставьте свой IP или название сетевого интерфейса). Скачать файл sockd.conf командой

wget -c http://wiki.dieg.info/_export/code/socks?codeblock=10 -O /etc/sockd.conf
sockd.conf
#logoutput: /var/log/socks.log
logoutput: stderr
 
# На каком сетевом интерфейсе и порту обслуживаем socks клиентов
internal: venet0:0 port = 1080
# С какого IP или интерфейса выходим во внешний мир
external: venet0:0
#internal: x.x.x.x port = 1080
#external: x.x.x.x
 
# Используемый метод авторизации клиентов. none - без авторизации.
socksmethod: username
#socksmethod: username none
user.privileged: root
user.notprivileged: nobody
 
client pass {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        log: error connect disconnect
}
 
client block {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        log: connect error
}
 
socks pass {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        log: error connect disconnect
}
 
socks block {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        log: connect error
}

Запуск сервера Dante как сервиса

/opt/dante/sbin/sockd -D

Всё! Наслаждаемся работой.

start.sh
#!/bin/bash
 
/opt/dante/sbin/sockd -f /etc/sockd.conf -D
stop.sh
#!/bin/bash
 
/usr/bin/pkill sockd

Добавим пользователя, который будет пользоваться нашим SOCKS сервером

sudo useradd -s /bin/false proxyuser && sudo passwd proxyuser

Разрешим TCP порт 1080 в фаерволе UFW (Uncomplicated Firewall) настройка

sudo ufw allow proto tcp from any to any port 1080

Вывести все правила ufw можно командой

ufw status
  • Разрешаем клиенту 192.168.0.2 выход через socks.
client pass {
       from: 192.168.0.2/32 to: 0.0.0.0/0
       log: connect disconnect iooperation
}

Альтернативные SOCKS сервера

  • SOCKS сервер 3proxy - это маленький многоплатформенный набор прокси-серверов (под Linux/Unix и Windows, включая 64-битные версии).
  • ss5.sourceforge.net SS5 is a socks server that implements the SOCKS v4 and v5 protocol для CENT OS
eTalk курсы английского языка.