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.).
Читайте также: Лучшие прокси-провайдеры SOCKS5/HTTP/HTTPS
Настройка SOCKS5 через SSH. Создать SOCKS5- прокси довольно просто. Достаточно выполнить команду по следующей схеме:
ssh -f -C2qTnN -D [bind_address:]<порт> <удаленный_пользователь>@<удаленный_сервер>
Например:
sudo ssh -f -C2qTnN -D 1080 roman@8.8.8.8
После введения пароля к удаленному серверу, SSH перейдёт в фоновый режим.
Далее вам следует открыть любой браузер, в котором прописать адрес SOCKS5 прокси в параметрах соединения.
Для браузера Mozilla Firefox повседневные вопросы настройки:
После чего идём на любой сайт для определение IP-адреса и видим не свой IP, а IP удалённого сервера, к которому мы установили SSH - соединение.
Dante - A free SOCKS server — это стабильный SOCKS-прокси с открытым исходным кодом. В этом мануале вы научитесь устанавливать и настраивать SOCKS-прокси Dante на удаленном сервере VPS.
Для запуска SOCKS сервера вам предварительно потребуется купить недорогой VPS и настроить его, например по этому руководству Чек лист по настройке VPS/VDS, выделенного сервера Linux с нуля.
В случае 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 с доступом клиента по логину и паролю.
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
Для подключения можно использовать бесплатные антидетект браузеры с поддержкой SOCKS 5.
Для тестирования можно использовать использовать curl. Данная утилита установлена по умолчанию во всех современных средах Windows, Mac и Linux, поэтому вы можете открыть любую локальную оболочку для ее запуска:
curl -v -x socks5://your_dante_user:your_dante_password@your_server_ip:1080 http://www.google.com/
В репозиториях 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
#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
Всё! Наслаждаемся работой.
#!/bin/bash /opt/dante/sbin/sockd -f /etc/sockd.conf -D
#!/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 }