介绍

代理服务器是一种服务器应用程序,用作最终用户和 Internet 资源之间的网关。通过代理服务器,最终用户能够控制和监控他们的网络流量,用于各种目的,包括隐私、安全和缓存。例如,您可以使用代理服务器从与您自己的 IP 地址不同的 IP 地址发出 Web 请求。您还可以使用代理服务器来研究从一个司法管辖区到下一个司法管辖区的网络服务方式有何不同,或者避免某些监视方法或网络流量限制。

Dante 是一个稳定、流行、开源的 SOCKS 代理。在本教程中,您将安装和配置 Dante 以在 Ubuntu 22.04 服务器上提供 SOCKS 代理。

先决条件

要完成本指南,您需要:

  • 一个 Ubuntu 22.04 服务器和一个具有 sudo 权限的非 root 用户。您可以在我们的 使用 Ubuntu 22.04 的初始服务器设置 中了解有关如何设置具有这些权限的用户的更多信息-04) 指南。

您将在本教程中使用域名 your_domain,但您应该将其替换为您自己的域名或 IP 地址。

第 1 步 — 安装 Dante

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

sudo apt 更新
sudo apt install dante-server

Dante 还会在安装后自动设置后台服务并启动。但是,它被设计为在第一次运行时优雅地退出并显示错误消息,因为它附带禁用了所有功能。您可以使用 systemctl 命令验证这一点:

systemctl 状态 danted.service

输出● danted.service - SOCKS(v4 和 v5)代理守护进程(danted)
已加载:已加载(/lib/systemd/system/danted.service;已启用;供应商预设:已启用)
活动:自 2021 年 12 月 15 日星期三 21:48:22 UTC 以来失败(结果:退出代码); 1 分钟 45 秒前
文档:man:danted(8)
人:danted.conf(5)
主 PID:14496(代码u003d退出,状态u003d1/失败)

12 月 15 日 21:48:21 代理 systemd[1]:正在启动 SOCKS(v4 和 v5)代理守护进程(danted)...
12 月 15 日 21:48:22 代理 systemd[1]:启动 SOCKS(v4 和 v5)代理守护进程(danted)。
12 月 15 日 21:48:22 代理 danted[14496]:12 月 15 日 21:48:22 (1639604902.102601) danted[14496]:警告:checkconfig():未启用 socks 身份验证方法。这意味着所有 socks 请求将在协商后被阻止。也许这不是故意的?

要成功启动 Dante 的服务,您需要在配置文件中启用它们。

Dante 的配置文件默认在 /etc/danted.conf 中提供。如果您使用 nano 或您喜欢的文本编辑器打开此文件,您将看到一长串配置选项,所有这些选项都已禁用。您可以尝试浏览此文件并逐行启用一些选项,但实际上删除此文件并从头开始替换它会更有效且更具可读性。不要担心这样做。您可以通过导航到 Dante 的 在线手册 来查看 Dante 的默认配置,甚至可以重新下载软件包如果需要,可以从 Ubuntu 的 包列表 手动重新获取库存配置文件。与此同时,继续删除它:

须藤 rm /etc/danted.conf

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

Sudono / 等 / 但丁 d. conf

添加以下内容:

/etc/danted.conf

日志输出:系统日志
用户特权:根
user.unprivileged: 没有人

# 监听的网络接口或地址。
内部:0.0.0.0 端口u003d1080

# 代理网络接口或地址。
外部:eth0

# socks-rules 确定通过外部接口代理的内容。
袜子方法:用户名

# 客户端规则确定谁可以连接到内部接口。
客户端方法:无

客户通过{
从:0.0.0.0/0 到:0.0.0.0/0
}

袜子通过{
从:0.0.0.0/0 到:0.0.0.0/0
}

您现在有一个可用的 SOCKS 服务器配置,在端口 1080 上运行,这是 SOCKS 的常用约定。您还可以逐行分解此配置文件的其余部分:

  • logoutput 指的是 Dante 将如何记录连接,在这种情况下使用常规系统记录

  • user.privileged 允许 dante 拥有 root 权限以检查权限

  • user.unprivileged 不授予服务器任何作为非特权用户运行的权限,因为在不授予更精细的权限时这是不必要的

  • internal 连接详细信息指定服务正在运行的端口以及可以连接的 IP 地址

  • external 连接详细信息指定用于出站连接的网络接口,在大多数服务器上默认为 eth0

其余的配置细节处理身份验证方法,这将在下一节中讨论。如果您使用 ufw,请不要忘记在防火墙中打开端口 1080:

sudo ufw 允许 1080

此时,您可以重新启动 Dante 并连接到它,但是您将拥有一个对整个世界开放的 SOCKS 服务器,您可能不想要它,因此您将首先学习如何保护它。

第 2 步 — 保护 Dante

如果到目前为止您已按照本教程进行操作,Dante 将使用常规 Linux 用户帐户进行身份验证。这很有帮助,但用于该连接的密码将通过纯文本发送,因此创建一个没有任何其他登录权限的专用 SOCKS 用户非常重要。为此,您将使用带有不会为用户分配登录 shell 的标志的 useradd,然后设置密码:

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

您还需要避免通过不安全的无线连接登录此帐户或过于广泛地共享服务器。否则,恶意行为者可以并且将反复努力登录。

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

Sudono / 等 / 但丁 d. conf

/etc/danted.conf

...
客户通过{
从:your_ip_address/0 到:0.0.0.0/0
}

为了支持多个 IP 地址,您可以使用 CIDR notation,或者只需添加另一个 client pass {} 配置块:

/etc/danted.conf

客户通过{
从:your_ip_address/0 到:0.0.0.0/0
}

客户通过{
从:another_ip_address/0 到:0.0.0.0/0
}

之后,您终于可以使用您的配置更改重新启动 Dante。

sudo systemctl restart danted.service

这一次,当您检查服务状态时,您应该会看到它正在运行且没有任何错误:

systemctl 状态 danted.service

输出● danted.service - SOCKS(v4 和 v5)代理守护进程(danted)
已加载:已加载(/lib/systemd/system/danted.service;已启用;供应商预设:启用>
活动:自 2021 年 12 月 16 日星期四 18:06:26 UTC 起活动(运行); 24 小时前

在下一步中,您最终将连接到您的代理。

第 3 步 — 通过 Dante 连接

为了演示您的 Dante 服务器,您将使用一个名为“curl”的命令行程序,该程序在发出不同类型的 Web 请求时很流行。一般来说,如果你想验证一个给定的连接是否应该在理想情况下在浏览器中工作,你应该总是先用 curl 进行测试。您将在本地机器上使用 curl 来执行此操作 - 它默认安装在所有现代 Windows、Mac 和 Linux 环境中,因此您可以打开任何本地 shell 来运行此命令:

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

输出* 正在尝试 138.197.103.77...
* TCP_NODELAY 设置
* SOCKS5 与 www.google.com:80 通信
* SOCKS5 连接到 IPv4 142.250.189.228(本地解析)
* SOCKS5 请求已获批准。
* 连接到 138.197.103.77 (138.197.103.77) 端口 1080 (#0)
> 获取/HTTP/1.1
...

您用于“curl”的凭据现在应该可以在您可能想要使用新代理服务器的任何其他地方使用。

结论

在本教程中,您学会了部署一个流行的开源 API 端点来代理流量,而开销很小甚至没有。许多应用程序都有内置的代理支持(通常在操作系统级别)可以追溯到几十年前,这使得这个代理堆栈具有高度可重用性。

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

因为代理服务器最常见的用例之一是代理进出不同全球区域的流量,您可能需要查看如何使用 [Ansible](https://www.digitalocean.com/community/tutorials/how-to -use-ansible-to-automate-initial-server-setup-on-ubuntu-20-04)接下来自动部署服务器,以防您发现自己想在其他数据中心复制此配置。

Logo

更多推荐