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.


