From b1e8066a73cd2b1b033cb227ddadae090ac57fe4 Mon Sep 17 00:00:00 2001 From: DVK Date: Thu, 25 Jan 2024 18:10:07 +0800 Subject: [PATCH] docs: update manual && update yarn && fix a little bug (#49) --- README.md | 6 +- cmd/client/control.go | 12 +- docs/README.md | 2 +- .../00.introduce.md" | 44 +++---- .../01.start.md" | 75 ++++++++---- .../01.aliyun.md" | 8 ++ .../02.sealos.md" | 109 +++++++++++------- .../03.tecent.md" | 5 + .../09.serverless.md" | 82 ++++++++----- .../01.docker.md" | 20 +++- .../02.binary.md" | 12 +- docs/package.json | 8 +- .../01.feature.md" | 23 ++++ .../01.\347\275\221\347\273\234/01.HTTP.md" | 0 .../01.\347\275\221\347\273\234/02.SOCKS5.md" | 0 .../01.WEBSHELL.md" | 21 ---- docs/yarn.lock | 8 +- pkg/service/grpc.go | 4 + pkg/service/websocket.go | 5 +- pkg/transfer/transfer.go | 10 ++ s.yaml | 2 +- 21 files changed, 283 insertions(+), 173 deletions(-) rename "docs/tech/01.\347\275\221\347\273\234\345\261\202/01.HTTP.md" => "docs/tech/01.\347\275\221\347\273\234/01.HTTP.md" (100%) rename "docs/tech/01.\347\275\221\347\273\234\345\261\202/02.SOCKS5.md" => "docs/tech/01.\347\275\221\347\273\234/02.SOCKS5.md" (100%) delete mode 100644 "docs/tech/02.\345\272\224\347\224\250\345\261\202/01.WEBSHELL.md" diff --git a/README.md b/README.md index 75eb3b3..0111ac3 100644 --- a/README.md +++ b/README.md @@ -22,11 +22,11 @@ > 🌕 月出于云却隐于海 -月海(Sea Moon) 是一款 FaaS/BaaS 实现的 Serverless 云代理/渗透工具集,致力于开启云原生的渗透模式。 +月海(Sea Moon) 是一款 FaaS/BaaS 实现的 Serverless 网络工具集,期望利用云原生的优势,实现更简单、更便宜的网络功能。 -月海之名取自于苏轼的《西江月·顷在黄州》,寓意月海取自于传统安全工具,用之于云,最终达到隐匿于海的效果。 +月海之名取自于苏轼的《西江月·顷在黄州》,寓意月海取自于传统工具,用之于云,最终达到隐匿于海的效果。 -直白来讲,月海其实就是一款利用云函数来代理/隐匿攻击行踪以及一些安全相关的匿名性对抗。 +月海基于 Serverless 的动态特性、分别从网络层、应用层实现对应的安全能力,并利用serverless-devs工具来实现快捷的部署/跨厂商操作。 想要了解更多,请移步 [官方手册](https://seamoon.dvkunion.cn) diff --git a/cmd/client/control.go b/cmd/client/control.go index f3a415c..326e7db 100644 --- a/cmd/client/control.go +++ b/cmd/client/control.go @@ -43,7 +43,12 @@ func doListen(ctx context.Context, t transfer.Type) error { var proxyType tunnel.Type for _, p := range Config().ProxyAddr { if strings.HasPrefix(p, "ws://") { - proxyAddr = strings.TrimPrefix(p, "ws://") + proxyAddr = p + proxyType = tunnel.WST + break + } + if strings.HasPrefix(p, "wss://") { + proxyAddr = p proxyType = tunnel.WST break } @@ -52,6 +57,11 @@ func doListen(ctx context.Context, t transfer.Type) error { proxyType = tunnel.GRT break } + if strings.HasPrefix(p, "grpcs://") { + proxyAddr = p + proxyType = tunnel.GRT + break + } } if proxyAddr == "" || proxyType == "" { return errors.New(consts.PROXY_ADDR_ERROR) diff --git a/docs/README.md b/docs/README.md index f9820aa..fb5da1c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -11,7 +11,7 @@ features: - title: 🫥 隐匿 details: 基于 FaaS/BaaS 实现动态IP代理,云上无痕。 - title: 🗃️ 集成 - details: 在传统渗透的基础上,集成常用功能,实现渗透一键开火。 + details: 适配大量云服务商,拒绝服务绑架。 - title: 🚀 便携 details: 以 Serverless Devs为基础,实现跨平台快速部署。 --- \ No newline at end of file diff --git "a/docs/guide/00.\346\246\202\350\277\260/00.introduce.md" "b/docs/guide/00.\346\246\202\350\277\260/00.introduce.md" index 4cbcb04..80c5177 100644 --- "a/docs/guide/00.\346\246\202\350\277\260/00.introduce.md" +++ "b/docs/guide/00.\346\246\202\350\277\260/00.introduce.md" @@ -1,6 +1,6 @@ --- title: 简介 -titleTag: 1.1.3 +titleTag: 1.2.0-beta.2 date: 2022-09-28 22:39:36 permalink: /guide/introduce article: false @@ -18,15 +18,11 @@ article: false > 🌕 月出于云却隐于海 -月海(Sea Moon) 是一款 FaaS/BaaS 实现的 Serverless 云代理/渗透工具集,致力于开启云原生的渗透模式。 +月海(Sea Moon) 是一款 FaaS/BaaS 实现的 Serverless 网络工具集,期望利用云原生的优势,实现更简单、更便宜的网络功能。 -月海之名取自于苏轼的《西江月·顷在黄州》,寓意月海取自于传统安全工具,用之于云,最终达到隐匿于海的效果。 +月海之名取自于苏轼的《西江月·顷在黄州》,寓意月海取自于传统工具,用之于云,最终达到隐匿于海的效果。 -直白来讲,月海其实就是一款利用云函数来代理/隐匿攻击行踪以及一些安全相关的匿名性对抗。 - -基于 Serverless 的动态特性、分别从网络层、应用层实现对应的安全能力,并利用serverless-devs工具来实现快捷的部署/跨厂商操作。 - -真正的实现渗透上云,赋能安全云原生红利。 +月海基于 Serverless 的动态特性、分别从网络层、应用层实现对应的安全能力,并利用serverless-devs工具来实现快捷的部署/跨厂商操作。 觉得项目不错的话,[还请给一个star ✨](https://github.com/DVKunion/SeaMoon), 你的支持是更新的最大动力~ @@ -51,19 +47,6 @@ article: false **NAT穿透** -### 应用层 - -月海的应用层能力是基于网络层的思考基础上,实现的真正上层渗透业务。主要分为两个方向: - -+ 传统工具云上集成。例如:端口探测,网络反馈等,将传统且重要地渗透步骤打包上云,实现封装。 -+ 隐蔽性功能: 重点在于思考如何结合serverless的特性,深入挖掘隐蔽性的一些实现,如:动态webshell连接。 - -目前应用层功能如下: - -| 能力名称 | 原理文档 | 服务端支持 | 客户端支持 | -|--------------|---------------------------------------------------------------|:-----:|:-----:| -| 动态WebShell隐匿 | [WebShell.md](https://seamoon.dvkunion.cn/tech/app/webshell/) | 🐷待开发 | 🐷待开发 | - ### 其他特性 | 能力名称 | 原理文档 | 服务端支持 | 客户端支持 | @@ -75,14 +58,15 @@ article: false ## 🧭 支持平台 -| 平台名称 | 是否支持 | 部署文档 | -|----------|:-----:|:------:| -| 阿里云 | ✅ | [部署]() | -| 腾讯云 | ✅ | [部署]() | -| 🔥Sealos | ✅ | [部署]() | -| 华为云 | 🐷调研中 | [部署]() | -| AWS | 🐷调研中 | [部署]() | -| Google | 🐷调研中 | [部署]() | +| 平台名称 | 是否支持 | 部署文档 | +|----------|:-----:|:------------------------------------------------------:| +| 阿里云 | ✅ | [部署](https://seamoon.dvkunion.cn/guide/deploy/aliyun) | +| 腾讯云 | ✅ | [部署](https://seamoon.dvkunion.cn/guide/deploy/tencent) | +| 🔥Sealos | ✅ | [部署](https://seamoon.dvkunion.cn/guide/deploy/sealos) | +| 华为云 | ✅ | [部署]() | +| 百度云 | ✅ | [部署]() | +| AWS | 🐷调研中 | [部署]() | +| Google | 🐷调研中 | [部署]() | ## ➡️ 后续方向 @@ -102,6 +86,6 @@ article: false ## ❗ 免责声明 -本工具仅用于学习serverless以及云原生相关技术,请勿用于其他用途。 +本工具仅用于学习 serverless 以及云原生相关技术,请勿用于其他用途。 如您在使用本工具的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。 \ No newline at end of file diff --git "a/docs/guide/01.\345\274\200\345\247\213\344\275\277\347\224\250/01.start.md" "b/docs/guide/01.\345\274\200\345\247\213\344\275\277\347\224\250/01.start.md" index a887ddf..5c9719d 100644 --- "a/docs/guide/01.\345\274\200\345\247\213\344\275\277\347\224\250/01.start.md" +++ "b/docs/guide/01.\345\274\200\345\247\213\344\275\277\347\224\250/01.start.md" @@ -12,13 +12,14 @@ article: false ::: tip 写在前面 本页面按照阿里云标准云函数服务进行部署,如果您希望获取到更多自定义的配置和使用方式,[请跳转](https://seamoon.dvkunion.cn/guide/deploy) -🔥 如果您的钱包和预算有限,并且代理IP需求并不是特别高,这里推荐使用[sealos部署服务端](https://seamoon.dvkunion.cn/guide/deploy/sealos) +🔥 +如果您的钱包和预算有限,并且代理IP需求并不是特别高,这里推荐使用 [sealos部署服务端](https://seamoon.dvkunion.cn/guide/deploy/sealos) ::: ### 事前准备 + 云厂商账户(以阿里云为例),并开通对应的serverless服务(阿里云serverless服务名为:函数计算) -+ 云厂商账户AK/SK,并拥有操作FC的全部权限。 ++ 云厂商账户 AK/SK,并拥有操作FC的全部权限。 + 一台存在docker、Nodejs >= 12 的客户端的机器,同时保证 7777、1080、9999端口未被占用,该机器将作为使用的客户端。 ### Step.1 安装serverless-devs工具 @@ -43,6 +44,10 @@ $ s -v 将可以看到serverless-devs版本,表示安装成功。 +```shell +@serverless-devs/s3: 0.1.0, s-home: /Users/DVK/.s, darwin-arm64, node-v20.9.0 +``` + 然后通过如下命令开始配置云厂商认证 ```shell @@ -73,28 +78,41 @@ $ s deploy 稍等片刻,你将会得到部署好的两个地址: ```yaml -SeaMoon-FC-HTTP-Proxy: -..... - url: - system_url: https://http-proxy-seamoon-xxxxxxxxx.run - system_intranet_url: https://http-proxy-seamoon-xxxxxxxxx.fcapp.run - custom_domain: - - - domain: http://http-proxy.seamoon-service.xxxxxxxxx.fc.devsapp.net - triggers: - - - type: http +SeaMoon-WST-Node: + region: cn-hongkong + service: + name: SeaMoon-Service + function: + name: ws-node + runtime: custom + handler: main + memorySize: 128 + timeout: 300 + cpu: 0.05 + diskSize: 512 + url: + system_url: https://ws-node-seamoon-service-xxxxxxxx.cn-hongkong.fcapp.run + system_intranet_url: https://ws-node-seamoon-service-xxxxxxxx.cn-hongkong-vpc.fcapp.run + triggers: + - type: http name: httpTrigger -... - url: - system_url: https://socks-proxy-seamoon-xxxxxxxxx.fcapp.run - system_intranet_url: https://socks-proxy-seamoon-xxxxxxxxx.fcapp.run - custom_domain: - - - domain: http://socks-proxy.seamoon-service.xxxxxxxxx.fc.devsapp.net - triggers: - - - type: http +SeaMoon-GRT-Node: + region: cn-hongkong + service: + name: SeaMoon-Service + function: + name: grpc-node + runtime: custom + handler: main + memorySize: 128 + timeout: 300 + cpu: 0.05 + diskSize: 512 + url: + system_url: https://grpc-node-seamoon-service-xxxxxxxx.cn-hongkong.fcapp.run + system_intranet_url: https://grpc-node-seamoon-service-xxxxxxxx.cn-hongkong-vpc.fcapp.run + triggers: + - type: http name: httpTrigger ``` @@ -107,7 +125,8 @@ SeaMoon-FC-HTTP-Proxy: ### Step.3 开启客户端使用 ```shell -$ docker run -it -d --net=host dvkunion/seamoon-client +$ docker run -it -d --net=host dvkunion/seamoon:latest proxy + ``` 默认使用`--net=host`模式,然后浏览器打开: @@ -122,7 +141,13 @@ $ docker run -it -d --net=host dvkunion/seamoon-client ![client-config](https://seamoon.oss-cn-hangzhou.aliyuncs.com/66b1b150238e400483adf936649b7ed5.png) -> 注意,此处填写的值为 Step.2 中输出的 domain字段,并去除 http:// 协议头,属于对应域名即可。 +::: tip 如何填写地址 +我们在步骤2的时候,如果你是使用 s 工具实现的部署,那么最终的 yaml 内可以看到 url 字段,url 字段内的 system_url 即为我们需要的地址。 +不要使用带有 vpc 字样的 url, 也就是 system_intranet_url 字段的值,这是内网 vpc 访问的域名。 +除此之外,需要自行将协议头 https:// 替换为对应的隧道协议,如: ws:// 或是 grcp:// 。默认两种协议的隧道是都部署了的。 +grpc 按照阿里云的要求,还需要自行声明端口,由此,一个 grpc 隧道的填写应该是这样: grpc://grpc-node-seamoon-service-xxxxxxxx.cn-hongkong.fcapp.run:8089 +8089 是阿里云的固定 grpc 协议端口,不需要改动。 +::: 开启socks5代理,并保持默认`:1080`不改变。 diff --git "a/docs/guide/02.\346\234\215\345\212\241\351\203\250\347\275\262/01.aliyun.md" "b/docs/guide/02.\346\234\215\345\212\241\351\203\250\347\275\262/01.aliyun.md" index e2f1234..4066549 100644 --- "a/docs/guide/02.\346\234\215\345\212\241\351\203\250\347\275\262/01.aliyun.md" +++ "b/docs/guide/02.\346\234\215\345\212\241\351\203\250\347\275\262/01.aliyun.md" @@ -45,5 +45,13 @@ article: false [开启客户端并填入配置](https://seamoon.dvkunion.cn/guide/client/), 尽情享用。 +::: tip 如何填写地址 +将协议头 https:// 替换为对应的隧道协议,如: ws:// 或是 grcp:// 。默认两种协议的隧道是都部署了的。 + +grpc 按照阿里云的要求,还需要自行声明端口,由此,一个 grpc 隧道的填写应该是这样: grpc://grpc-node-seamoon-service-xxxxxxxx.cn-hongkong.fcapp.run:8089 + +8089 是阿里云的固定 grpc 协议端口,不需要改动。 +::: + ## 效果展示 ![speed](https://seamoon.oss-cn-hangzhou.aliyuncs.com/7bfff588795a4e41b488694ad4eb5153.png) \ No newline at end of file diff --git "a/docs/guide/02.\346\234\215\345\212\241\351\203\250\347\275\262/02.sealos.md" "b/docs/guide/02.\346\234\215\345\212\241\351\203\250\347\275\262/02.sealos.md" index d1932f0..155fddf 100644 --- "a/docs/guide/02.\346\234\215\345\212\241\351\203\250\347\275\262/02.sealos.md" +++ "b/docs/guide/02.\346\234\215\345\212\241\351\203\250\347\275\262/02.sealos.md" @@ -30,48 +30,75 @@ sealos的计费方式真正的做到按照计算量计费,费用透明,整 sealos支持快速弹性扩容,当需求高时,可以调低扩容触发点,获取到更多IP 当不需要使用时,可以快速的pause停止;下次使用时又能快速的恢复。 -![sealos-deploy](https://seamoon.oss-cn-hangzhou.aliyuncs.com/a4ae5ecbe22941579a059cee3cd0dbf6.png) +![sealos-container](https://seamoon.oss-cn-hangzhou.aliyuncs.com/500897ae5b5f48d9b20f18d3f3eaa7ea.png) ## 如何部署 sealos上部署seamoon服务将更加简单,只需要鼠标点击操作: -### Step.1 +### Step.1 注册账户 注册并登陆[cloud.sealos.io](https://cloud.sealos.io/), 点击`App Launchpad` ![sealos-applanch](https://seamoon.oss-cn-hangzhou.aliyuncs.com/4bfbdf9f9ad5440b91ec85831c062b07.png) -### Step.2 +### Step.2 部署 + +::: warning 注意 +sealos 并不是部署一个服务 就带着两种类型的隧道。因此,如果你希望使用 websocket 隧道, 需要部署 websocket 类型的服务。 + +同样的,如果你需要 grpc 隧道,选择部署 grpc 服务。 +::: 点击右上角`create application`, 如下填写参数: -![sealos-setting-1](https://seamoon.oss-cn-hangzhou.aliyuncs.com/cb4a3fe0546b45a99c4944fb4fbb5246.png) +![sealos-config](https://seamoon.oss-cn-hangzhou.aliyuncs.com/f331255e64724bba8d84add292cae6e0.png) + +::: tip 提示 +此处,如果你部署的是 grpc 隧道的话,请将端口改为 8089,协议选择 grpc, 如下图: +![sealos-config-grpc](https://seamoon.oss-cn-hangzhou.aliyuncs.com/68f55dbfb40d4310b9aae6674d335817.png) +::: + +往下拉,还有高级配置里面的启动命令: + +![sealos-config-2](https://seamoon.oss-cn-hangzhou.aliyuncs.com/7c92e240241845869b6b796d42ff1e31.png) + +::: tip 提示 +此处,如果你部署的是 grpc 隧道的话,请修改此处的启动命令为: +`/app/seamoon server -p 8089 -t grpc` , 如下图: +![sealos-config-grpc-2](https://seamoon.oss-cn-hangzhou.aliyuncs.com/608d9fcde8684d5cb19940bb33e90a4a.png) + +::: + -![sealos-setting-2](https://seamoon.oss-cn-hangzhou.aliyuncs.com/3e0ecdaed4d645e8bdf45843e8c3d80f.png) 你也可以直接选择yaml文件,参考如下: -service.yaml +> 注意,下面的 yaml 仅供参考,我隐去了一些身份相关的字段,没有展示出来,只列出了一些关键的项目。 +> 可以用于参考和对比。没出现的参数代表意义不大,不用管。 + + + ```yaml apiVersion: v1 kind: Service metadata: - name: seamoon-server - labels: - cloud.sealos.io/app-deploy-manager: seamoon-server + name: seamoon-ws + labels: + cloud.sealos.io/app-deploy-manager: seamoon-ws spec: - ports: - - port: 9000 - targetPort: 9000 - name: '' - selector: - app: seamoon-server + ports: + - port: 9000 + targetPort: 9000 + selector: + app: seamoon-ws ``` -deployment.yaml + + + ```yaml apiVersion: apps/v1 @@ -123,57 +150,46 @@ spec: volumes: [] ``` -ingress.yaml + + + + ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - name: seamoon-server + name: network-xxxxxxxx labels: - cloud.sealos.io/app-deploy-manager: seamoon-server - cloud.sealos.io/app-deploy-manager-domain: "*****" # 系统自动生成 + cloud.sealos.io/app-deploy-manager: seamoon-ws annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/proxy-body-size: 32m - nginx.ingress.kubernetes.io/ssl-redirect: 'false' - nginx.ingress.kubernetes.io/backend-protocol: HTTP - nginx.ingress.kubernetes.io/client-body-buffer-size: 64k - nginx.ingress.kubernetes.io/proxy-buffer-size: 64k - nginx.ingress.kubernetes.io/proxy-send-timeout: '300' - nginx.ingress.kubernetes.io/proxy-read-timeout: '300' - nginx.ingress.kubernetes.io/server-snippet: | - client_header_buffer_size 64k; - large_client_header_buffers 4 128k; + nginx.ingress.kubernetes.io/proxy-read-timeout: '3600' + nginx.ingress.kubernetes.io/proxy-send-timeout: '3600' + nginx.ingress.kubernetes.io/backend-protocol: WS spec: rules: - - host: "*****" # 系统自动生成 + - host: "*****" # 系统自动生成 http: paths: - pathType: Prefix path: / backend: service: - name: seamoon-server + name: seamoon-ws port: number: 9000 tls: - hosts: - - "*****" # 系统自动生成 + - "*****" # 系统自动生成 secretName: wildcard-cloud-sealos-io-cert ``` + + -下面详细解释每个参数的意思。 - -```shell -name: "函数名,填写SeaMoon即可" -image: "dvkunion/seamoon-server:latest", # 不要修改 -Instance: # 两种模式,fixed/Scaling; 如果固定需要几个实例,可以选择fixed; 如果想要动态扩散,可以选择Scaling,然后通过配置内存指标来控制 -Network: #此项不要动任何字段,完全按照截图填写 -Advance: 配置环境变量: serverMod=socks5 # 如果需要http代理,填写serverMod=http -``` -### Step.3 +### Step.3 本地客户端 填写完成后,点击右上角 `Deploy`, 等待部署完成,状态success后,获取到服务地址。 @@ -189,8 +205,15 @@ $ docker run -it -d --net=host dvkunion/seamoon-client $ docker run -it -d -p 7777:7777 -p 1080:1080 dvkunion/seamoon-client ``` +访问本地控制台 localhost:7777 , 将此地址填入客户端即可。 + +::: tip 如何填写地址 +填写的代理 sealos 已经明确给出,如: wss:// 或是 grcps://, 如下图: + +![sealos-config-grpc-addr](https://seamoon.oss-cn-hangzhou.aliyuncs.com/3ff1604871c547d2af492c5fd37428f7.png) -访问本地控制台 localhost:7777 , 将此地址填入客户端即可(注意将http:// 换为 ws://) +wss 隧道直接复制即可,注意 grpc 服务还需要指定一下端口号,一般都是 443,最终配置如: grpcs://xxxxxxxx.cloud.sealos.io:443。 +::: ![sealos-config](https://seamoon.oss-cn-hangzhou.aliyuncs.com/a931e0b42c8748649d5156b2b0884fcb.png) diff --git "a/docs/guide/02.\346\234\215\345\212\241\351\203\250\347\275\262/03.tecent.md" "b/docs/guide/02.\346\234\215\345\212\241\351\203\250\347\275\262/03.tecent.md" index 06a90c9..bcdd50a 100644 --- "a/docs/guide/02.\346\234\215\345\212\241\351\203\250\347\275\262/03.tecent.md" +++ "b/docs/guide/02.\346\234\215\345\212\241\351\203\250\347\275\262/03.tecent.md" @@ -7,6 +7,11 @@ article: false ## 叹息的腾讯云 +::: danger 注意 +由于腾讯云 grpc 也没调研,加上拉胯不推荐使用,所以此处的文档依旧为 v1.1.3 版本,非最新版本文档。 +如果要使用最新版本,请看上两篇的部署方式。 +::: + 先说结论,个人不建议腾讯云部署,原因众多: + 腾讯云go代码部署仅支持代码上传,这种过时的部署方式完全不符合devops的生态。 diff --git "a/docs/guide/02.\346\234\215\345\212\241\351\203\250\347\275\262/09.serverless.md" "b/docs/guide/02.\346\234\215\345\212\241\351\203\250\347\275\262/09.serverless.md" index 473fde5..78d03e7 100644 --- "a/docs/guide/02.\346\234\215\345\212\241\351\203\250\347\275\262/09.serverless.md" +++ "b/docs/guide/02.\346\234\215\345\212\241\351\203\250\347\275\262/09.serverless.md" @@ -10,6 +10,7 @@ article: false 你也可以通过[serverless-devs](http://www.serverless-devs.com),快速部署到各个云平台。 ## 安装 serverless-devs 工具 + ```shell $ npm install @serverless-devs/s -g ``` @@ -30,6 +31,10 @@ $ s -v 将可以看到serverless-devs版本,表示安装成功。 +```shell +@serverless-devs/s3: 0.1.0, s-home: /Users/DVK/.s, darwin-arm64, node-v20.9.0 +``` + 然后通过如下命令开始配置云厂商认证 ```shell @@ -49,6 +54,7 @@ $ git clone https://github.com/DVKunion/SeaMoon.git ``` 进入到项目目录 + ```shell $ cd SeaMoon $ s deploy @@ -57,29 +63,43 @@ $ s deploy 如果你不是第一次部署,那么将会提示你选择冲突的配置:remote/local,一般选择local即可。 稍等片刻,你将会得到部署好的两个地址: + ```shell -SeaMoon-FC-HTTP-Proxy: -..... - url: - system_url: https://http-proxy-seamoon-xxxxxxxxx.run - system_intranet_url: https://http-proxy-seamoon-xxxxxxxxx.fcapp.run - custom_domain: - - - domain: http://http-proxy.seamoon-service.xxxxxxxxx.fc.devsapp.net - triggers: - - - type: http +SeaMoon-WST-Node: + region: cn-hongkong + service: + name: SeaMoon-Service + function: + name: ws-node + runtime: custom + handler: main + memorySize: 128 + timeout: 300 + cpu: 0.05 + diskSize: 512 + url: + system_url: https://ws-node-seamoon-service-xxxxxxxx.cn-hongkong.fcapp.run + system_intranet_url: https://ws-node-seamoon-service-xxxxxxxx.cn-hongkong-vpc.fcapp.run + triggers: + - type: http name: httpTrigger -... - url: - system_url: https://socks-proxy-seamoon-xxxxxxxxx.fcapp.run - system_intranet_url: https://socks-proxy-seamoon-xxxxxxxxx.fcapp.run - custom_domain: - - - domain: http://socks-proxy.seamoon-service.xxxxxxxxx.fc.devsapp.net - triggers: - - - type: http +SeaMoon-GRT-Node: + region: cn-hongkong + service: + name: SeaMoon-Service + function: + name: grpc-node + runtime: custom + handler: main + memorySize: 128 + timeout: 300 + cpu: 0.05 + diskSize: 512 + url: + system_url: https://grpc-node-seamoon-service-xxxxxxxx.cn-hongkong.fcapp.run + system_intranet_url: https://grpc-node-seamoon-service-xxxxxxxx.cn-hongkong-vpc.fcapp.run + triggers: + - type: http name: httpTrigger ``` @@ -92,6 +112,7 @@ SeaMoon-FC-HTTP-Proxy: 如果你想要修改部署的地域,请修改 `s.yaml` 中的 `region` 字段。 目前支持的 `region` : + ``` cn-hangzhou, cn-beijing, @@ -116,13 +137,13 @@ ap-south-1 ## 花费 vs 更多的IP -阿里云的FC计费模式与实例数、vCPU消耗息息相关。 +阿里云的 FC 计费模式与实例数、vCPU消耗息息相关。 -由于我们的流量中转单例,cpu消耗并不会打满,而仍然会依照0.33计费。 +由于我们的流量中转单例,cpu 消耗并不会打满,而仍然会依照 0.33 计费。 因此,控制多个请求到一个实例,即可控制消费;对应的能够获取到的IP也会随之减少。 -10线程、每个线程100个用例打满ip查询测试的结果为: +10线程、每个线程 100 个用例打满ip查询测试的结果为: + 实例数目不设限、最高超时时间为600s、每个实例只处理一个请求: 70 IP + 实例数目不设限、最高超时时间为300s、每个实例处理10请求: 45IP (目前默认配置) @@ -131,17 +152,18 @@ ap-south-1 ```yaml services: - SeaMoon-FC-HTTP-Proxy: + SeaMoon-WST-Node: component: fc props: -...... - instanceConcurrency: 10 #一个实例最多请求处理数 -...... - timeout: 300 #超时时间,数值越大,可维持的不中断连接时间就会越长 + ...... +instanceConcurrency: 10 #一个实例最多请求处理数 + ...... +timeout: 300 #超时时间,数值越大,可维持的不中断连接时间就会越长 ``` 随着修改,改方案可能导致的花费也会随之不同。 ## 可能遇到的坑 -+ 需要go > 1.18环境 (因为需要动态编译) \ No newline at end of file ++ 需要能够访问的到 github, 在 pre-load 脚本中会从 github 上拉取最新版本的 release 用于部署。 ++ 需要系统有 wget 命令。(windows 用户可以暂时放弃这个方式,不打算支持 windows 通过此类方式部署) \ No newline at end of file diff --git "a/docs/guide/03.\345\256\242\346\210\267\347\253\257\351\203\250\347\275\262/01.docker.md" "b/docs/guide/03.\345\256\242\346\210\267\347\253\257\351\203\250\347\275\262/01.docker.md" index a161fde..a499cc9 100644 --- "a/docs/guide/03.\345\256\242\346\210\267\347\253\257\351\203\250\347\275\262/01.docker.md" +++ "b/docs/guide/03.\345\256\242\346\210\267\347\253\257\351\203\250\347\275\262/01.docker.md" @@ -10,10 +10,18 @@ article: false 推荐使用 docker 一键部署client ```shell -$ docker run -it -d --net=host dvkunion/seamoon-client +$ docker run -it -d --net=host dvkunion/seamoon:latest proxy ``` -默认使用`--net=host`模式,然后浏览器打开: +默认使用`--net=host`模式,这样比较简单易懂。为了更高的安全性、可控性,你也可以自己选择映射: + +```shell +$ docker run -it -d -p 127.0.0.1:7777:7777 -p 1080:1080 dvkunion/seamoon:latest proxy +``` + +这样可以将管理端口限制只能通过本地 `127.0.0.1` 访问,如果你需要限制为其他 IP,可以自行修改。 + +然后浏览器打开: `localhost:7777` @@ -25,7 +33,11 @@ $ docker run -it -d --net=host dvkunion/seamoon-client ![client-config](https://seamoon.oss-cn-hangzhou.aliyuncs.com/66b1b150238e400483adf936649b7ed5.png) -> 注意,此处填写的值为 Step.2 中输出的 domain字段,并去除 http:// 协议头,属于对应域名即可。 -> +::: tip 如何填写地址 +将协议头 https:// 替换为对应的隧道协议,如: ws:// 或是 grcp:// 。默认两种协议的隧道是都部署了的。 + +grpc 按照阿里云的要求,还需要自行声明端口,由此,一个 grpc 隧道的填写应该是这样: grpc://grpc-node-seamoon-service-xxxxxxxx.cn-hongkong.fcapp.run:8089 +8089 是阿里云的固定 grpc 协议端口,不需要改动。 +::: 开启socks5代理,并保持默认`:1080`不改变。 \ No newline at end of file diff --git "a/docs/guide/03.\345\256\242\346\210\267\347\253\257\351\203\250\347\275\262/02.binary.md" "b/docs/guide/03.\345\256\242\346\210\267\347\253\257\351\203\250\347\275\262/02.binary.md" index 1d2eef4..893a2a4 100644 --- "a/docs/guide/03.\345\256\242\346\210\267\347\253\257\351\203\250\347\275\262/02.binary.md" +++ "b/docs/guide/03.\345\256\242\346\210\267\347\253\257\351\203\250\347\275\262/02.binary.md" @@ -17,7 +17,7 @@ article: false > 1.1.0 之前的客户端是cli的模式,已经废弃,不再支持,请使用最新版本客户端。 -`./client` +`./seamoon proxy` 启动客户端,会占用7777端口。 @@ -27,4 +27,12 @@ article: false 点击配置管理, 添加云端配置, 然后按照你的需求,选在开启本地的http代理/socks5代理 -![client-config](https://seamoon.oss-cn-hangzhou.aliyuncs.com/66b1b150238e400483adf936649b7ed5.png) \ No newline at end of file +![client-config](https://seamoon.oss-cn-hangzhou.aliyuncs.com/66b1b150238e400483adf936649b7ed5.png) + +::: tip 如何填写地址 +将协议头 https:// 替换为对应的隧道协议,如: ws:// 或是 grcp:// 。默认两种协议的隧道是都部署了的。 + +grpc 按照阿里云的要求,还需要自行声明端口,由此,一个 grpc 隧道的填写应该是这样: grpc://grpc-node-seamoon-service-xxxxxxxx.cn-hongkong.fcapp.run:8089 + +8089 是阿里云的固定 grpc 协议端口,不需要改动。 +::: \ No newline at end of file diff --git a/docs/package.json b/docs/package.json index 6ad2e16..a2d9fca 100644 --- a/docs/package.json +++ b/docs/package.json @@ -1,18 +1,18 @@ { "name": "SeaMoon", - "version": "1.1.2", + "version": "1.2.0-beta", "main": "index.js", "license": "MIT", "repository": "https://github.com/DVKunion/SeaMoon", "author": "DVKunion", "scripts": { - "dev": "vuepress dev .", - "build": "vuepress build .", + "dev": "NODE_OPTIONS=--openssl-legacy-provider vuepress dev .", + "build": "NODE_OPTIONS=--openssl-legacy-provider vuepress build .", "updateTheme": "yarn remove vuepress-theme-vdoing && rm -rf node_modules && yarn && yarn add vuepress-theme-vdoing -D", "editFm": "node utils/editFrontmatter.js" }, "devDependencies": { "vuepress": "^1.9.7", - "vuepress-theme-vdoing": "^1.12.8" + "vuepress-theme-vdoing": "^1.12.9" } } diff --git "a/docs/tech/00.\345\206\231\345\234\250\345\211\215\351\235\242/01.feature.md" "b/docs/tech/00.\345\206\231\345\234\250\345\211\215\351\235\242/01.feature.md" index 50cd5e6..f488007 100644 --- "a/docs/tech/00.\345\206\231\345\234\250\345\211\215\351\235\242/01.feature.md" +++ "b/docs/tech/00.\345\206\231\345\234\250\345\211\215\351\235\242/01.feature.md" @@ -7,6 +7,29 @@ article: false # FEATURE +## SeaMoon 1.2.0-beta.1 + +> 1.2.0 是一个临时版本,由于想要加入一些新的功能与适配,整体代码改动量较大。因此先拆分了部分功能代码。 +> 整体的稳定性上会有所欠缺,更多的是下一个版本的新功能尝试 + +### ❤️ What's New +* 📝 docs: 修正了首页的一些图床丢失 (#18) +* ✨ feat(server): 新增隧道协议:grpc (#19) +* ⚡️ zap(server): 将协议解码转移在服务端处理,轻量化客户端 (#17) +* 🎨 refartor(server): 重构服务端模式,参考 gost 代理项目优化网络传输 (#15) +* 🎨 refartor(client): 减轻客户端传递功能,做更多兼容性适配,配合server重构 (#20) +* 🔧 fix(ci): 修正一些重构导致的ci错误(#16)(#21)(#22) + +**Full Changelog**: https://github.com/DVKunion/SeaMoon/compare/1.1.3...1.2.0-beta.1 + +* 75db770 feat: support grpc tunnel (#19) +* 122435f fix: Dockerfile (#22) +* ae49ee0 fix: page ci dir changes (#16) +* be04fa1 fix: tag ci error (#21) +* f40e8f0 refactor: client (#20) +* 22bc49c refactor: server code && upgrade go mod (#15) +* ef2bf71 zap: change socks handle from client to server. (#17) + ## SeaMoon 1.1.3 ### ❤️ What's New diff --git "a/docs/tech/01.\347\275\221\347\273\234\345\261\202/01.HTTP.md" "b/docs/tech/01.\347\275\221\347\273\234/01.HTTP.md" similarity index 100% rename from "docs/tech/01.\347\275\221\347\273\234\345\261\202/01.HTTP.md" rename to "docs/tech/01.\347\275\221\347\273\234/01.HTTP.md" diff --git "a/docs/tech/01.\347\275\221\347\273\234\345\261\202/02.SOCKS5.md" "b/docs/tech/01.\347\275\221\347\273\234/02.SOCKS5.md" similarity index 100% rename from "docs/tech/01.\347\275\221\347\273\234\345\261\202/02.SOCKS5.md" rename to "docs/tech/01.\347\275\221\347\273\234/02.SOCKS5.md" diff --git "a/docs/tech/02.\345\272\224\347\224\250\345\261\202/01.WEBSHELL.md" "b/docs/tech/02.\345\272\224\347\224\250\345\261\202/01.WEBSHELL.md" deleted file mode 100644 index f70ae5f..0000000 --- "a/docs/tech/02.\345\272\224\347\224\250\345\261\202/01.WEBSHELL.md" +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: 动态WebShell隐匿连接 -date: 2022-08-30 18:59:24 -permalink: /tech/app/webshell/ -article: false ---- - -原理基于云函数提供的IP随机性,在应用层做了更多的操作。 - -## 实现效果 - -+ 使用者仅需配置WebShell客户端代理,无任何其他操作。 -+ 访问的IP为云函数随机IP。 -+ 实际访问的文件随机,并使用更迷惑的文件名来欺骗运维/安全审计人员。 -+ 实际WebShell文件随执行次数自动清理,加大溯源困难。 - -## 使用方式 - -运行client端 WebShell 代理模式, 并开启文件隐匿模式。 - -在WebShell连接端配置好proxy代理 diff --git a/docs/yarn.lock b/docs/yarn.lock index 3269431..0b9d8c1 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -8234,10 +8234,10 @@ vuepress-plugin-smooth-scroll@^0.0.3: dependencies: smoothscroll-polyfill "^0.4.3" -vuepress-theme-vdoing@^1.12.8: - version "1.12.8" - resolved "https://registry.yarnpkg.com/vuepress-theme-vdoing/-/vuepress-theme-vdoing-1.12.8.tgz#15bd601b5d5939ef574dd76fb17220925984cac1" - integrity sha512-CNrNBUhCaG1hjkeEl/sqzu5OauushjnrPyMrvysJFAwVua2FzdvI3i9WTT4ccFvJ9A6gzbn0ct4p6xYWsp82VA== +vuepress-theme-vdoing@^1.12.9: + version "1.12.9" + resolved "https://registry.yarnpkg.com/vuepress-theme-vdoing/-/vuepress-theme-vdoing-1.12.9.tgz#e1f4b6d170fd7082fc7a1e334149d0bd5bb4ff40" + integrity sha512-TpZ6wRaqRVyNfHNlNMIpWsQqcX2QUZWpMVSNYeepR3LRpq6qbz0dUN9fHlOoCyYFHGsWBSgYyxCSvFwoPk01/Q== dependencies: "@better-scroll/core" "^2.0.0-beta.6" "@better-scroll/slide" "^2.0.0-beta.6" diff --git a/pkg/service/grpc.go b/pkg/service/grpc.go index 7756dae..09968d9 100644 --- a/pkg/service/grpc.go +++ b/pkg/service/grpc.go @@ -42,6 +42,10 @@ func (g GRPCService) Conn(ctx context.Context, t transfer.Type, sOpts ...Option) srvOpts.addr = strings.TrimPrefix(srvOpts.addr, "grpc://") } + if strings.HasPrefix(srvOpts.addr, "grpcs://") { + srvOpts.addr = strings.TrimPrefix(srvOpts.addr, "grpcs://") + } + nAddr, err := net.ResolveTCPAddr("tcp", srvOpts.addr) if err != nil { return nil, err diff --git a/pkg/service/websocket.go b/pkg/service/websocket.go index 9f70b62..0c1fc8f 100644 --- a/pkg/service/websocket.go +++ b/pkg/service/websocket.go @@ -6,7 +6,6 @@ import ( "log/slog" "net" "net/http" - "path" "time" "github.com/gorilla/websocket" @@ -51,9 +50,7 @@ func (s *WSService) Conn(ctx context.Context, t transfer.Type, sOpts ...Option) wsDialer.EnableCompression = srvOpts.buffers.EnableCompression } - url := path.Join(srvOpts.addr, t.String()) - - wsConn, _, err := wsDialer.Dial("ws://"+url, nil) + wsConn, _, err := wsDialer.Dial(t.Path(srvOpts.addr), nil) if err != nil { return nil, err diff --git a/pkg/transfer/transfer.go b/pkg/transfer/transfer.go index c7bf0e3..eff9a4d 100644 --- a/pkg/transfer/transfer.go +++ b/pkg/transfer/transfer.go @@ -1,5 +1,7 @@ package transfer +import "strings" + type Type string const ( @@ -10,3 +12,11 @@ const ( func (t Type) String() string { return string(t) } + +func (t Type) Path(p string) string { + if strings.HasSuffix(p, "/") { + return p + t.String() + } else { + return p + "/" + t.String() + } +} diff --git a/s.yaml b/s.yaml index cc99193..018c6fa 100644 --- a/s.yaml +++ b/s.yaml @@ -14,7 +14,7 @@ vars: actions: pre-deploy: - - run: wget https://github.com/DVKunion/SeaMoon/releases/download/1.2.0-beta.1/SeaMoon_1.2.0-beta.1_linux_amd64.tar.gz + - run: wget https://github.com/DVKunion/SeaMoon/releases/download/1.2.0-beta.2/SeaMoon_1.2.0-beta.2_linux_amd64.tar.gz path: ./ - run: tar -zvxf SeaMoon_1.2.0-beta.1_linux_amd64.tar.gz path: ./