Navieproxy+caddy
NaiveProxy是一种基于 HTTP/2 协议,并类似于Trojan协议,伪装成最流行的HTTPS流量的新代理技术协议。NaïveProxy使用Chrome的网络堆栈来伪装流量,具有很强的抗审查能力和低可探测性。重用Chrome的堆栈也确保了性能和安全方面的最佳实践。
NaïveProxy可以缓解以下几种流量攻击:
- 通过HTTP/2中的流量复用缓解指纹识别/流量分类
- 通过重复使用Chrome的网络堆栈缓解对于TLS参数指纹识别
- 通过「应用前置」,将代理服务器隐藏在一个常用的前端(Caddy)与应用层路由后面)来防御主动探测
- 通过填充长度缓解基于长度的流量分析。
NaïveProxy的代码由一系列补丁组成,基于每个新版本的Chrome进行变形和重构。
架构
[浏览器 → Naïve (客户端)] ⟶ 审查者 ⟶ [前端 → Naïve (服务端)] ⟶ Internet
NaïveProxy使用Chrome的网络栈。所以防火墙截获的流量行为与Chrome和标准前端服务器(如Caddy、HAProxy)之间的常规HTTP/2流量是完全相同的。
前端的Caddy会将未经过认证的用户和主动探测流量重定向至后端的伪装服务器(或其他网站),使其无法检测到代理的存在,例如:
[探测] ⟶ 前端 ⟶ [本地伪装index.html]
从v84版本开始,用户可以使用包含naïve的caddy forwardproxy分支来代替单独的naïve服务端
部署
安装go,caddy运行go版本新一点好。
snap install go --classic |
安装caddy
caddy是一个像 Apache, nginx, 或 lighttpd 的web服务器。相较nginx比较简单,而且全自动支持HTTP/2协议,无需任何配置。得益于go的特性,caddy只是一个小小的二进制文件,没有依赖,很好部署。
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest |
~/go/bin/xcaddy build --with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive |
老样子,查询asn
查找伪装网站
asn=="AS63150" && region=="SG" && port=="443" && cert!="Let's Encrypt" && cert.issuer!="ZeroSSL" && status_code="200" && is_domain=true |
kanglecapsule.com
创建Caddyfile文件
:443, 你的域名 #你的域名 |
客户端文件设置
{ |
下载新内核替换如V2rayN内,与chrome内核相对应版本。


测速,还是很猛的,速度可能会没reality快,看地区与延迟。

油管10W kbps

自定义端口(可选)
启动命令
./caddy start --config config.json |
新建一个config.json文件
//需删除注释内容caddy才能加载 |
TLS指纹
TLS指纹又叫SSL指纹,或者JA3指纹,TLS在建立连接时,客户端会向服务端发送client hello包,通过计算得到JA3指纹。在TLS握手中还有服务端响应的server hello包,也有特征,通过计算可以得到
即:
- JA3是标记客户端的指纹
- JA3S是标记服务端的指纹
- JARM是升级版的JA3S指纹
计算JA3
==Client Hello 的版本==、==可接受的加密算法==、==扩展列表中的每一个 type 值==、==支持的椭圆曲线==和==支持的椭圆曲线格式==。然后,用“==,==”来分隔各个字段、用使用”==-==”来分隔各个字段中的各个值(十进制哦),将这些值串联在一起之后,计算 MD5,就是一个 ja3 了。
更新的JA4指纹,JA4 可以直接对quic解析。
- JA4 — TLS Client
- JA4S — TLS Server Response
- JA4H — HTTP Client
- JA4L — Light Distance/Location
- JA4X — X509 TLS Certificate
- JA4SSH — SSH Traffic
TLS指纹查看
我们先不使用代理,抓个包看看

再使用代理浏览,指纹没有发生变化。

那再查看节点的指纹
下载jarm工具,监测的是探测是十次后的指纹
wget https://raw.githubusercontent.com/salesforce/jarm/master/jarm.py |

查询指纹,语法如下,可以找到四十多万条相同指纹的匹配网站,都是可以正常访问的网站,所以通过这个指纹并不能识别出是否正在使用代理。
jarm==“40d40d40d00000000043d40d40d43d684d61a135bd962c8dd9c541ddbaefa8” |
