Hetzner Online Community

3: подключение через dante

Чтобы продемонстрировать работу сервера Dante, мы обратимся к программе командной строки под названием curl – она часто используется для выполнения различных типов веб-запросов. В общем, если вы хотите проверить, сработает ли данное соединение в браузере, всегда тестируйте его с помощью curl.

Authentication methods

clientmethod: none
socksmethod: none

Full minimal template

Combining the elements discussed above results in the following
server configuration, which should be placed in a file readable by the
server, typically as /etc/sockd.conf.

Interaction with libwrap

If compiled with libwrap, it is possible to use several of the
operations provided by the libwrap library, such as access control
based on /etc/hosts.allow. This is covered in more detail
in the libwrap page.

Logging

errorlog: /var/log/sockd.errlog
logoutput: /var/log/sockd.log
#debug: 2

These statements control the logs generated by the server, with
logoutput specifying the file that the logs are written to.
It is alternatively possible to send log output via syslog,
or stdin/stdout.

The access rules later in the configuration file include additional
log statements that can be used to provide more information
on specific actions performed by the server.

Prerequisites

To complete this guide, you will need:

You will use the domain name your_domain in this tutorial, but you should substitute this with your own domain name, or IP address.

Server address specification

internal: 192.0.2.1 port = 1080
external: eth1

The internal and external keywords are used to
specify the addresses that the server should bind to. Each argument
can be an IP address, an interface name, or a hostname. The server
receives SOCKS requests from SOCKS clients on the internal
address, and uses the external interface when forwarding data
from the SOCKS clients to the external network.

The internal and external server addresses might be different if
the SOCKS server is running on a gateway machine with two different
interfaces, but they can also have the same address.

The port number that the server accepts SOCKS requests on can be
changed, but 1080 is the standard SOCKS port number.

Start the service

Open the port on the firewall:

# firewall-cmd --zone=public --add-port=1313/tcp --permanent
# firewall-cmd --reload

And start the service:

# systemctl start sockd
# systemctl status sockd

Sock server works:

Step 1.1 – install from apt

When the installation is complete, you will see that Danted has encountered an error, because it has not been configured yet.

Check Dante Version :

Please note: when installing Dante using apt on Debian 9 and Ubuntu 18.04 there are differences in versions. In Debian 9 the Dante version of 1.4.1 is different from Ubuntu 18.04 which is 1.4.2. Full details about release information are HERE.

Step 1.2 – install from source (optional)

If you want to install the latest version, please follow the tutorial below. Make sure to delete dante if it’s already installed.

In this tutorial, we use the Dante version 1.4.2 (Download Pages)

Check Dante version :

You have successfully installed Dante from sources. Now, We have to make daemons danted on linux systems.

Copy and paste the configuration below:

Give access to Danted daemon:

Now you can start / stop danted services with the installed version using apt:

Похожее:  Быстрая и простая настройка samba. Настройка файлового сервера в локальной сети на Windows/Linux

Step 2.1 – internet interface

We must check the server interface, in the example below, the server uses the eth0 interface.

Step 2.2 – dante configuration

Before we change the configuration, we must make a backup configuration file, because in the configuration file there is information about the functions of each configuration line.

Then we edit the Danted configuration:

Copy and paste the configuration below:

Configuration Notes

Start and check if Danted is running normally:

Step 2.3 – dante socks5 test

Example output of the command:

If when doing a test it turns out that it failed, you can check the log is Danted on /var/log/socks.log

Step 3 — connecting through dante

In order to demonstrate your Dante server, you’ll use a command line program called curl, which is popular for making different types of web requests. In general, if you want to verify whether a given connection should be working in a browser under ideal circumstances, you should always test first with curl.

Step 3.2 – limit by ip address

In the previous danted configuration, we gave public access to all IPs to connect to our proxy server. In this step, we will limit access to only one or several IPs.

Edit Danted Configuration on /etc/danted.conf, and change this section:

  • 203.0.113.1/32 is the single IP you want to allow access to your proxy server.

If you want to add another single IP again, just repeat the configuration.

Save and restart using systemctl restart danted.

Автозапуск сервера

Напишем скрипт который будет запускать сервер при загрузке системы. Скрипт должен располагаться в каталоге /etc/init.d/ и называться sockd.

nano /etc/init.d/sockd

Содержимое скрипта sockd.

Конфигурационный файл сервера

Напишем минимальный конфигурационный файл. Он должен находиться в каталоге /etc и называться sockd.conf.

nano /etc/sockd.conf

Подробный разбор всех опций конфигурационного файла приводится на странице описывающей конфигурацию сервера. Я приведу минимальную конфигурацию которая работает везде.

Содержимое конфигурационного файла.

Требования

Для выполнения этого руководства вам потребуется:

Установка dante

Поскольку Dante будет собираться из исходников, то прежде установим необходимый для сборки набор софта и библиотек.

apt-get install -y autoconf automake libtool pkg-config checkinstall libwrap0 libwrap0-dev libpam0g-dev

Создадим каталог для дальнейшей работы и сразу перейдем в него.

mkdir dante && cd ~/dante

Скачиваем исходники последней версии Dante с официального сайта.

Установка и использование dante в качестве сервера socks5 на ubuntu 16 – weril

Множество вариантов проще описанного ниже – деплой своего прокси/VPN сервера это вариант не для простых пользователей.

В свете огромной вероятности блокировки telegram в ближайшее время возник вопрос в установке и использовании Dante в качестве сервера Socks5 на Ubuntu 16.

Большая часть инфы нагло взята из офф. доки и отсюда.

Не забываем про теорию

Proxy – может использоваться по разному, например для логгирования клиентских запросов в компании, ограничения доступа (хех) или наоборот, обхода ограничения, блокировки определенного контента.

Reverse proxy –  может использоваться для отказоустойчивости/балансировки/кеширования перед backend web-серверами или для доступа во внутренние ресурсы без использования VPN (часто используемый подход для доступа в интранет – в том числе с авторизацией по паролю/сертификату/токену на этом сервере). Поддерживается всеми крупными проектами – nginx, haproxy, apache. Ставится reverse proxy обычно между двумя firewall (ну или по крайней мере после вашего единственного или можно router on a stick).

Похожее:  Авторизация в SQUID через Active Directory — Реальные заметки Ubuntu & Mikrotik

Ставим

Cтавим из пакета т.к. в репозитории старая версия, которая плохо работает при необходимости авторизации (подробнее в ссылке выше).

wget http://ppa.launchpad.net/dajhorn/dante/ubuntu/pool/main/d/dante/dante-server_1.4.1-1_amd64.debsudo apt-get install gdebi-coresudo gdebi dante-server_1.4.1-1_amd64.deb

Базово настраиваем

vi /etc/danted.conf
# /etc/danted.conflogoutput: sysloguser.privileged: rootuser.unprivileged: nobody# The listening network interface or address.internal: 0.0.0.0 port=3321
internal: 0.0.0.0 port=1080 # можно указать несколько портов, по умолчанию 1080# 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: noneclient 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}

Создаем пользователя

adduser testuser

Включаем сервис, добавляем в автозагрузку

service danted start
service danted enable

Немного о авторизации

Методы:

Apr 13 18:18:11 ip-172-31-17-248 danted[5997]: info: pass(1): tcp/accept [: 111.215.123.135.45629 0.0.0.0.33231Apr 13 18:18:12 ip-172-31-17-248 danted[5997]: warning: passwordcheck(): Strange. This should not happen: system password crypt(3) failed for user "testuser": Invalid argument
  • socksmethod: pam – по радиусу.

Если нужно сделать разные методы авторизации в зависимости от сети (например, всем ходить с паролями, а откуда то можно подключаться без авторизации), то для начала нужно указать в перечне используемых методов авторизации все, иначе будет ругаться.

socksmethod: username none

Apr 26 13:19:39 ip-172-31-17-248 danted[12152]: error: /etc/danted.conf: problem on line 29 near token "}": method "none" is set in the rule, but not in the global socksmethod sApr 26 13:19:39 ip-172-31-17-248 danted[12152]: alert: mother[1/1]: shutting downApr 26 13:19:39 ip-172-31-17-248 danted[12147]: Starting Dante SOCKS daemon:Apr 26 13:19:39 ip-172-31-17-248 systemd[1]: danted.service: Control process exited, code=exited status=1Apr 26 13:19:39 ip-172-31-17-248 systemd[1]: Failed to start LSB: SOCKS (v4 and v5) proxy daemon (danted).

Далее в конкретном правиле socks указать используемый тип.

socks pass {
 from: 85.20.101.72/32 to: 0.0.0.0/0
 log: connect disconnect error
 socksmethod: none
}

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

bandwidth

Описание работы и ограничение в офиц. доке

Проблема в том, что функционал лицензируемый (400$) и dante сервис не запустится без лицензии.

Можно сделать ограничение через wondershaper, trickle или tc.

Ограничение использованием только для Telegram

Обычно делают (1,2) через правила разрешения/запрещения типа ниже:

pass { from: 0.0.0.0/0 to: 91.108.4.0/22 }
pass { from: 0.0.0.0/0 to: 91.108.8.0/22 }
pass { from: 0.0.0.0/0 to: 91.108.12.0/22 }
pass { from: 0.0.0.0/0 to: 91.108.16.0/22 }
pass { from: 0.0.0.0/0 to: 91.108.20.0/22 }
pass { from: 0.0.0.0/0 to: 91.108.36.0/23 }
pass { from: 0.0.0.0/0 to: 91.108.38.0/23 }
pass { from: 0.0.0.0/0 to: 91.108.56.0/22 }
pass { from: 0.0.0.0/0 to: 109.239.140.0/24 }
pass { from: 0.0.0.0/0 to: 149.154.172.0/22 }
pass { from: 0.0.0.0/0 to: 149.154.160.0/22 }
pass { from: 0.0.0.0/0 to: 149.154.162.0/22 }
pass { from: 0.0.0.0/0 to: 149.154.164.0/22 }
pass { from: 0.0.0.0/0 to: 149.154.168.0/22 }
pass { from: 0.0.0.0/0 to: 149.154.172.0/22 }
pass { from: 0.0.0.0/0 to: 149.154.172.0/22 }
block { from: 0.0.0.0/0 to: 0.0.0.0/0 } # не обязательно, по умолчанию если клиент не подпадает ни под одно из rules pass он блокируется

Но мне такой способ не нравится т.к. IP для русских пользователей мигрируют. Лучше указать помимо IP домены telegram, как сделали тут:

# AS62041
socks pass { from: 0.0.0.0/0 to: 149.154.160.0/20 }
socks pass { from: 0.0.0.0/0 to: 149.154.164.0/22 }
socks pass { from: 0.0.0.0/0 to: 91.108.4.0/22 }
socks pass { from: 0.0.0.0/0 to: 91.108.8.0/22 }
socks pass { from: 0.0.0.0/0 to: 91.108.56.0/22 }
socks pass { from: ::/0 to: 2001:67c:4e8::/48 }

# AS44907
socks pass { from: 0.0.0.0/0 to: 91.108.20.0/22 }
socks pass { from: 0.0.0.0/0 to: 91.108.36.0/23 }
socks pass { from: 0.0.0.0/0 to: 91.108.38.0/23 }
socks pass { from: ::/0 to: 2001:b28:f23c::/48 }

# AS62022
socks pass { from: 0.0.0.0/0 to: 149.154.168.0/22 }
socks pass { from: 0.0.0.0/0 to: 91.108.16.0/22 }
socks pass { from: 0.0.0.0/0 to: 91.108.56.0/23 }
socks pass { from: ::/0 to: 2001:b28:f23f::/48 }

# AS59930
socks pass { from: 0.0.0.0/0 to: 149.154.172.0/22 }
socks pass { from: 0.0.0.0/0 to: 91.108.12.0/22 }
socks pass { from: ::/0 to: 2001:b28:f23d::/48 }

# Other
socks pass { from: 0.0.0.0/0 to: 149.154.167.0/22 }
socks pass { from: 0.0.0.0/0 to: 149.154.174.0/22 }

socks pass { from: 0.0.0.0/0 to: .telegram.org }
socks pass { from: 0.0.0.0/0 to: .stel.com }
socks pass { from: 0.0.0.0/0 to: .t.me }
socks pass { from: 0.0.0.0/0 to: .telegram.me }
socks pass { from: 0.0.0.0/0 to: .telegram.dog }
socks pass { from: 0.0.0.0/0 to: .telegra.ph }

Если при этом хотим сохранить авторизацию и логгирование добавить в последнюю строку “explicit deny” с логгированием – нам поможет sh-скрипт на вышестоящий список в файле <file>:

cat <file> | while read str; do echo $str; done | grep from | awk '{print $4,$5,$6,$7}' | while read range; do echo "socks pass {"; echo " $range"; echo " log: connect disconnect error"; echo " socksmethod: username"; echo "}"; done ; echo "socks block {"; echo " from: 0.0.0.0/0 to: 0.0.0.0/0"; echo " log: connect disconnect error"; echo " socksmethod: username"; echo "}"

Так же для работы звонков т.к. они p2p понадобится разрешение UDP, но я не стал:

socks pass {
 from: 0.0.0.0/0 to: 0.0.0.0/0
 command: udpreply
 log: connect disconnect error
 socksmethod: username
}

Проверка работы

Похожее:  Инфошкола новокузнецк личный кабинет

Проще всего проверить работу PROXY можно через curl. Аналогично проверяем если сделали ограничение работы только на определенные IP (telegram) – должно отбивать Can’t complete SOCKS5 connection при попытке подключения на IP, отсутствующие в разрешении.

curl -v -x socks5://11.146.29.66:33231 http://www.google.com/ # Без авторизации

curl -v -x socks5://testuser:testuser@11.146.29.66:33231 http://www.google.com/ # С авторизацией

Логи

Последние можно посмотреть в статусе сервиса

sudo service danted status

Все логи можно посмотреть тут /var/log/syslog (определяется переменной logoutput в конфиге):

Apr 13 18:54:03 ip-172-31-17-248 danted[5579]: info: pass(1): tcp/accept ]: 684 -> 188.215.163.135.45717 0.0.0.0.33231 -> 322: local client closed. Session duration: 40s
Apr 13 18:54:08 ip-172-31-17-248 danted[5579]: info: pass(1): tcp/connect ]: 267 -> username%testuser@128.61.117.217.57802 0.0.0.0.33231 -> 443, 443 -> 172.31.17.248.57802 119.153.163.2.443 -> 267: remote peer closed. Session duration: 769s

Количество сессий можно посмотреть через netstat фильтром по порту:

netstat -na | grep ":33231" | awk '{print $5}' | awk -F':' '{print $1}' | sort -u | wc -l

Смотрим откуда они подключены:

netstat -na | grep ":33231" | awk '{print $5}' | awk -F':' '{print $1}' | sort -u | while read ip; do echo $ip; whois $ip | grep address:; done >res.txt

Conclusion

In this tutorial, you learned to deploy a popular, open-source API endpoint for proxying traffic with little to no overhead. Many applications have built-in proxy support (often at the OS level) going back decades, making this proxy stack highly reusable.

Заключение

Вы узнали, как развернуть популярную конечную точку API с открытым исходным кодом для проксирования трафика практически без дополнительных настроек. Многие приложения имеют встроенную поддержку прокси-сервера (часто на уровне ОС).

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector