Содержание

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

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

Хотя этот протокол разработан достаточно давно, он является относительно новым (по сравнению с 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 прокси, умеет кэшировать данные и может более тщательно фильтровать содержимое передаваемых данных.

Читайте также: Лучшие прокси-провайдеры SOCKS5/HTTP/HTTPS

Если сравнивать прокси HTTP и Socks5, то предпочтительней использовать Socks5. Так как они анонимней, поддерживают больше функций, а также работают с любыми сайтами и программами, поддерживающие соединение через прокси.

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

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

ssh -f -C2qTnN -D [bind_address:]<порт> <удаленный_пользователь>@<удаленный_сервер>

Например:

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

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

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

Для браузера Mozilla Firefox повседневные вопросы настройки:

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

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

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

Dante - A free SOCKS server — это стабильный 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
}

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

systemctl restart danted

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

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

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

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

sudo ufw allow 1080/tcp

Все. Удачи! — Dmytro Yakovenko 2023/07/11

Если возникли ошибки при запуске 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

Если после настройки журнала лога для службы danted вы получаете ошибки, например:

alert: configparsing(): could not (re)open logfile "/var/log/socks.log": Read-only file system

остановите службу и изменить конфигурацию службы запуска демона danted для разрешения записи в директорию /var/log/. Для этого добавьте строку ReadWriteDirectories, это будет выглядить так:

nano /lib/systemd/system/danted.service
...
InaccessibleDirectories=/boot /home /media /mnt /opt /root
ReadOnlyDirectories=/bin /etc /lib -/lib64 /sbin /usr /var
ReadWriteDirectories=/var/log
...

Примените изменения systemd и перезагрузите службу:

systemctl daemon-reload
systemctl restart danted

Проверка подключения через 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: Настройка и оптимизация фаервола Linux). Баг этот известен давно, но так и не был исправлен(how to set up danted (dante-server) SOCKS proxy on Ubuntu 14.04 with authentication).

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 в фаерволе iptables для начинающих: Простое управление брандмауэром с UFW

sudo ufw allow proto tcp from any to any port 1080

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

ufw status
client pass {
       from: 192.168.0.2/32 to: 0.0.0.0/0
       log: connect disconnect iooperation
}

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