风扇滑翔翼 hace 8 meses
padre
commit
7fce9e9d35
Se han modificado 2 ficheros con 135 adiciones y 0 borrados
  1. 15 0
      MITM-Domain-Fronting/README.md
  2. 120 0
      MITM-Domain-Fronting/config.jsonc

+ 15 - 0
MITM-Domain-Fronting/README.md

@@ -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 - 0
MITM-Domain-Fronting/config.jsonc

@@ -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"
+            }
+        ]
+    }
+}