代理服务器是一种服务器应用程序,充当最终用户和Internet资源之间的网关。通过代理服务器,最终用户能够出于各种目的控制和监视其Web流量,包括隐私、安全和缓存。例如,您可以使用代理服务器从与您自己的IP地址不同的IP地址发出Web请求。您还可以使用代理服务器来研究不同司法管辖区的网络服务方式,或避免某些监视或网络流量限制方法。
Dante 是一个稳定、流行、开源的SOCKS代理。在本教程中,您将安装和配置Dante以在Ubuntu 20.04服务器上提供SOCKS代理。
先决条件
要完成本指南,您将需要:
- Ubuntu 20.04服务器和具有sudo权限的非root用户。您可以在我们的Ubuntu 20.04初始服务器设置指南中了解有关如何设置具有这些权限的用户的更多信息。
在本教程中,您将使用域名your_domain,但应将其替换为您自己的域名或IP地址。
第1步 — 安装Dante
Dante是一个开源的SOCKS代理服务器。SOCKS是一种不太广泛使用的协议,但它对于某些点对点应用程序更有效,并且对于某些类型的流量,它比HTTP更受欢迎。首先,以非root用户身份运行以下命令,以更新软件包列表并安装Dante:
sudo apt update
sudo apt install dante-server
Dante还会自动设置后台服务,并在安装后启动。但是,它被设计为在首次运行时正常退出并显示错误消息,因为它在出厂时禁用了所有功能。您可以使用以下命令进行验证:systemctl
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的配置文件在 中提供。如果您使用或您喜欢的文本编辑器打开此文件,您将看到一长串配置选项,所有这些选项都被禁用。您可以尝试浏览此文件并逐行启用某些选项,但实际上删除此文件并从头开始替换它会更有效、更易读。不要担心这样做。您可以随时通过导航到其在线手册来查看Dante的默认配置,如果您愿意,您甚至可以从Ubuntu的软件包列表中手动重新下载软件包以重新获取库存配置文件。同时,继续删除它:/etc/danted.confnano
sudo rm /etc/danted.conf
现在,您可以用更简洁的内容替换它。如果文件不存在,使用文本编辑器打开文件将自动创建该文件,因此通过使用或您喜欢的文本编辑器,您现在应该得到一个空的配置文件:nano
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指Dante将如何记录连接,在本例中为常规系统日志记录
- user.privileged允许Dante具有检查权限的权限root
- user.unprivileged不授予服务器以非特权用户身份运行的任何权限,因为在不授予更精细的权限时,这是不必要的
- internal连接详细信息指定运行服务的端口以及可以连接的IP地址
- external连接详细信息指定用于出站连接的网络接口,默认情况下在大多数服务器上eth0
其余的配置详细信息涉及身份验证方法,下一节将对此进行讨论。如果您使用以下命令,请不要忘记在防火墙中打开端口1080:
sudo ufw allow 1080
此时,您可以重新启动Dante并连接到它,但您将拥有一个向全世界开放的SOCKS服务器,您可能不想要它,因此您将首先学习如何保护它。
第2步 — 保护Dante
如果您到目前为止遵循了本教程,Dante将使用常规的Linux用户帐户进行身份验证。这很有帮助,但用于该连接的密码将通过纯文本发送,因此创建一个没有任何其他登录权限的专用SOCKS用户非常重要。为此,您将使用不会将登录shell分配给用户的标志,然后设置密码:
sudo useradd -r -s /bin/false your_dante_user
sudo passwd your_dante_user
您还需要避免通过不安全的无线连接登录此帐户或过于广泛地共享服务器。否则,恶意行为者可以并且将会反复尝试登录。
Dante支持其他身份验证方法,但许多将连接到SOCKS代理的客户端(即应用程序)仅支持基本的用户名和密码身份验证,因此您可能希望将该部分保持原样。作为替代方法,您可以做的是将访问限制为仅特定IP地址。这不是最复杂的选择,但考虑到这里使用的技术组合,这是一个明智的选择。您可能已经从我们的先决条件教程中学习了如何限制对特定IP地址的访问,但您也可以直接在Dante中执行此操作。编辑您的 :
sudo nano /etc/danted.conf
/etc/danted.conf文件
…
client pass {
from: your_ip_address/0 to: 0.0.0.0/0
}
为了支持多个IP地址,您可以使用 CIDR表示法,或者只添加另一个配置块:client pass {}
/etc/danted.conf文件
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
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
在下一步中,您将最终连接到您的代理。
第3步 — 通过Dante连接
为了演示您的Dante服务器,您将使用一个名为 的命令行程序,该程序在发出不同类型的Web请求时很受欢迎。通常,如果要验证给定连接在理想情况下是否应在浏览器中工作,则应始终首先使用 进行测试。为此,您将在本地计算机上使用curl – 默认情况下,它安装在所有现代Windows、Mac和Linux环境中,因此您可以打开任何本地shell来运行此命令:
curl -v -x socks5://your_dante_user:your_dante_password@your_server_ip:1080 http://www.google.com/
Output* 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
…