在 Linux 上使用 Dante 搭建 SOCKS5 代理服务器,需要安装 dante-server 软件包,配置 /etc/danted.conf 来定义网络接口、认证方式和访问规则,然后启动 danted 服务。Dante 作为 SOCKS 服务器运行,在客户端与目标地址之间转发网络流量,提升网络安全性并实现对受限资源的访问。
前置条件
开始之前,请确认以下几点:
- 一台具备 root 或 sudo 权限的 Linux 服务器(例如 Debian、Ubuntu、CentOS、RHEL、Fedora)。
- 对 Linux 命令行和网络概念有基本了解。
- 一个供代理监听的网络接口(internal)和一个用于出站连接的接口(external)。二者可以是同一个。
安装
安装适用于您所用 Linux 发行版的 Dante 服务端软件包。
Debian/Ubuntu
sudo apt update
sudo apt install dante-server
RHEL/CentOS/Fedora
sudo dnf install dante-server # 适用于 Fedora/RHEL 8+
# 或者用于较旧的 CentOS/RHEL 7:
sudo yum install dante-server
配置
Dante 的主配置文件是 /etc/danted.conf。默认文件中可能包含示例配置;通常最好先备份原文件,再从一份精简、干净的配置开始。
sudo mv /etc/danted.conf /etc/danted.conf.bak
sudo nano /etc/danted.conf
基本配置结构
一份最小化的 danted.conf 需要定义监听接口(internal)、出站接口(external)以及基本访问规则。
logoutput: /var/log/danted.log
internal: 0.0.0.0 port=1080
external: eth0 # 将 eth0 替换为您服务器的外网网络接口
socksmethod: none
user.privileged: root
user.notprivileged: nobody
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: error connect disconnect
}
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: error connect disconnect
}
各指令说明:
logoutput:指定日志文件路径。internal:定义 Dante 监听客户端入站连接的网络接口和端口。0.0.0.0表示绑定到所有可用网络接口。port=1080是标准的 SOCKS 端口。- 您也可以指定具体的 IP 地址(例如
internal: 192.168.1.10 port=1080)。
external:定义 Dante 连接目标地址时使用的出站网络接口。请将eth0替换为服务器实际的公网或出站接口(例如ens3、enp0s3)。socksmethod:指定 SOCKS 客户端可用的认证方式。none表示不认证。user.privileged:Dante 执行特权操作(例如绑定低位端口)时使用的用户。user.notprivileged:初始化完成后,Dante 执行非特权操作时切换到的用户。client pass规则:控制哪些客户端可以连接到 Dante 服务器。from: 0.0.0.0/0允许来自任意 IP 地址的连接。出于安全考虑请加以限制。to: 0.0.0.0/0指定客户端连接的目标(在此语境下始终是代理自身)。
socks pass规则:控制 SOCKS 客户端可以通过代理访问哪些目标。from: 0.0.0.0/0指已成功认证或通过客户端规则的客户端。to: 0.0.0.0/0允许连接到任意目标。出于安全考虑请加以限制。log: error connect disconnect启用连接事件日志。
认证方式
Dante 支持多种认证方式。最常见的是 none(不认证)和 username(用户名/密码)。
1. 无认证(匿名)
该方式适用于可信的内部网络,即所有客户端都已知且被授权无需凭据即可使用代理。不建议用于面向公网的代理。
# ...(基本配置的其余部分)
socksmethod: none
client pass {
from: 192.168.1.0/24 to: 0.0.0.0/0 # 限制为指定子网
log: error connect disconnect
}
socks pass {
from: 192.168.1.0/24 to: 0.0.0.0/0 # 该子网的客户端可访问任意目标
log: error connect disconnect
}
2. 用户名/密码认证
这是 SOCKS5 代理最常见也最推荐的方式,尤其是在客户端来自外部或不可信时。Dante 使用系统用户进行认证。
步骤:
-
为代理创建一个系统用户。出于安全考虑,不要创建家目录,也不要分配 shell。
bash sudo useradd -r -s /bin/false proxyuser sudo passwd proxyuser # 输入并确认一个强密码
如需更多用户,重复以上操作。 -
修改
danted.conf:
```
logoutput: /var/log/danted.log
internal: 0.0.0.0 port=1080
external: eth0socksmethod: username # 启用用户名/密码认证
user.privileged: root
user.notprivileged: nobodyclient pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: error connect disconnect
}socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
socksmethod: username # SOCKS 连接需要用户名/密码
log: error connect disconnect
}
``socks pass规则中的socksmethod: username` 指令可确保只有通过认证的用户才能使用该代理。
3. 基于 IP 的认证
该方式允许特定 IP 地址或子网无需用户名/密码即可使用代理,并可与 username 认证组合使用。
# ...(配置的其余部分)
socksmethod: username # 允许使用用户名/密码作为可选方式
client pass {
from: 192.168.1.0/24 to: 0.0.0.0/0 # 允许指定子网免认证
log: error connect disconnect
}
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0 # 允许其他所有客户端,但要求认证
socksmethod: username
log: error connect disconnect
}
socks pass {
from: 192.168.1.0/24 to: 0.0.0.0/0 # 该子网的客户端可访问任意目标(无需认证)
log: error connect disconnect
}
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0 # 通过认证的客户端可访问任意目标
socksmethod: username
log: error connect disconnect
}
在这种配置下,来自 192.168.1.0/24 的客户端无需认证,而其他所有客户端都必须提供用户名和密码。
防火墙配置
配置好 Dante 之后,在系统防火墙中开放 SOCKS 端口(默认 1080),以允许入站连接。
Firewalld(CentOS/RHEL/Fedora)
sudo firewall-cmd --permanent --add-port=1080/tcp
sudo firewall-cmd --reload
UFW(Debian/Ubuntu)
sudo ufw allow 1080/tcp
sudo ufw enable # 如果 UFW 尚未启用
服务管理
完成配置和防火墙调整后,启动并设置开机自启 Dante 服务。
sudo systemctl start danted
sudo systemctl enable danted
sudo systemctl status danted
检查服务状态,确认其运行时没有报错。查看 /var/log/danted.log 排查配置问题。
测试代理
使用一台客户端机器测试 SOCKS5 代理。
使用 curl(不带认证)
curl -x socks5://YOUR_SERVER_IP:1080 http://ifconfig.me/ip
输出应为服务器的公网 IP 地址,说明流量已经过代理转发。
使用 curl(带用户名/密码认证)
curl -x socks5://proxyuser:your_password@YOUR_SERVER_IP:1080 http://ifconfig.me/ip
将 proxyuser 和 your_password 替换为先前配置的凭据。
使用 proxychains(Linux 客户端工具)
-
安装
proxychains:
bash sudo apt install proxychains4 # Debian/Ubuntu sudo dnf install proxychains-ng # RHEL/CentOS/Fedora -
配置
proxychains.conf:
编辑/etc/proxychains.conf或~/.proxychains/proxychains.conf。
注释掉strict_chain,取消注释dynamic_chain。
在文件末尾添加您的代理服务器信息:```
...(其他 proxychains 配置)
dynamic_chain
strict_chain
random_chain
round_robin_chain
dynamic_chain # 使用动态链,灵活性更好
[ProxyList]
add proxy here ...
socks5 127.0.0.1 9050
socks5 YOUR_SERVER_IP 1080 proxyuser your_password # 带认证
或者,不带认证:
socks5 YOUR_SERVER_IP 1080
```
-
用
proxychains测试:
bash proxychains curl http://ifconfig.me/ip
输出应显示您代理服务器的 IP 地址。
安全最佳实践
- 限制访问: 使用
client pass规则限定哪些客户端 IP 地址可以连接到您的代理。 - 强密码: 使用用户名/密码认证时,确保所有代理用户都设置了强度高且唯一的密码。
- 最小权限: 不要给
nobody用户或代理用户授予不必要的权限。 - 定期更新: 保持 Linux 操作系统和 Dante 软件包更新,及时修补安全漏洞。
- 日志与监控: 定期查看 Dante 日志(
/var/log/danted.log)以发现可疑活动。部署日志监控方案。 - 防火墙规则: 将防火墙配置为仅允许来自可信 IP 段的连接访问 SOCKS 端口(1080)。
- 专用用户: 使用专门的系统用户进行代理访问,而不是复用已有的用户账号。
- 关闭未使用的方式: 只启用确有必要的
socksmethod选项。
