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

Dante (пакет dante-server, демон danted) — SOCKS-прокси с поддержкой SOCKS4/5. Удобен, когда нужен контролируемый выход в сеть: логины через системных пользователей, группы, лимиты сессий. Ниже — установка на Ubuntu, группа proxyusers, username-auth, лимит для одного пользователя и проверка через curl.

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

  • Ubuntu 20.04+ (подход похож и на Debian)
  • sudo/root
  • Понимание, какой NIC смотрит «внутрь» (клиенты) и «наружу» (интернет)

Установка

sudo apt update
sudo apt install dante-server

Сервис обычно называется danted. Конфиг: /etc/danted.conf.

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

Доступ будем вешать на membership в группе proxyusers, а не на «всех подряд».

sudo groupadd proxyusers

# alice - с лимитом сессий (см. конфиг ниже)
sudo adduser alice
sudo usermod -aG proxyusers alice

# bob - без session.max
sudo adduser bob
sudo usermod -aG proxyusers bob

# кто в группе
getent group proxyusers
# или: grep proxyusers /etc/group

adduser спросит пароль — он же пойдёт в SOCKS username-auth. Для сервисных учёток без shell можно позже выставить nologin, но пароль (или другой backend auth) всё равно нужен.

Конфигурация /etc/danted.conf

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

Имя интерфейса возьмите из ip -br a (часто ens3, enp0s3, не eth0). Пример рабочей схемы: username, группа proxyusers, у alice максимум 2 сессии, остальные из группы без лимита, всё остальное — block.

logoutput: /var/log/sockd.log

# замените eth0 на ваш интерфейс
internal: eth0 port = 1080
external: eth0

socksmethod: username

user.privileged: root
user.unprivileged: nobody
user.libwrap: nobody

# этап client: кто может «постучаться» в danted
client pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    log: connect disconnect error
}

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

# остальные proxyusers без session.max
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
}

Что значат ключевые директивы

  • logoutput — файл логов; для отладки можно stderr
  • internal — где слушаем клиентов (IP/интерфейс + порт)
  • external — с какого адреса/интерфейса ходим наружу
  • socksmethod: username — логин/пароль системного пользователя
  • client pass — ACL на установку TCP к прокси (ещё до SOCKS-команд)
  • socks pass / block — что можно делать уже как SOCKS-клиент
  • group / user — фильтр по группе и конкретному логину
  • session.max — потолок одновременных сессий для совпавшего правила

Порядок правил важен: более специфичное для alice стоит выше общего proxyusers. Иначе alice может попасть под «безлимитное» правило раньше лимита.

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

# синтаксис/версия (опции зависят от сборки; -V часто печатает info)
sudo danted -f /etc/danted.conf -V

sudo systemctl restart danted
sudo systemctl enable danted
sudo systemctl status danted

# слушает ли порт
ss -lntp | grep 1080
# или: sudo ss -lntp | grep danted

Статус должен быть active (running). Если unit падает, смотрите journalctl -u danted -e и /var/log/sockd.log — частые причины: неверный интерфейс, занятый порт, ошибка в блоках {}.

Firewall

sudo ufw allow 1080/tcp
sudo ufw status

На cloud-VPS дополнительно откройте TCP/1080 в security group. Если прокси только для офисной сети — лучше не 0.0.0.0/0 в client pass, а конкретный CIDR (см. ниже).

Тесты

alice: лимит в 2 сессии

Замените пароль и IP. socks5h в curl — DNS через прокси.

# 1
curl -x socks5h://alice:YOUR_PASSWORD@SERVER_IP:1080 http://example.com -o /dev/null &
# 2
curl -x socks5h://alice:YOUR_PASSWORD@SERVER_IP:1080 http://example.org -o /dev/null &
# 3 - ожидаемо отказ при session.max: 2
curl -x socks5h://alice:YOUR_PASSWORD@SERVER_IP:1080 http://example.net -o /dev/null &
wait

bob: без session.max

curl -x socks5h://bob:YOUR_PASSWORD@SERVER_IP:1080 http://example.com -o /dev/null

Чужой логин / без auth

Подключение с несуществующим пользователем или без credentials должно отвалиться на username-method. Смотрите отказ в sockd.log.

Администрирование учёток

# новый пользователь в proxyusers
sudo adduser charlie
sudo usermod -aG proxyusers charlie

# убрать из группы (прокси-доступ пропадёт)
sudo gpasswd -d charlie proxyusers

# удалить системного пользователя
sudo deluser charlie

Ограничение по IP

Пример: client-этап только из LAN 192.168.1.0/24:

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

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

Аналогично можно резать destination в socks pass (to: ...), если наружу можно только в определённые сети.

Практика и безопасность

  • Не держите client pass from: 0.0.0.0/0 без нужды на публичном IP
  • Сильные пароли; лучше fail2ban/ssh-hardening на самом хосте, SOCKS — отдельная поверхность атаки
  • Ротация и мониторинг /var/log/sockd.log
  • Бэкап danted.conf вместе с инвентарём учёток
  • Обновления: apt upgrade dante-server

В итоге: группа proxyusers + username auth + точечный session.max дают управляемый SOCKS без отдельной БД пользователей. Для продакшена сузьте client ACL, проверьте external-интерфейс и убедитесь, что лимиты реально срабатывают третьим параллельным curl.

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


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