Настройка Dante Server с групповой аутентификацией пользователей

Dante это SOCKS-прокси с поддержкой SOCKS4 и SOCKS5. Здесь разберём, как поставить его на Ubuntu, пускать только пользователей из отдельной системной группы и ограничить одному из них число одновременных подключений.

Что понадобится

  • Ubuntu 20.04 или новее;
  • права sudo;
  • открытый порт 1080 (или другой на ваш выбор).

Установка

sudo apt update
sudo apt install dante-server

Сразу после установки служба может не запуститься, потому что конфигурация по умолчанию пустая. Это нормально.

Группа и пользователи

sudo groupadd proxyusers
sudo useradd -M -s /usr/sbin/nologin -G proxyusers alice
sudo useradd -M -s /usr/sbin/nologin -G proxyusers bob
sudo passwd alice
sudo passwd bob

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

getent group proxyusers

Конфигурация

Сохраните копию и откройте файл:

sudo cp /etc/danted.conf /etc/danted.conf.backup
sudo nano /etc/danted.conf

Пример содержимого:

logoutput: /var/log/danted.log

internal: eth0 port = 1080
external: eth0

clientmethod: none
socksmethod: username

user.privileged: root
user.unprivileged: nobody

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

# alice: не больше двух сессий одновременно
socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    user: alice
    socksmethod: username
    session.max: 2
    log: connect disconnect error
}

# остальные участники группы proxyusers без ограничений
socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    group: proxyusers
    socksmethod: username
    log: connect disconnect error
}

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

Что здесь важно:

  • internal и external задают интерфейс, на котором слушает прокси, и интерфейс для исходящих соединений. Имя интерфейса узнайте командой ip -br addr, часто это ens3 или enp0s3.
  • socksmethod: username включает проверку логина и пароля по системным учётным записям.
  • Правила проверяются сверху вниз, срабатывает первое подходящее. Поэтому правило для alice стоит выше общего правила для группы.
  • session.max ограничивает число одновременных сессий по правилу. Параметр появился в Dante 1.4, в Ubuntu 20.04 и новее используется именно эта ветка.
  • Последнее правило блокирует всех, кто не подошёл под предыдущие.

Проверка и запуск

sudo danted -V -f /etc/danted.conf
sudo systemctl restart danted
sudo systemctl status danted
sudo ufw allow 1080/tcp

Ключ -V только проверяет конфигурацию и выходит. Подробнее о брандмауэре в статье о UFW. Хорошая идея разрешить порт только с нужных адресов, а не со всего интернета.

Тестирование

Для alice третье одновременное соединение должно быть отклонено:

for i in 1 2 3; do
  curl -s -x socks5h://alice:ПАРОЛЬ@IP_СЕРВЕРА:1080 https://proof.ovh.net/files/100Mb.dat -o /dev/null &
done
wait

У bob таких ограничений нет:

curl -x socks5h://bob:ПАРОЛЬ@IP_СЕРВЕРА:1080 https://example.com -o /dev/null

Пользователь вне группы или с неверным паролем подключиться не сможет. Все попытки видны в журнале:

sudo tail -f /var/log/danted.log

Безопасность

SOCKS5 передаёт логин и пароль открытым текстом. Не используйте для прокси те же пароли, что и для других сервисов, и по возможности ограничивайте доступ по IP. Как дополнительно запретить таким пользователям вход по SSH, описано в статье об ограничении доступа по SSH для пользователей Dante.

Источники и ссылки


Комментарии загружаются…