Настройка Dante для частных подключений в Debian

Прокси-серверы — это тип серверного приложения, которое выступает как шлюз между конечным пользователем и сетевым ресурсом. С помощью прокси-сервера конечный пользователь может контролировать и отслеживать веб-трафик для разных целей — конфиденциальность, безопасность и кэширование. Например, прокси можно использовать для выполнения веб-запросов с другого IP. Также он поможет вам понять, как обслуживается сеть, как обойти некоторые методы отслеживания или дросселирования веб-трафика.

Dante — это популярный стабильный SOCKS-прокси с открытым исходным кодом. В этом туториале мы установим и настроим SOCKS прокси Dante на сервере Debian.

Требования

Для выполнения этого гайда потребуется сервер (у нас Debian) и пользователь sudo. Как настроить пользователя с этими привилегиями, можете узнать в гайде по настройке сервера.

В этом мануале мы используем условный домен your_domain, не забудьте заменить его своим доменом или IP.

1: Установка Dante

Dante — это прокси-сервер SOCKS с открытым исходным кодом. SOCKS — менее используемый протокол, но по сравнению с HTTP он более эффективен в некоторых peer-to-peer приложениях.  Начнем с выполнения следующих команд от имени пользователя non-root, чтобы обновить списки пакетов и установить Dante:

sudo apt update
sudo apt install dante-server

Dante автоматически настроит фоновую службу и запустится после установки. Но сразу после первого запуска сервер корректно прекратит работу и выведет сообщение об ошибке, потому что он поставляется с отключенными функциями. Проверить это можно с помощью команды systemctl:

systemctl status danted.service

danted.service - SOCKS (v4 and v5) proxy daemon (danted)
     Loaded: loaded (/lib/systemd/system/danted.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Wed 2021-12-15 21:48:22 UTC; 1min 45s ago
       Docs: man:danted(8)
             man:danted.conf(5)
   Main PID: 14496 (code=exited, status=1/FAILURE)

Dec 15 21:48:21 proxies systemd[1]: Starting SOCKS (v4 and v5) proxy daemon (danted)...
Dec 15 21:48:22 proxies systemd[1]: Started SOCKS (v4 and v5) proxy daemon (danted).

Dec 15 21:48:22 proxies danted[14496]: Dec 15 21:48:22 (1639604902.102601) danted[14496]: warning: checkconfig(): no socks authentication methods enabled.  This means all socks requests will be blocked after negotiation. Perhaps this is not intended?

Чтобы успешно запустить службы Dante, нужно включить его в файле конфигурации.

Файл конфигурации Dante по умолчанию находится в /etc/dated.conf. Если открыть этот файл с помощью nano или другого текстового редактора, то можно увидеть длинный список опций, все они будут отключены. Можете просмотреть этот файл и включить некоторые опции построчно, но на практике эффективнее удалить этот файл и заменить его с нуля. Не переживайте, ведь стандартную конфигурацию Dante всегда можно просмотреть по умолчанию в онлайн-мануале или скачать пакет вручную из списка пакетов Ubuntu. А пока что удалите его:

sudo rm /etc/danted.conf

Теперь можно заменить конфигурации более лаконичным вариантом. Откройте файл в текстовом редакторе (команда автоматически создаст файл, если он не существует), вы получите пустой файл:

sudo nano /etc/danted.conf

Добавьте следующее содержимое:

logoutput: syslog
user.privileged: root
user.unprivileged: nobody

# The listening network interface or address.
internal: 0.0.0.0 port=1080

# The proxying network interface or address.
external: eth0

# socks-rules determine what is proxied through the external interface.
socksmethod: username

# client-rules determine who can connect to the internal interface.
clientmethod: none

client pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
}

socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
}

Теперь у вас есть удобная для использования конфигурация SOCKS-сервера: сервер работает на порту 1080 (по соглашению это стандартный порт SOCKS). Рассмотрим остальную часть файла конфигурации:

  • logoutput определяет, как Dante будет регистрировать подключения (в данном случае с помощью обычного системного лога).
  • user.privived предоставляет Dante root-права для проверки разрешений
  • user.unprivated не предоставляет серверу никаких разрешений для работы в качестве непривилегированного пользователя, поскольку в этом нет необходимости, если не предоставляются более детальные разрешения.
  • internal определяет порт, на котором работает сервис, и IP, которые могут подключаться
  • external определяет сетевой интерфейс для исходящих подключений (eth0 по умолчанию на большинстве серверов).

Остальные детали конфигурации определяют методы аутентификации, которые мы рассмотрим в следующем разделе. Если вы используете ufw, не забудьте открыть порт 1080 в брандмауэре:

sudo ufw allow 1080

Сейчас можно перезапустить Dante и подключиться к нему, но SOCKS-сервер будет открыт для всех пользователей, что вас вряд ли устроит. Поэтому сначала нужно его защитить.

2: Защита Dante

Если вы следовали туториалу до этого момента, то для аутентификации Dante будет использовать обычные учетные записи пользователей Linux. Это нормально, но пароль для этого соединения будет отправлен в виде простого текста. Поэтому лучше создать отдельного пользователя SOCKS, у которого не будет других прав в системе. Сделаем это с помощью команды useradd с флагами, которые отключат оболочку входа для нового пользователя, а затем установим пароль:

sudo useradd -r -s /bin/false your_dante_user
sudo passwd your_dante_user

Также следует избегать входа в эту учетную запись через незащищенное беспроводное соединение или часто использовать общий доступ к серверу. В противном случае злоумышленники могут и будут предпринимать повторные попытки входа в систему.

Dante поддерживает другие методы аутентификации, но многие клиенты (т.е. приложения), которые подключаются к SOCKS-прокси, поддерживают только базовую аутентификацию по имени пользователя и паролю, поэтому менять метод не стоит. В качестве альтернативы можете ограничить доступ только по определенным IP. Это не самый сложный вариант защиты, но, учитывая сочетание используемых здесь технологий, он вполне разумен. Из прошлых мануалов вы уже можете знать, как ограничить доступ к определенным IP с помощью ufw, но это можно сделать и прямо в Dante. Отредактируйте файл /etc/dated.conf:

sudo nano /etc/danted.conf


client pass {
    from: your_ip_address/0 to: 0.0.0.0/0
}

Для поддержки нескольких IP можно использовать CIDR нотацию или просто добавить еще один блок конфигурации client pass {}:

client pass {
    from: your_ip_address/0 to: 0.0.0.0/0
}

client pass {
    from: another_ip_address/0 to: 0.0.0.0/0
}

После этого можно перезапустить Dante с новой конфигурацией.

sudo systemctl restart danted.service

Если вы проверите статус сервиса, вы увидите, что все работает без ошибок:

systemctl status danted.service

danted.service - SOCKS (v4 and v5) proxy daemon (danted)
     Loaded: loaded (/lib/systemd/system/danted.service; enabled; vendor preset: enable>
     Active: active (running) since Thu 2021-12-16 18:06:26 UTC; 24h ago

Далее подключимся к прокси.

3: Подключение через Dante

С помощью программы командной строки curl мы продемонстрируем работу сервера Dante (curl часто используется для выполнения различных типов веб-запросов). В общем, если вы хотите проверить, сработает ли данное соединение в браузере, всегда тестируйте его с помощью curl. Для этого использовать curl нужно на локальном компьютере — она установлена по умолчанию во всех современных средах Windows, Mac и Linux. Поэтому можете открыть любую локальную оболочку для запуска этой команды:

curl -v -x socks5://your_dante_user:your_dante_password@your_server_ip:1080 http://www.google.com/

*   Trying 68.183.159.74:1080...
* SOCKS5 connect to IPv4 142.251.33.68:80 (locally resolved)
* SOCKS5 request granted.
* Connected to 68.183.159.74 (68.183.159.74) port 1080 (#0)
> GET / HTTP/1.1
> Host: www.google.com

Учетные данные, которые вы использовали для curl, теперь должны работать везде, где захотите использовать новый прокси-сервер.

Подводим итоги

Мы разобрали, как развернуть популярную конечную точку API с открытым исходным кодом для проксирования трафика практически без дополнительных настроек. Многие приложения имеют встроенную поддержку прокси-сервера (часто на уровне ОС) уже несколько десятилетий, что делает этот стек прокси очень удобным для повторного использования.

Также вы можете развернуть HTTP-сервер Squid, который может работать параллельно с Dante и проксировать другие типы веб-трафика.

Один из наиболее распространенных вариантов использования прокси-серверов — проксирование трафика в разные регионы и обратно. Потому будет полезно знать, как использовать Ansible для автоматизации развертывания серверов, – возможно, вы захотите продублировать эту конфигурацию в других центрах обработки данных.

Читайте также: Автоматизация начальной настройки сервера с помощью Ansible в Ubuntu 18.04

Tags: ,

Добавить комментарий