Как настроить прокси-сервер Dante

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

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

Требования

Для выполнения этого руководства вам потребуется:

  • Настроенный удаленный сервер, а также пользователь с привилегиями sudo. Мы используем Ubuntu 20.04, но подойдет и другой дистрибутив Linux.
  • В этом руководстве мы используем условный домен your_domain, который вы должны заменить своим собственным доменом или IP-адресом.

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

Dante — это открытый прокси-сервер SOCKS. Протокол SOCKS используется не очень широко, но по сравнению с HTTP он более эффективен в некоторых peer-to-peer приложениях и его предпочтительнее использовать для обработки некоторых видов трафика. Начнем с выполнения следующих команд от имени пользователя sudo, чтобы обновить списки пакетов и установить 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 предоставляет серверу root-права для проверки разрешений
  • user.uncitationd блокирует работу сервера в качестве непривилегированного пользователя (так как в этом нет необходимости, если нет более детализированных разрешений).
  • internal определяет порт, на котором запущен сервис, и IP-адреса, к которым можно подключиться.
  • external определяет сетевой интерфейс для исходящих подключений (это eth0 по умолчанию на большинстве серверов).

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

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
}

 Читайте также: Сетевые технологии: IP-адреса, подсети и бесклассовая адресация CIDR

После этого вы, наконец, можете перезапустить 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

Чтобы продемонстрировать работу сервера 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 138.197.103.77...
* TCP_NODELAY set
* SOCKS5 communication to www.google.com:80
* SOCKS5 connect to IPv4 142.250.189.228 (locally resolved)
* SOCKS5 request granted.
* Connected to 138.197.103.77 (138.197.103.77) port 1080 (#0)
> GET / HTTP/1.1

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

Заключение

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

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

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

Читайте также: Как настроить прокси-сервер Squid

Tags: ,

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