
背景
在HTTP/HTTPS的世界里,TCP/IP数据包的源和目标是公开的。恶意的第三方可以干扰网络连接,将污染过的数据包发送给请求源,从而实现阻止或中断连接。
目前已知的攻击手段包括:
- IP封锁 - 对指定IP地址的任何连接尝试都会被恶意的第三方阻止。
- DNS欺骗 - 返回错误的IP地址。
- 包过滤 - 当包中被检测到特定的词句时该数据包将会被阻止或丢弃。
- TCP RST - 对在黑名单中的目的地址进行访问时会发送
RST包,TCP连接将会立即中断。 - 深度学习 - 利用集群深度学习,恶意方可以快速找到可疑的IP地址。
在这样的封锁下,想要在自由的网络中呼吸新鲜空气听起来像是在做梦。但是极客们显然不愿意因此丢失任何一个数据包。
解决方案是利用强加密算法的SOCKS5协议。
用途
- 穿透防火墙封锁
- 隐藏所有数据包数据,包括源,目标,载荷等
工作原理
下面介绍常见的安全SOCKS5代理的开发技术及其工作原理
工作模式介绍
自由网络
在没有恶意攻击者的情况下,客户端与服务器端可以正常通讯。

被封锁的网络
恶意攻击者可以在客户端和服务器之间部署类似防火墙的系统,这样任何请求都不会到达服务器。因此,最终用户无法从服务器获取任何数据。

代理
一种合理的方法是在防火墙之外设置代理服务器。所有流量都需要先通过代理服务器,然后由代理服务器中继。目前代理技术包括HTTP代理,Socks服务,VPN服务,SSH隧道等。SOCKS5也是其中一种代理协议。

举个例子,当请求通过SSH隧道传输时,防火墙无法识别流量,因为数据已加密。但问题是,在创建隧道时进行SSH握手时,很可能会发现代理服务器被用作代理。因此防火墙可以阻止SSH隧道创建步骤的网络连接。
安全代理
安全的socks代理不应向防火墙公开以下信息:
- 任何表明它被用作代理的特征
- 任何真实传输的数据

要解决上述模型中存在的问题,SOCKS5需要进行改进。我们可以把SOCKS5拆分成两部分,socks5-local和socks5-remote
上图中SOCKS5的工作原理主要可以概括为以下几步:
- 客户端通过
SOCKS5协议向本地代理发送请求。 - 本地代理通过
HTTP协议发送加密后的请求数据。 - 因为HTTP协议没有明显的特征,并且远程代理服务器尚未被识别为代理,因此请求可以穿透防火墙。
- 远程代理服务器解密数据后中继到真实服务。
- 真实服务将响应返回到远程代理服务器,并通过相同的路径传播回客户端。
使用SOCKS5作为本地代理协议
SOCKS5在客户端有广泛的支持。我们很容易得到通过SOCKS5从客户端传输数据到本地代理服务器的好处。 SOCKS5在第5层上执行数据传输。
下面的curl命令演示了客户端能够使用SOCKS5连接到SOCKS5代理服务器:
1 | curl --socks5 127.0.0.1:1080 https://google.com |
为什么使用HTTP作为传输协议
HTTP可能是整个互联网上最常见的流量类型。选择HTTP作为传输协议以突破防火墙使得数据包和服务器不太可能被识别用于代理使用。
HTTPS不适合防火墙突破。因为HTTPS的设计目的是:
- 避免恶意方改变内容
- 避免恶意方伪装成目标服务器
- 数据加密
而代理软件的目的应满足以下要求:
- 避免目标服务器被识别
- 避免代理服务器被识别为代理
- 数据加密
基于以上原因,HTTP是突破防火墙比HTTPS或任何其他协议更好的选择。
加密算法
密码算法对数据进行加密和解密,这样任何人都无法从加密流中读取数据,除了LocalProxy和RemoteProxy。由于AEAD密码同时提供机密性,完整性和真实性,建议选择下面列出的AEAD系列之一作为在本地代理和远程代理中使用的密码算法:
- chacha20-ietf-poly1305
- aes-256-gcm
- aes-128-gcm
解决方案
Shadowsocks是一款出色的安全socks5代理解决方案。查看其官方网站了解更多信息。
挑战和风险
客户端
- 恶意方可以在客户端安装干扰软件,以阻止本地软件和LocalProxy之间的连接。
- 这可以通过强制安装来实现
- 它也可以通过嵌入广泛安装的软件来实现
- 恶意方可能会强制该人卸载LocalProxy
服务端
必须将服务器端部署到没有防火墙阻止的环境中
- 恶意方可以强制云提供商或潜入云服务器做以下事情:
- 窃取服务器日志文件
- 杀死ServerProxy进程
- 恶意方也可以是云提供商
不安全的加密算法
使用何种加密算法取决于用户,如果最终用户选择不安全的密码算法,可能会增加服务器被识别为代理服务器的风险。提供代理服务的服务器将被封锁。
IP白名单限制
如果最终用户只能连接到选定范围的IP列表(即IP白名单),则用户无法使用SOCKS5服务器,因为SOCKS5服务器IP不太可能包含在IP白名单中。
进一步的风险
当最终用户泄露密码密钥和流量历史记录时,恶意方可以解密过去的所有流量。
执法监管
即使使用安全的SOCKS5代理,也要注意不要泄露任何个人信息。卸载掉那些不可信任的安全证书和软件,据说Shadowsocks的发明者因为通过QQ与朋友聊天最后被“喝茶”。 :)
总结
通过秘密部署安全的SOCKS5代理服务器并选择强密码算法,人们可以突破严重的网络封锁。 Shadowsocks可能是您的首选。
本文翻译自secure-socks5-proxy,包含少量修改。