mirror of
https://github.com/XTLS/Xray-examples.git
synced 2025-02-23 07:29:29 +08:00
Add MITM
This commit is contained in:
parent
34a5900403
commit
7fce9e9d35
15
MITM-Domain-Fronting/README.md
Normal file
15
MITM-Domain-Fronting/README.md
Normal file
@ -0,0 +1,15 @@
|
||||
# MITM 域前置
|
||||
|
||||
ray 很久很久就支持 MITM, 这个功能一直被雪藏,所以还是决定对代码小修改之后放出模板。
|
||||
|
||||
这是个仅客户端模板,作用是对请求进行 MITM 解密 TLS 后重新以假 SNI 发出 TLS 请求,达到强行域前置的目的。这只是一个演示其作用机制的模板,它的作用也不止于此,你单纯用来进行 TLS 卸载供后续程序处理或者把明文数据加密进 TLS 隧道什么的也是一种用法。
|
||||
|
||||
使用前请确保你足够了解 TLS 和 HTTPS 协议.(至少需要知道 SNI 和 alpn 的工作机制)
|
||||
|
||||
这里的接入方法选择了手动使用 socks5 代理,实际上 socks5 代理只是个把请求劫持到本地任意门入站的方法,实际上你可以用 hosts 或者任何方法把请求劫持到 tag 为 tls-decrypt 的那个入站,都可以满足需求。
|
||||
|
||||
**请仔细阅读我留下的每一行注释**,有助于你理解工作原理和正确部署。
|
||||
|
||||
这个东西能工作的前提是该网站**接受域前置或无 SNI 请求,且有 IP 没有被墙**,你可能需要靠扫描或者社区收集寻找这样可用的 SNI 和 IP 集。
|
||||
|
||||
演示网站我选择了 e-hentai, 主要因为它的前端结构比较简单,只要处理了这个域名别的资源都可以正常加载,其他网站可能还需要处理一些资源域名。
|
120
MITM-Domain-Fronting/config.jsonc
Normal file
120
MITM-Domain-Fronting/config.jsonc
Normal file
@ -0,0 +1,120 @@
|
||||
{
|
||||
"log": {
|
||||
"loglevel": "debug"
|
||||
},
|
||||
"inbounds": [
|
||||
// 请求在该入站中被解密
|
||||
{
|
||||
"port": 4431,
|
||||
"listen": "127.0.0.1",
|
||||
"tag": "tls-decrypt",
|
||||
"protocol": "dokodemo-door",
|
||||
"settings": {
|
||||
"network": "tcp",
|
||||
"followRedirect": true
|
||||
},
|
||||
"streamSettings": {
|
||||
"security": "tls",
|
||||
"tlsSettings": {
|
||||
// 根据实际情况填写,这里适合绝大多数情况,如果你的网站仅支持 http/1.1, 就只保留 http/1.1
|
||||
// ps: 如果你选择了 http/1.1 那么你甚至可以用后续的路由模块屏蔽部分路径
|
||||
"alpn": [
|
||||
"h2",
|
||||
"http/1.1"
|
||||
],
|
||||
"certificates": [
|
||||
{
|
||||
"usage": "issue",
|
||||
// 下面的证书和私钥使用 xray tls cert 命令生成,或者你的自签名证书也行
|
||||
// 这会生成一个 CA 证书,每个新的要被 MITM 网站请求都会单独用这个 CA 签发一张临时证书
|
||||
// 所以你只需要在系统信任这一张证书就可以了,或者你可以忍得了浏览器的红标无视风险继续访问也行
|
||||
"certificate": [],
|
||||
"key": []
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
// 真正用到的入站
|
||||
{
|
||||
"port": 10801,
|
||||
"listen": "127.0.0.1",
|
||||
"tag": "socks-in",
|
||||
"protocol": "socks",
|
||||
"sniffing": {
|
||||
// 一般情况得开
|
||||
"enabled": true,
|
||||
"destOverride": [
|
||||
"http",
|
||||
"tls"
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"outbounds": [
|
||||
// 请求在该出站被强行重定向到 tls-decrypt 进行解密
|
||||
{
|
||||
"tag": "redirect-out",
|
||||
"protocol": "freedom",
|
||||
"settings": {
|
||||
"redirect": "127.0.0.1:4431"
|
||||
}
|
||||
},
|
||||
// 明文请求在这里被重新加密为正常 HTTPS 请求
|
||||
{
|
||||
"tag": "tls-repack",
|
||||
"protocol": "freedom",
|
||||
"settings": {
|
||||
// 你要连接到的服务器的最终IP以及端口,大多数情况下需要手动寻找这样允许域前置的IP
|
||||
"redirect": "104.20.19.168:443"
|
||||
},
|
||||
"streamSettings": {
|
||||
"security": "tls",
|
||||
"tlsSettings": {
|
||||
// fromMitm 会在客户端发送仅有 alpn http/1.1(大多数时候是wss) 的情况下使用同样的alpn
|
||||
// 旧版本没这个选项别直接把这玩意发出去了,去从上面复制那个h2+http/1.1复制下来(当然更新版本最好)
|
||||
"alpn": [
|
||||
"fromMitm"
|
||||
],
|
||||
// 你要发送的假 SNI, 根据你的网站接受的 SNI 而定
|
||||
// 当然你也可以留空或者我这样乱填个ip, 这样就不会有任何 SNI 扩展被发送,前提是你的网站接受无 SNI 请求
|
||||
"serverName": "11.45.1.4",
|
||||
// 你期望服务端返回证书里的包含的域名,这是新版本选项且要求 utls 启用,如果你手动禁用了 utls 或者是旧版本只能考虑开允许不安全
|
||||
"serverNameToVerify": "e-hentai.org"
|
||||
}
|
||||
}
|
||||
},
|
||||
// 无辜流量直接放行
|
||||
{
|
||||
"tag": "direct",
|
||||
"protocol": "freedom"
|
||||
}
|
||||
],
|
||||
"routing": {
|
||||
"domainStrategy": "AsIs",
|
||||
"rules": [
|
||||
{
|
||||
"inboundTag": [
|
||||
"tls-decrypt"
|
||||
],
|
||||
"outboundTag": "tls-repack"
|
||||
},
|
||||
{
|
||||
"inboundTag": [
|
||||
"socks-in"
|
||||
],
|
||||
// 你要 mitm 的网址
|
||||
"domain": [
|
||||
"e-hentai.org"
|
||||
],
|
||||
"outboundTag": "redirect-out"
|
||||
},
|
||||
{
|
||||
"inboundTag": [
|
||||
"socks-in"
|
||||
],
|
||||
"outboundTag": "direct"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user