Skip to content

Security: shikanon/socks5proxy

Security

docs/security.md

安全与威胁模型

保护范围

模式 客户端至服务端链路 身份/完整性 部署边界
proxy + simple/random 可还原的字节混淆 无可靠身份认证、无完整性、无重放保护 限制在可信网络或另外提供安全传输
tunnel + quic QUIC + TLS 1.3 验证服务端证书,客户端令牌认证,TLS 完整性 保护外层网络链路
tunnel + tcp TCP + TLS 1.3 验证证书,挑战/HMAC 认证,TLS 完整性 保护外层网络链路
tunnel + tcp-plain 明文 IP 数据,混淆可选 挑战/HMAC 只认证握手,不保护后续 IP 包 显式选择的非保密测试模式

被动监听者

proxy 的两个混淆算法都只使用密码字节和模 256 的结果决定替换表,每种算法至多有 256 张表。相同字节总是映射到相同字节,已知的 SOCKS 握手进一步降低还原难度。增加密码长度不能修复这一点,random 不等于随机密钥流。

quic / tcp 的保密性来自 TLS。被动观察者仍可看到端点地址、时间和流量大小。没有流量形态隐匿、匿名性或不可探测性承诺。

主动攻击者

proxy 和 tcp-plain 不阻止线路上的篡改、注入或中继。TCP 的新鲜挑战阻止直接复用旧握手证明,但不会使明文数据获得完整性。TLS 模式校验服务端证书及名称,校验失败不会自动降级到明文。不要通过关闭证书校验绕过错误。

TCP 服务端保存的令牌摘要等价于其认证凭据;应与令牌一样保密。不同客户端应使用独立令牌,性能实验使用独立测试令牌。私钥、令牌与摘要文件只允许必要账户读取。

本地及出口信任

  • 应用代理的本地 HTTP/SOCKS5 入口没有用户名/密码认证。CLI 默认绑定 127.0.0.1:8888,同机进程仍可以使用它。改为 :8888 会暴露到其他网络接口,需另行限制访问来源。
  • proxy 的 -passwd 是混淆参数,不是可靠的访问控制。服务端默认 :18888,应通过主机/云防火墙限制来源;不能将密码长度作为公网暴露的防护。
  • SOCKS 服务端没有目标地址 ACL。能访问代理的一方可能访问服务端可达的内网、回环和元数据地址。按实际授权范围配置出口防火墙,避免把代理开放给不可信用户。
  • 服务端拥有解封装后的流量及 DNS 查询可见性;服务端至目标站点的链路并不会因为外层隧道而自动加密。使用正确验证证书的 HTTPS 等端到端协议保护应用数据。
  • 进程并发上限、握手/空闲超时和 Accept 退避缓解 FD 耗尽,不构成抗 DDoS 保证。监听队列、主机其他进程和系统总 FD 限额也会影响可用性。

全局隧道限制

隧道仅承载 IPv4。macOS、Windows 和移动端有 IPv6 阻断策略;Linux 需要自行禁用或限制 IPv6,避免未被隧道接管的流量旁路。应用代理模式只代理显式配置它的应用,也不自动改变所有应用的 DNS 行为。

桌面客户端在连接中断时保留隧道路由并重连,正常停止时恢复原网络。该行为不是覆盖进程崩溃、启动前/退出后、全部系统接口及外部路由变更的通用 kill switch。移动端的系统 VPN/按需连接策略也需要平台配置。对严格流量隔离的需求,应增加独立的主机防火墙策略并实测。

运行环境、平台验收状态和恢复步骤见隧道部署与移动客户端。

There aren't any published security advisories