如何在Debian 11上设置私密连接的Dante代理

简介

代理服务器是一种服务器应用程序,它在终端用户和互联网资源之间充当网关。通过代理服务器,终端用户可以控制和监控他们的网络流量,以实现各种目的,包括隐私、安全和缓存。例如,您可以使用代理服务器以与您自己不同的IP地址发送网络请求。您还可以使用代理服务器研究不同司法管辖区的网络服务方式,或避免某些监控或网络流量限制方法。

Dante是一个稳定、流行且开源的SOCKS代理工具。在本教程中,您将安装并配置Dante,在Debian 11服务器上提供SOCKS代理服务。

先决条件 jué

完成这个指南,你将需要以下物品:

  • A Debian 11 server and a non-root user with sudo privileges. You can learn more about how to set up a user with these privileges in our Initial Server Setup with Debian 11 guide.

在本教程中,你将使用your_domain作为域名,但你应该用你自己的域名或IP地址来替代它。

步骤1 – 安装Dante

Dante是一个开源的SOCKS代理服务器。SOCKS是一个不太常用的协议,但对于某些点对点应用程序来说更有效,并且某些类型的流量也比HTTP更受欢迎。请以非root用户身份运行以下命令来更新软件包列表和安装Dante:

  1. sudo apt update
  2. sudo apt install dante-server

当被安装后,Dante还会自动设置一个后台服务,并启动起来。然而,它被设计成在首次运行时通过错误提示优雅地退出,因为它在安装时会禁用所有功能。你可以使用systemctl命令来验证这一点。

  1. systemctl status danted.service
Output
● 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/danted.conf中提供。如果你使用nano或你最喜欢的文本编辑器打开这个文件,你会看到一长串的配置选项,所有选项都是禁用的。你可以尝试逐行浏览这个文件并启用一些选项,但实际上,删除此文件并从头开始替换会更高效和更易读。不用担心这样做。你可以随时通过访问它的在线手册来查看Dante的默认配置,如果你想要,甚至可以从Ubuntu的软件包列表手动重新下载包,以获取标准配置文件。与此同时,去删除它吧:

  1. sudo rm /etc/danted.conf

现在你可以用更简洁的方式来替代它。使用文本编辑器打开一个文件,如果文件不存在,它将自动创建,因此通过使用nano或你喜欢的文本编辑器,你现在应该得到一个空配置文件。

  1. sudo nano /etc/danted.conf

请添加以下内容。

/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 refers to how Dante will log connections, in this case using regular system logging
  • user.privileged allows dante to have root permissions for checking permissions
  • user.unprivileged does not grant the server any permissions for running as an unprivileged user, as this is unnecessary when not granting more granular permissions
  • internal connection details specify the port that the service is running on and which IP addresses can connect
  • external connection details specify the network interface used for outbound connections, eth0 by default on most servers

配置的其余细节涉及认证方法,这些方法将在下一节中讨论。如果你正在使用ufw,请不要忘记在防火墙中打开1080端口。

  1. sudo ufw allow 1080

在这一点上,你可以重新启动 Dante 并连接到它,但是你将拥有一个对全世界开放的 SOCKS 服务器,你可能不想要这样,因此你需要先学习如何保护它。

第二步 — 保护丹特

如果你按照这个教程进行操作,Dante 将使用常规的 Linux 用户账户来进行身份验证。这是有帮助的,但是用于该连接的密码将以明文方式传输,所以创建一个专用的 SOCKS 用户且没有其他登录权限非常重要。为此,你将使用 useradd 命令以不分配登录 Shell 给用户的标志,然后设置密码。

  1. sudo useradd -r -s /bin/false your_dante_user
  2. sudo passwd your_dante_user

此外,您还需要避免在不安全的无线连接或过广的服务器共享中登录此账户。否则,恶意用户会多次尝试登录。

但丹特支持其他认证方法,但许多将连接到SOCKS代理的客户端(即应用程序)只支持基本的用户名和密码认证,因此您可能希望保留该部分的原样。作为替代方案,您可以限制仅允许特定IP地址访问。这不是最复杂的选项,但考虑到此处使用的技术组合,这是一个明智的选择。您可能已经学习过如何使用ufw从我们的先决条件教程中限制对特定IP地址的访问,但您也可以直接在丹特中完成。编辑您的/etc/danted.conf文件:

  1. sudo nano /etc/danted.conf
/etc/danted.conf的含义是什么?
…
client pass {
    from: your_ip_address/0 to: 0.0.0.0/0
}

为了支持多个IP地址,您可以使用CIDR表示法,或者只需添加另一个客户端传递{}配置块。

/etc/danted.conf可以被改写为:Danted配置文件
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。

  1. sudo systemctl restart danted.service

这次,当您检查服务状态时,您应该能够看到它运行正常,没有任何错误。

  1. systemctl status danted.service
Output
● 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

在下一步中,最后你将连接到你的代理。

第三步 — 通过Dante进行连接

为了演示您的Dante服务器,您将使用一个称为curl的命令行程序,它广泛用于发出不同类型的网络请求。一般来说,如果您想验证给定的连接在理想情况下是否应该在浏览器中工作,您应该始终首先使用curl进行测试。您将在本地计算机上使用curl来进行测试 – 该程序在所有现代的Windows、Mac和Linux环境中都默认安装,因此您可以打开任何本地 shell 来运行此命令。

  1. curl -v -x socks5://your_dante_user:your_dante_password@your_server_ip:1080 http://www.google.com/
Output
* 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端点,用于在几乎没有开销的情况下进行流量代理。许多应用程序都内置了代理支持(通常在操作系统级别),这使得这个代理堆栈非常可重复使用。

接下来,你可能想学习如何部署Squid。Squid是一个HTTP代理,可以与Dante一起运行,用于代理不同类型的网络流量。

由于代理服务器最常见的用途之一是代理不同地区的流量,所以你可能想要查看如何使用Ansible自动化服务器部署,以便在其他数据中心中复制此配置。

发表回复 0

Your email address will not be published. Required fields are marked *