Как установить и настроить прокси-сервер Dante Socks5 в Debian / Ubuntu

Введение

В этом руководстве объясняется, как установить и настроить Dante Socks5 Proxy в Debian / Ubuntu. Перед началом установки вы должны выполнить следующие условия:
Предпосылки
  • Сервер с операционной системой Linux:
    • Debian 9
    • Ubuntu 18.04
  • Корневой доступ
  • SSH Инструменты

Шаг 1 - Установите Dante

Шаг 1.1 - установка из APT

apt update

// Debian 9
apt install dante-server

// Ubuntu 18.04
apt install dante-server
Когда установка будет завершена, вы увидите, что Danted обнаружил ошибку, поскольку она еще не настроена.
Проверьте версию Dante:
// Debian 9
root@your_host:~# danted -v
Dante v1.4.1

// Ubuntu 18.04
root@your_host:~# danted -v
Dante v1.4.2
Обратите внимание: при установке Dante с использованием apt в Debian 9 и Ubuntu 18.04 существуют различия в версиях. В Debian 9 версия 1.4.1 Dante отличается от версии Ubuntu 18.04, которая является 1.4.2. Полная информация о выпуске информации ЗДЕСЬ .

Шаг 1.2 - Установка из источника (необязательно)

Если вы хотите установить последнюю версию, следуйте инструкциям ниже. Обязательно удалите dante, если он уже установлен.
В этом уроке мы используем Dante версии 1.4.2 (страницы загрузки)
apt update
apt install build-essential gcc make
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
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --disable-client --without-libwrap --without-bsdauth --without-gssapi --without-krb5 --without-upnp --without-pam
make
make install
Проверьте версию Dante:
root@your_host:~# /usr/sbin/sockd -v
Dante v1.4.2
Вы успешно установили Dante из источников. Теперь нам нужно создавать демоны, использующиеся в системах Linux.
nano /etc/init.d/danted
Скопируйте и вставьте конфигурацию ниже:
#! /bin/sh
### BEGIN INIT INFO
# Provides:          danted
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: SOCKS (v4 and v5) proxy daemon (danted)
# Description:       Starts or stops the Dante SOCKS proxy daemon.
#                    Its configuration is stored in the /etc/danted.conf file;
#                    see the danted.conf(5) manual page for details.
### END INIT INFO
#
# dante SOCKS server init.d file. Based on /etc/init.d/skeleton:
# Version:  @(#)skeleton  1.8  03-Mar-1998  miquels@cistron.nl

. /lib/lsb/init-functions

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/sockd
NAME=danted
DESC="Dante SOCKS daemon"
PIDFILE=/var/run/$NAME.pid
CONFFILE=/etc/$NAME.conf

test -f $DAEMON || exit 0

set -e

# This function makes sure that the Dante server can write to the pid-file.
touch_pidfile ()
{
  if [ -r $CONFFILE ]; then
    uid="`sed -n -e 's/[[:space:]]//g' -e 's/#.*//' -e '/^user\.privileged/{s/[^:]*://p;q;}' $CONFFILE`"
    if [ -n "$uid" ]; then
      touch $PIDFILE
      chown $uid $PIDFILE
    fi
  fi
}
        
case "$1" in
  start)
    if ! egrep -cve '^ *(#|$)' \
        -e '^(logoutput|user\.((not)?privileged|libwrap)):' \
        $CONFFILE > /dev/null
    then
        echo "Not starting $DESC: not configured."
        exit 0
    fi
    echo -n "Starting $DESC: "
    touch_pidfile
    start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE \
        --exec $DAEMON -- -D
    echo "$NAME."
    ;;
  stop)
    echo -n "Stopping $DESC: "
    start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE \
        --exec $DAEMON
    echo "$NAME."
    ;;
  reload|force-reload)
    #
    #   If the daemon can reload its config files on the fly
    #   for example by sending it SIGHUP, do it here.
    #
    #   If the daemon responds to changes in its config file
    #   directly anyway, make this a do-nothing entry.
    #
     echo "Reloading $DESC configuration files."
     start-stop-daemon --stop --signal 1 --quiet --pidfile \
        $PIDFILE --exec $DAEMON -- -D
  ;;
  restart)
    #
    #   If the "reload" option is implemented, move the "force-reload"
    #   option to the "reload" entry above. If not, "force-reload" is
    #   just the same as "restart".
    #
    echo -n "Restarting $DESC: "
    start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON
    sleep 1
    touch_pidfile
    start-stop-daemon --start --quiet --pidfile $PIDFILE \
      --exec $DAEMON -- -D
    echo "$NAME."
    ;;
  status)
    if ! egrep -cve '^ *(#|$)' \
        -e '^(logoutput|user\.((not)?privileged|libwrap)):' \
        $CONFFILE > /dev/null
    then
        configured=''
    else
        configured='1'
    fi
    if start-stop-daemon --status --quiet --pidfile $PIDFILE \
      --exec $DAEMON; then
        if [ -n "$configured" ]; then
            echo "$DESC running"
        else
            echo "$DESC running, yet not configured?!"
        fi
    else
        if [ -n "$configured" ]; then
            echo "$DESC not running"
        else
            echo "$DESC not configured"
        fi
    fi
    ;;
  *)
    N=/etc/init.d/$NAME
    # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
    echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
    exit 1
    ;;
esac

exit 0
Дайте доступ к Danted демону:
chmod +x /etc/init.d/danted
update-rc.d danted defaults
Теперь вы можете запускать / останавливать службы с установленной версией, используя apt:
systemctl status danted
systemctl start danted
systemctl stop danted

// Automatic Start Danted After Reboot
systemctl enable danted

Шаг 2 - Настройте Данте

Шаг 2.1 - Интернет-интерфейс

Мы должны проверить интерфейс сервера, в приведенном ниже примере сервер использует eth0интерфейс.
root@your_host:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:50:56:06:d1:d0 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.1/24 brd 10.0.0.1 scope global eth0
       valid_lft forever preferred_lft forever

Шаг 2.2 - Настройка Dante

Прежде чем мы изменим конфигурацию, мы должны сделать резервную копию файла конфигурации, потому что в файле конфигурации есть информация о функциях каждой строки конфигурации.
mv /etc/danted.conf /etc/danted.conf.bak
Затем мы редактируем конфигурацию Danted:
nano /etc/danted.conf
Скопируйте и вставьте конфигурацию ниже:
logoutput: /var/log/socks.log
internal: eth0 port = 1080
external: eth0
clientmethod: none
socksmethod: 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
}
Примечания по конфигурации
  • Если ваш сервер не использует интерфейс eth0, измените его в разделе internalи external.
  • Если вы используете общедоступный Wi-Fi, и оказывается, что нестандартный порт заблокирован, вы можете заменить его на другой порт, например 53или 443, или изменить его port = 1080на желаемый порт.
Запустите и проверьте, нормально ли работает Danted:
systemctl start danted
systemctl status danted

Шаг 2.3 - Тест Dante Socks5

curl -x socks5://<your_ip_server>:<your_danted_port> ifconfig.co
Пример вывода команды:
root@your_host:~# curl -x socks5://10.0.0.1:1080 ifconfig.co
10.0.0.1
Если при выполнении теста выясняется, что он провалился, вы можете проверить /var/log/socks.log

Шаг 3 - Ограничить доступ

Шаг 3.1 - Ограничение по имени пользователя

Вы можете ограничить доступ к вашему прокси-серверу, используя имя пользователя и пароль.
Отредактируйте Danted Configuration /etc/danted.confи измените этот раздел:
# socksmethod: none // for non-authentication
socksmethod: username

socks pass {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        command: bind connect udpassociate
        log: error connect disconnect
        socksmethod: username
}
Сохраните и перезапустите используя systemctl restart danted.
Чтобы создать пользователя и пароль, используйте следующую команду:
useradd holu -r
passwd holu
Используйте следующую команду, чтобы проверить логин с вашим именем пользователя и паролем:
curl -x socks5://<your_username>:<your_password>@<your_ip_server>:<your_danted_port> ifconfig.co
Пример вывода команды:
  • С именем пользователя и паролем:
    root@your_host:~# curl -x socks5://holu:2M6GTPkKubsrED5F@10.0.0.1:1080 ifconfig.co
    10.0.0.1
  • Без имени пользователя и пароля:
    root@your_host:~# curl -x socks5://10.0.0.1:1080 ifconfig.co
    curl: (7) No authentication method was acceptable. (It is quite likely that the SOCKS5 server wanted a username/password, since none was supplied to the server on this connection.)
You can check the login for success or failure on your proxy server with the command `tail -10 /var/log/socks.log`

Example output of the command:
```bash
root@your_host:~# tail -10 /var/log/socks.log
Apr 19 12:15:16 (1555701316.599506) danted[1477]: info: pass(1): tcp/accept [: 203.0.113.1.36730 10.0.0.1.1080
Apr 19 12:15:16 (1555701316.625405) danted[1479]: info: pass(1): tcp/connect [: username%holu@203.0.113.1.36730 10.0.0.1.1080 -> 10.0.0.1.36730 104.28.19.94.80
Apr 19 12:15:16 (1555701316.808180) danted[1479]: info: pass(1): tcp/connect ]: 363 -> username%holu@203.0.113.1.36730 10.0.0.1.1080 -> 75, 75 -> 10.0.0.1.36730 104.28.19.94.80 -> 363: local client closed.  Session duration: 0s
Apr 19 12:15:16 (1555701316.808231) danted[1479]: info: pass(1): tcp/accept ]: 363 -> 203.0.113.1.36730 10.0.0.1.1080 -> 75: local client closed.  Session duration: 0s
Apr 19 12:15:20 (1555701320.794622) danted[1596]: info: pass(1): tcp/accept [: 203.0.113.1.36732 10.0.0.1.1080
Apr 19 12:15:20 (1555701320.796002) danted[1596]: info: block(1): tcp/accept ]: 203.0.113.1.36732 10.0.0.1.1080: error after reading 4 bytes in 0 seconds: client offered no acceptable authentication method

Шаг 3.2 - Ограничение по IP-адресу

В предыдущей конфигурации мы предоставили открытый доступ ко всем IP-адресам для подключения к нашему прокси-серверу. На этом этапе мы ограничим доступ только одним или несколькими IP-адресами.
Отредактируйте Danted Configuration /etc/danted.confи измените этот раздел:
client pass {
        from: 203.0.113.1/32 to: 0.0.0.0/0
        log: error connect disconnect
}
  • 203.0.113.1/32 это единственный IP-адрес, который вы хотите разрешить доступ к вашему прокси-серверу.
Если вы хотите добавить еще один IP-адрес еще раз, просто повторите настройку.
client pass {
        from: 203.0.113.1/32 to: 0.0.0.0/0
        log: error connect disconnect
}
client pass {
        from: 198.51.100.1/32 to: 0.0.0.0/0
        log: error connect disconnect
}
Сохраните и перезапустите используя systemctl restart danted.
Если вы хотите предоставить доступ к диапазону или блоку IP-адресов, измените косую черту за IP-адресом на свой IP-блок.
Используйте следующую команду для проверки входа на прокси-сервер с незарегистрированным IP:
  • Если вы используете аутентификацию по имени пользователя и паролю
    root@your_host:~# curl -x socks5://holu:2M6GTPkKubsrED5F@10.0.0.1:1080 ifconfig.co
    curl: (7) Unable to receive initial SOCKS5 response.
* If you are not using username and password authentication
```bash
root@your_host:~# curl -x socks5://10.0.0.1:1080 ifconfig.co
curl: (7) Unable to receive initial SOCKS5 response.

Вывод

Теперь ваш сервер готов к использованию в качестве прокси-сервера Socks5, используя ограничения с именем пользователя и IP-адресом в приложениях на Debian или Ubuntu.

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

Автору будет очень приятно узнать обратную связь о своем руководстве.

Комментариев 1

Денис Смирнов
Денис Смирнов 6 июня 2022 18:33
А поднимает ли он прокси со всех доп ip на сервере?