установка socks прокси сервера


Судя во всему, скоро заблокируют месседжер Telegram на территории РФ, и поэтому друзья попросили поднять им socks прокси. Telegram как раз недавно запилил поддержку socks протокола.

Я решил, что подниму socks5 сервер с авторизацией. Выбор пал на dante как простой в настройке и с поддержкой авторизации.

Первая проблема была с установкой актуальной версии dante на мой дистрибутив. На сервере на момент написания статьи стоял Debian 7 (wheezy) i386. Дело в том, что версия dante-server, доступная для него, сильно устарела и не поддерживала авторизацию. Минимальная рабочая версия с авторизацией - 1.4.1. Была найдена статья с описанием установки подходящей версии, но в статье были пакеты для архитектуры amd64. Я решил пересобрать пакеты из исходников под нужную мне архитектуру, используя свой же проект: https://github.com/kshcherban/yadeb

Сначала скачал deb src пакет и исходники программы и распаковал их:

mkdir dante-server
cd dante-server
wget http://ppa.launchpad.net/dajhorn/dante/ubuntu/pool/main/d/dante/dante_1.4.1-1.dsc
wget http://ppa.launchpad.net/dajhorn/dante/ubuntu/pool/main/d/dante/dante_1.4.1-1.diff.gz
wget http://ppa.launchpad.net/dajhorn/dante/ubuntu/pool/main/d/dante/dante_1.4.1.orig.tar.gz
dpkg-source -x dante_1.4.1-1.dsc

Потом поменял Dockerfile и build.sh скрипты в yadeb, с указанием нужной архитектуры и дистрибутива:

diff --git a/Dockerfile b/Dockerfile
index 11dea21..88509d6 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM debian:jessie
+FROM i386/debian:7

 ENV DEBEMAIL="test@example.com" \
     DEBFULLNAME="John Doe" \
diff --git a/build.sh b/build.sh
index 10e04e2..90ea2a5 100644
--- a/build.sh
+++ b/build.sh
@@ -45,7 +45,7 @@ if [ $BUILD == "true" ]; then
     apt-get -f -y install
     rm *.deb
     echo "** Building package"
-    dpkg-buildpackage -us -uc -F
+    dpkg-buildpackage -us -uc -F -ai386
 fi
 if [ $COPY == "true" ]; then
     echo "** Copying result files into $SOURCE_PATH"

Теперь собираем пакет:

docker build -t yadeb .
docker run --rm -ti -v `pwd`/dante-src/:/opt/buildroot yadeb build.sh

Получившиеся артефакты установим на сервер:

dpkg -i dante-server_1.4.1-1_i386.deb
dpkg -i libdsocksd0_1.4.1-1_i386.deb
dpkg -i libsocksd0_1.4.1-1_i386.deb

Настроим конфиг dante в /etc/danted.conf

logoutput: syslog
user.privileged: root
user.unprivileged: nobody

# The listening network interface or address.
internal: eth0

# The proxying network interface or address.
external: eth0

# socks-rules determine what is proxied through the external interface.
# The default of "none" permits anonymous access.
socksmethod: username

# client-rules determine who can connect to the internal interface.
# The default of "none" permits anonymous access.
clientmethod: none

client pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    log: connect disconnect error
}

socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    log: connect disconnect error
}

Обратите внимание на настройки internal и external, там нужно указать внешний интерфейс или ip адрес, а также можно сконфигурировать порт, например: internal: 129.12.11.10 port = 1081

internal используется для входящих соединений и рассчитывается на использование в локальных сетях, отсюда и название. В нашем случае обе настройки ведут на внешний сетевой интерфейс.

external — для исходящих соединений.

Также я изменил user.privileged и client|socks pass и socksmethod: username, который нужен для авторизации.

Далеe создадим пользователя, с которым будем авторизоваться:

useradd -s /usr/sbin/nologin -r proxyuser
passwd proxyuser

Запустим dante:

service danted start

Не забудьте проверить, что iptables разрешает входящий трафик на порт прокси.

Проверим настройки с локального компьютера, команда должна показать подробный лог подключения и ip вашего proxy сервера.

curl -v -x socks5://proxyuser:password@example.com:1080 https://ifconfig.co/

Сервер настроен, теперь можно настроить Telegram и передать привет роскомпозору.

comments powered by Disqus