Dante — это высокопроизводительный, гибкий и безопасный SOCKS-сервер и клиент, который позволяет настроить SOCKS5 прокси-сервер на Linux для маршрутизации сетевого трафика через промежуточный узел. Dante поддерживает SOCKS версии 4, SOCKS версии 5, а также расширенные методы аутентификации, что делает его подходящим решением для широкого круга задач, от обхода сетевых ограничений до обеспечения анонимности и безопасности соединений.
Предварительные требования
Для настройки Dante-сервера необходимы:
- Сервер на базе Linux: Поддерживаются большинство дистрибутивов (Ubuntu, Debian, CentOS, RHEL, Fedora и др.).
- Root-доступ или пользователь с sudo-правами: Для установки пакетов и редактирования системных конфигурационных файлов.
- Базовые знания работы с командной строкой Linux: Понимание основных команд для навигации, редактирования файлов и управления службами.
- Открытый порт: Для входящих соединений к прокси-серверу (по умолчанию 1080/TCP).
Установка Dante-сервера
Процесс установки Dante-сервера различается в зависимости от используемого дистрибутива Linux.
Установка на Debian/Ubuntu
Обновите список пакетов и установите dante-server:
sudo apt update
sudo apt install dante-server -y
Установка на CentOS/RHEL/Fedora
На CentOS/RHEL может потребоваться включить репозиторий EPEL, если он еще не активен:
sudo yum install epel-release -y # Для CentOS/RHEL 7
sudo dnf install epel-release -y # Для CentOS/RHEL 8/9, Fedora
sudo yum install dante-server -y # Для CentOS/RHEL 7
sudo dnf install dante-server -y # Для CentOS/RHEL 8/9, Fedora
После установки служба dante-server будет добавлена, но не запущена до настройки.
Настройка Dante-сервера
Основной конфигурационный файл Dante находится по адресу /etc/dante.conf. Перед внесением изменений рекомендуется создать резервную копию оригинального файла.
sudo cp /etc/dante.conf /etc/dante.conf.bak
Откройте файл dante.conf для редактирования с помощью текстового редактора, например nano или vim:
sudo nano /etc/dante.conf
Ниже представлен пример минимальной конфигурации SOCKS5 прокси с аутентификацией по имени пользователя и паролю.
# Путь для логов. Можно использовать syslog или указать файл.
logoutput: syslog
# Внутренний интерфейс и порт, на котором Dante будет слушать входящие соединения.
# Замените 'eth0' на имя вашего внутреннего сетевого интерфейса (например, ens33, enp0s3).
# Порт 1080 - стандартный для SOCKS, но можно использовать любой свободный порт.
internal: eth0 port=1080
# Внешний интерфейс, через который Dante будет отправлять исходящие соединения.
# Замените 'eth0' на имя вашего внешнего сетевого интерфейса.
external: eth0
# Методы аутентификации для SOCKS-соединений.
# 'username' означает аутентификацию по имени пользователя/паролю.
# 'none' означает отсутствие аутентификации (не рекомендуется для публичных серверов).
socksmethod: username
# Привилегированный пользователь, под которым работает часть Dante.
user.privileged: root
# Непривилегированный пользователь, под которым работает основная часть Dante.
# Рекомендуется использовать непривилегированного пользователя для безопасности.
user.unprivileged: nobody
# Правила для клиентов
# Разрешает всем клиентам (0.0.0.0/0) подключаться к прокси.
# Ведет логи ошибок, подключений и отключений.
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: error connect disconnect
}
# Блокирует все остальные клиентские соединения (по сути, не требуется при наличии client pass all).
client block {
from: all to: all
log: connect error
}
# Правила для SOCKS-соединений
# Разрешает SOCKS-соединения от всех источников (0.0.0.0/0) ко всем назначениям (0.0.0.0/0).
# Требует аутентификации по имени пользователя/паролю ('username').
# Ведет логи ошибок, подключений и отключений.
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
socksmethod: username
log: error connect disconnect
}
# Блокирует все остальные SOCKS-соединения.
socks block {
from: all to: all
log: connect error
}
Пояснения к параметрам конфигурации
logoutput: Определяет, куда будут записываться логи Dante.syslog— отправка в системный журнал.internal: Указывает IP-адрес или сетевой интерфейс, на котором Dante будет принимать входящие клиентские соединения, и порт. Например,internal: eth0 port=1080илиinternal: 192.168.1.100 port=1080.external: Указывает IP-адрес или сетевой интерфейс, через который Dante будет устанавливать исходящие соединения с целевыми серверами. Например,external: eth0.socksmethod: Определяет методы аутентификации для SOCKS-соединений.username: Требует аутентификации по имени пользователя и паролю. Dante использует PAM для проверки системных пользователей.none: Не требует аутентификации (используйте с осторожностью).
user.privileged/user.unprivileged: Определяют системных пользователей, под которыми работают различные части демона Dante. Рекомендуется запускать непривилегированную часть под пользователем с минимальными правами (например,nobody).client pass: Правила, определяющие, каким клиентам разрешено подключаться к прокси-серверу.socks pass: Правила, определяющие, какие SOCKS-соединения разрешены через прокси (т.е., к каким внешним ресурсам разрешено подключаться).
Настройка аутентификации пользователей
Если в socksmethod указано username, необходимо создать системных пользователей, которые будут использоваться для аутентификации. Dante использует систему PAM (Pluggable Authentication Modules) для проверки этих пользователей.
Создайте нового пользователя (например, danteuser) и установите для него пароль:
sudo useradd -r -s /bin/false danteuser
sudo passwd danteuser
useradd -r: Создает системного пользователя.-s /bin/false: Запрещает пользователю вход в систему через оболочку, повышая безопасность.
При запросе прокси-сервером пользователь danteuser должен будет ввести установленный пароль.
Запуск и управление Dante-сервером
После сохранения конфигурационного файла (Ctrl+X, Y, Enter для nano) необходимо перезапустить службу Dante.
Проверка конфигурации
Перед перезапуском можно проверить синтаксис конфигурационного файла:
sudo /usr/sbin/sockd -V 2
Если ошибок нет, команда вернет Configuration file /etc/dante.conf is ok.
Перезапуск службы
sudo systemctl restart dante-server
Включение автозапуска
Чтобы Dante запускался автоматически при загрузке системы:
sudo systemctl enable dante-server
Проверка статуса службы
sudo systemctl status dante-server
Вывод должен показать, что служба активна (active (running)).
Просмотр логов
Для отладки или мониторинга можно просмотреть логи Dante:
sudo journalctl -u dante-server -f
Или, если logoutput настроен на syslog:
tail -f /var/log/syslog # Для Debian/Ubuntu
tail -f /var/log/messages # Для CentOS/RHEL
Настройка файрвола
Для того чтобы клиенты могли подключаться к SOCKS5 прокси-серверу, необходимо разрешить входящие соединения на выбранном порту (по умолчанию 1080) в файрволе.
Для UFW (Ubuntu/Debian)
sudo ufw allow 1080/tcp
sudo ufw enable # Если UFW не включен
Для FirewallD (CentOS/RHEL/Fedora)
sudo firewall-cmd --permanent --add-port=1080/tcp
sudo firewall-cmd --reload
Тестирование SOCKS5 прокси
После настройки Dante и файрвола можно проверить работу прокси-сервера.
Тестирование с помощью curl
Используйте curl для проверки соединения через SOCKS5 прокси. Замените YOUR_SERVER_IP, danteuser и password на ваши данные.
curl -x socks5://danteuser:password@YOUR_SERVER_IP:1080 https://api.ipify.org?format=json
Если прокси работает корректно, в ответ вы получите JSON-объект с внешним IP-адресом вашего Dante-сервера.
Тестирование в браузере
-
Firefox:
- Откройте "Настройки" -> "Общие" -> "Параметры сети" -> "Настроить".
- Выберите "Ручная настройка прокси".
- В поле "SOCKS-хост" введите IP-адрес вашего сервера и порт (например,
YOUR_SERVER_IP,1080). - Выберите "SOCKS v5" и поставьте галочку "Удаленный DNS".
- Нажмите "ОК". При первом запросе браузер запросит имя пользователя и пароль.
-
Google Chrome (использует системные настройки):
На Linux Chrome обычно использует системные настройки прокси. Для явной настройки можно запустить Chrome с флагами:
bash google-chrome --proxy-server="socks5://danteuser:password@YOUR_SERVER_IP:1080"
Или настроить системные переменные среды (например,ALL_PROXY).
Дополнительные параметры и расширенные настройки
Dante предлагает множество опций для более тонкой настройки:
-
Привязка к конкретному IP-адресу: Если у сервера несколько сетевых интерфейсов или IP-адресов, можно явно указать, какой из них использовать:
conf internal: 192.168.1.100 port=1080 external: 10.0.0.5 -
Несколько внешних IP-адресов (ротация): Для исходящих соединений можно использовать несколько внешних IP-адресов в режиме ротации:
conf external.rotation: route external: eth0 # IP 1 external: eth0 # IP 2 # ... можно указать несколько раз один и тот же интерфейс, если на нем настроены алиасы IP -
Ограничение доступа по IP-адресам клиентов: Чтобы разрешить подключение только с определенных подсетей:
conf client pass { from: 192.168.1.0/24 to: 0.0.0.0/0 log: error connect disconnect } client block { from: all to: all log: connect error } -
Без аутентификации (для доверенных сетей): Для использования в полностью доверенных внутренних сетях можно отключить аутентификацию, изменив
socksmethod:
conf socksmethod: none
Это не рекомендуется для серверов, доступных из интернета. -
Ограничение доступа к внешним ресурсам: Можно разрешить SOCKS-соединения только к определенным доменам или IP-адресам:
conf socks pass { from: 0.0.0.0/0 to: example.com socksmethod: username log: error connect disconnect } socks pass { from: 0.0.0.0/0 to: 192.168.10.0/24 socksmethod: username log: error connect disconnect } socks block { from: all to: all log: connect error }