Готовый скрипт для установки Dante SOCKS5 прокси сервера

Socks5 — это универсальный протокол сетевого уровня, который используется для маршрутизации трафика между клиентами и серверами через прокси. Он предоставляет пользователям возможность безопасно и анонимно подключаться к интернет-ресурсам, поддерживая различные типы запросов, включая TCP и UDP. Протокол Socks5 стал популярен благодаря своей гибкости и относительно низкой задержке, что делает его хорошим выбором для обхода региональных ограничений, защиты конфиденциальности и оптимизации работы сетевых приложений.

В этой статье мы рассмотрим скрипт, который автоматизирует установку и конфигурирование прокси-сервера Dante на Ubuntu Server 24.04 LTS , с использованием аутентификации на основе имени пользователя и пароля. Dante является одним из наиболее известных и надежных серверных решений для реализации Socks5-прокси.

1. Проверяем, выполняется ли скрипт с правами суперпользователя, используя id -u. Если нет, завершаем с ошибкой:

Bash
if [ "$(id -u)" != "0" ]; then
    echo -e "\033[31mThis script requires superuser rights.\033[0m"
    exit 1
fi


2. Проверяем, указан ли пароль в качестве аргумента скрипта:

Bash
if [ -z "$1" ]; then
  echo "Please provide socks5 password as argument"
  exit 1
fi


3. Устанавливаем необходимые параметры конфигурации:

Bash
DANTE_CONF="/etc/danted.conf"
DANTE_USER="usrsocks"
DANTE_PASSWORD=$1


4. Определение активного сетевого интерфейса: с помощью команды ip скрипт находит активный сетевой интерфейс, который используется для подключения к сети:

Bash
echo "Find active network interface..."
INTERFACE=$(ip -o -4 route show to default | awk '{print $5}')

if [ -z "$INTERFACE" ]; then
    echo "Failed to find active network interface"
    exit 1
fi

echo "Active network interface found: $INTERFACE"


5. Установка dante-server: с помощью команды apt-get устанавливается dante-server. Перед этим выполняется проверка на блокировку системы apt:

Bash
# Wait for unlocking:
   wait_for_lock() {
     while fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do
       echo "Waiting for /var/lib/dpkg/lock-frontend to be unlocked..."
       sleep 5
     done
   }

echo "Install dante-server..."
wait_for_lock
apt-get update
wait_for_lock
apt-get install -y dante-server


6. Создание резервной копии конфигурационного файла: если конфигурационный файл dante уже существует, скрипт создаёт его резервную копию:

Bash
echo "Backup existing configuration file $DANTE_CONF..."
if [ -f "${DANTE_CONF}" ]; then
    cp "$DANTE_CONF" "${DANTE_CONF}.bak"
    echo -e "\033[32mBackup existing configuration file\033[0m"
fi


7. Создание нового конфигурационного файла: новый конфигурационный файл формируется и записывается в нужное место:

Bash
NEW_CONFIG=$(cat <<-EOM

   logoutput: syslog stdout /data/logs/danted.log

   internal: $INTERFACE port = 1080
   external: $INTERFACE

   socksmethod: username
   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
    }

EOM
)

echo "Write configuration file $DANTE_CONF..."
echo "$NEW_CONFIG" > "$DANTE_CONF"


8. Создание учётной записи пользователя для аутентификации: создаётся новый пользователь и пароль для аутентификации при подключении к proxy. Имя пользователя — usrsocks, а пароль — тот, который вы передали в качестве аргумента:

Bash
echo "Create user $DANTE_USER for SOCKS5 auth..."
useradd -s /bin/false $DANTE_USER
echo "$DANTE_USER:$DANTE_PASSWORD" | chpasswd


9. Перезапуск службы danted: скрипт перезапускает сервис и добавляет его в автозапуск:

Bash
echo "restart danted service..."
systemctl restart danted
systemctl enable danted


10. Для дополнительной оптимизации автоматизированного выполнения, обернем основное тело скрипта таким образом:

Bash
trap 'echo -e "\033[31mSomething went wrong\033[0m"; exit 1' ERR
set -e

export DEBIAN_FRONTEND=noninteractive

# Script BODY
# ...

trap - ERR
echo -e "\033[32mDante SOCKS5 proxy has been installed and configured with authentication\033[0m"


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

Использование скрипта

  1. Скопируйте скрипт и сохраните его в файл (например, socks5.sh). Или клонируйте репозиторий.
  2. Убедитесь, что у файла есть права на выполнение:
chmod +x socks5.sh
  1. Запустите скрипт с использованием прав суперпользователя и передав ему пароль для аутентификации:
   sudo install_dante.sh your_password

Как альтернативу назначению прав на выполнение, можно запустить скрипт через прямое указание интерпретатора bash, что может быть удобно при автоматизации:

sudo bash socks5.sh your_password
  • Проверка установки: убедитесь, что прокси сервер работает, проверив статус danted сервиса:
   systemctl status danted

Сервис должен быть в состоянии active (running).

Запуск скрипта

Настройте ваше приложение для использования SOCKS5 прокси с адресом вашей машины и портом 1080. Введите учётные данные, указанные в скрипте (usrsocks и пароль your_password, переданный в качестве аргумента).


Полная версия скрипта приведена ниже:

Bash
 #!/bin/bash

if [ "$(id -u)" != "0" ]; then
    echo -e "\033[31mThis script requires superuser rights.\033[0m"
    exit 1
fi

if [ -z "$1" ]; then
  echo "Please provide socks5 password as argument"
  exit 1
fi

DANTE_CONF="/etc/danted.conf"
DANTE_USER="usrsocks"
DANTE_PASSWORD=$1

trap 'echo -e "\033[31mSomething went wrong\033[0m"; exit 1' ERR
set -e

export DEBIAN_FRONTEND=noninteractive

# Wait for unlocking:
   wait_for_lock() {
     while fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do
       echo "Waiting for /var/lib/dpkg/lock-frontend to be unlocked..."
       sleep 5
     done
   }


echo "Find active network interface..."
INTERFACE=$(ip -o -4 route show to default | awk '{print $5}')

if [ -z "$INTERFACE" ]; then
    echo "Failed to find active network interface"
    exit 1
fi

echo "Active network interface found: $INTERFACE"

echo "Install dante-server..."
wait_for_lock
apt-get update
wait_for_lock
apt-get install -y dante-server

echo "Backup existing configuration file $DANTE_CONF..."
if [ -f "${DANTE_CONF}" ]; then
    cp "$DANTE_CONF" "${DANTE_CONF}.bak"
    echo -e "\033[32mBackup existing configuration file\033[0m"
fi

NEW_CONFIG=$(cat <<-EOM

   logoutput: syslog stdout /data/logs/danted.log

   internal: $INTERFACE port = 1080
   external: $INTERFACE

   socksmethod: username
   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
    }

EOM
)

echo "Write configuration file $DANTE_CONF..."
echo "$NEW_CONFIG" > "$DANTE_CONF"

echo "Create user $DANTE_USER for SOCKS5 auth..."
useradd -s /bin/false $DANTE_USER
echo "$DANTE_USER:$DANTE_PASSWORD" | chpasswd

echo "restart danted service..."
systemctl restart danted
systemctl enable danted

trap - ERR
echo -e "\033[32mDante SOCKS5 proxy has been installed and configured with authentication\033[0m"


Репозиторий проекта: https://git.checkerwars.com/leo/socks5

Бонусом в репозитории есть скрипт socks5-uninstall.sh, который отменяет выполнение скрипта установки.


Если вам интересен наш проект, есть вопросы, замечания, или предложения — оставляйте комментарии или пишите на почту: checkerwars@mail.ru

Кроме того, автор проекта ищет работу. Мое резюме.

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

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