// Engineering Log

Прокси-серверы: Часть 4 — Dante

Опубликовано 21.09.2026

Dante — свободный SOCKS-прокси-сервер компании Inferno Nettverk. Он реализует протоколы SOCKS4, SOCKS4a и SOCKS5 (RFC 1928) и распространяется под лицензией BSD/CMU. Последняя версия — 1.4.4, выпущенная в декабре 2024 года. В Debian и Ubuntu сервер устанавливается из пакета dante-server, сама служба называется danted.

Чем SOCKS отличается от HTTP-прокси

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

Версии протокола различаются возможностями:

  • SOCKS4 — только TCP, без аутентификации по паролю, адрес назначения передаётся IP-адресом;
  • SOCKS4a — то же, но позволяет передать имя узла, чтобы его разрешил прокси;
  • SOCKS5 — TCP и UDP, IPv6, аутентификация по имени пользователя и паролю.

Для чего используют Dante

  • Единая точка выхода. Трафик приложений из внутренней сети выходит в интернет через один сервер, с одного адреса и по одним правилам.
  • Доступ к ресурсам с белым списком IP-адресов. Если внешний сервис пускает только с определённого адреса, достаточно поставить Dante на машину с этим адресом.
  • Выход через другой сервер или другую страну. Целевой сервер видит адрес прокси, а не клиента. Это используется для проверки региональных версий сайтов и работы с сервисами, доступными только из определённых стран.
  • Контроль доступа. Правила Dante определяют, с каких адресов можно подключаться к прокси и куда через него разрешено ходить.
  • Проксирование всего трафика системы или контейнера. Приложения, которые сами не умеют работать с SOCKS, можно направить в прокси через tun2socks — это разобрано в статьях для контейнера и для всей системы.

Установка

В Debian и Ubuntu:

bash
sudo apt update
sudo apt install dante-server

Конфигурация находится в файле /etc/danted.conf. Сразу после установки служба может не запуститься — в стандартном файле не указаны интерфейсы. Это нормально: сначала нужно написать конфигурацию.

Рабочая конфигурация с паролем

Ниже — конфигурация SOCKS5-прокси, который принимает подключения на порту 1080 и пускает только пользователей с паролем. Имя внешнего интерфейса (eth0) замените на своё — его показывает команда ip -br addr.

logoutput: syslog

internal: eth0 port = 1080
external: eth0

clientmethod: none
socksmethod: username

user.privileged: root
user.notprivileged: nobody

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

socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    command: bind connect udpassociate
    log: error connect disconnect
}

Что здесь происходит:

  • internal — адрес и порт, на которых Dante принимает подключения клиентов;
  • external — интерфейс, с которого прокси устанавливает соединения с целевыми серверами;
  • clientmethod — проверка на уровне TCP-подключения, до начала SOCKS-сеанса; none означает, что на этом этапе ничего не проверяется;
  • socksmethod: username — проверка имени и пароля в рамках SOCKS5. Dante сверяет их с системной базой пользователей, поэтому для чтения паролей ему нужны права root при запуске (user.privileged), а основную работу он выполняет от непривилегированного пользователя (user.notprivileged);
  • client pass — кому разрешено подключаться к прокси;
  • socks pass — какие SOCKS-команды и куда разрешены: connect — обычное TCP-соединение, bind — входящие соединения (нужны, например, активному режиму FTP), udpassociate — передача UDP.

Правила проверяются сверху вниз, срабатывает первое подходящее. Если ни одно не подошло, доступ запрещён.

Пользователь для прокси создаётся как обычная системная учётная запись без права входа в систему:

bash
sudo useradd -r -M -s /usr/sbin/nologin proxyuser
sudo passwd proxyuser

Запуск и проверка:

bash
sudo systemctl restart danted
sudo systemctl status danted
curl -x socks5h://proxyuser:ПАРОЛЬ@192.0.2.10:1080 https://ifconfig.me

Префикс socks5h означает, что имя сайта разрешает прокси, а не клиент. Команда должна вывести внешний адрес сервера с Dante.

Подключение клиентов

  • Браузер. В Firefox SOCKS-прокси задаётся в настройках сети: хост, порт 1080, тип SOCKS v5 и флажок «Отправлять DNS-запросы через прокси». Chromium и основанные на нём браузеры берут системные настройки или параметр запуска --proxy-server="socks5://192.0.2.10:1080"; пароль для SOCKS они не поддерживают, поэтому для них прокси обычно ограничивают по адресам.
  • Консольные программы. Многие утилиты, включая curl, понимают переменную окружения ALL_PROXY=socks5h://proxyuser:ПАРОЛЬ@192.0.2.10:1080.
  • SSH. Подключение к серверу через SOCKS-прокси задаётся в ~/.ssh/config параметром ProxyCommand nc -X 5 -x 192.0.2.10:1080 %h %p (нужен netcat из OpenBSD). Пароль этот способ не передаёт, поэтому он подходит для прокси, ограниченного по адресам.
  • Приложения без поддержки прокси направляются в SOCKS через tun2socks или proxychains.

Ограничение доступа по адресам

Если прокси нужен только сотрудникам офиса или только другим вашим серверам, ограничьте источник в client pass:

client pass {
    from: 198.51.100.0/24 to: 0.0.0.0/0
    log: error
}

Так же в socks pass можно запретить обращения к внутренним сетям, чтобы через прокси нельзя было попасть в вашу локальную инфраструктуру. Запрещающее правило ставится выше разрешающего:

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

Типичные ошибки

  • Открытый прокси. Конфигурация без пароля и с from: 0.0.0.0/0 быстро находится сканерами и используется для рассылки спама и атак от вашего адреса. Либо включайте socksmethod: username, либо ограничивайте источники по адресам, лучше — и то и другое.
  • Пароль передаётся открытым текстом. Так устроен SOCKS5: имя и пароль идут по сети незашифрованными. Документация Dante прямо об этом предупреждает. Если клиенты подключаются через интернет, пропускайте SOCKS внутри SSH-туннеля или WireGuard.
  • Не тот внешний интерфейс. Если в external указан интерфейс без выхода в интернет, клиент подключается к прокси, но дальше соединения не устанавливаются.
  • Закрыт порт в межсетевом экране. Нужно открыть TCP-порт 1080, а для udpassociate — ещё и UDP-порты, через которые Dante передаёт датаграммы.
  • Клиент использует SOCKS4. В SOCKS4 нет аутентификации по паролю, поэтому при socksmethod: username такие клиенты получат отказ.
  • Ошибки в конфигурации. После правки полезно посмотреть журнал: journalctl -u danted -n 50. Dante сообщает номер строки с ошибкой.

Достоинства и ограничения

Достоинства:

  • проксирует любой TCP- и UDP-трафик, а не только веб;
  • мало потребляет ресурсов и работает даже на самом маленьком VPS;
  • гибкие правила доступа по адресам, пользователям и командам SOCKS;
  • долгая история и стабильная работа;
  • свободная лицензия, пакеты в основных дистрибутивах.

Ограничения:

  • нет функций HTTP-прокси: кеширования, фильтрации по адресам страниц, TLS-терминации — для этого нужны Squid или Nginx;
  • пароль в SOCKS5 не шифруется, защищать канал нужно отдельно;
  • настройка только через текстовый файл, графического интерфейса нет;
  • нет встроенного учёта трафика по пользователям — только журнал соединений.

Когда выбирать Dante

Dante подходит, когда нужен надёжный SOCKS5-прокси с аутентификацией и понятными правилами доступа — для приложений, которым нужен выход через определённый адрес, для доступа к сервисам с белым списком IP или для направления трафика контейнеров через tun2socks. Если же нужны HTTP-прокси, учёт трафика и лимиты по пользователям в одной программе, удобнее 3proxy; если важны фильтрация веб-трафика и отчёты о посещённых сайтах — Squid.

// Contact

Нужна помощь?

Свяжись со мной и я помогу решить проблему

Написать в Telegram

Отвечаю в течение рабочего дня (03:00–13:00 GMT)

Или оставьте заявку здесь:

Подтвердите, что вы не бот.

Написать и получить быстрый ответ