用 Dante 搭建受限的 SOCKS5 服务器
为 Dante 1.4.4 配置指定监听地址、一个获准客户端和一个获准目标,并分清两阶段规则。
Dante 会做两次访问检查:客户端规则允许传入来源接入,SOCKS 规则则允许所请求的目标与命令。这个 Dante 1.4.4 示例只允许一个客户端访问一个受控目标的 443 端口。
服务账号与地址
如果安装时没有提供专用账号,先创建一个低权限账号:
sudo useradd --system --no-create-home --shell /usr/sbin/nologin danteproxy
下面的配置使用高位端口,并按来源设置允许名单,两种运行身份都可以使用这个账号。若启用密码认证或需要特权的功能,就要重新检查这些身份设置。使用前请替换所有文档示例地址。
logoutput: stderr
internal: 192.0.2.10 port = 1080
external: 192.0.2.10
clientmethod: none
socksmethod: none
user.privileged: danteproxy
user.unprivileged: danteproxy
client pass {
from: 198.51.100.27/32 to: 192.0.2.10/32 port = 1080
log: connect error
}
socks pass {
from: 198.51.100.27/32 to: 203.0.113.20/32 port = 443
command: connect
log: connect error
}
internal 选择面向客户端的监听地址,external 选择出站地址。只有一个网络接口的服务器,两者可以使用同一个已分配地址。适合时也可以填写接口名,但要确认它会展开为哪些地址。
这套规则允许什么
第一条规则允许指定来源连接监听端。第二条只允许向指定目标发起 CONNECT。不匹配的请求仍被阻止,包括 BIND 和 UDP ASSOCIATE。
这些 method 设置不提供用户名认证。访问控制依赖严格的来源规则及其网络边界,只有该来源能代表获准客户端时才适用。
sockd -V -f /path/to/sockd.conf
有些发行版把可执行文件命名为 danted。启动服务前,用已安装的命令检查配置。在防火墙上实施相应的来源限制,再测试获准目标和一个理应被拒绝的受控目标。