Reverst:基于QUIC协议和HTTP3的反向隧道工具

关于Reverst

Reverst是一款功能强大的反向隧道工具,Reverst由一个具备负载均衡功能的反向隧道服务器和一个服务器-客户端库组成,该工具使用Go语言开发,基于QUIC和HTTP/3实现其功能。

关于QUIC和HTTP/3

QUIC,即快速UDP互联网连接协议。QUIC(Quick UDP Internet Connections)是由 Google 从2013年开始研究的基于UDP的可靠传输协议,它最早的原型是SPDY + QUIC-Crypto + Reliable UDP,后来经历了SPDY转型为2015年5月IETF 正式发布的HTTP/2.0。考虑到HTTP/2.0和TLS/1.3的发布,它的核心协议族逐步进化为现在的HTTP/3.0 + TLS/1.3 + QUIC-Transport的组合。

而HTTP3则是在保持QUIC稳定性的同时使用UDP来实现高速度(选择QUIC就是选择UDP), 同时又不会牺牲TLS的安全性。HTTP/3的传输层不是TCP,而是UDP+QUIC。

工具特性

当前版本的Reverst具备以下特性:

1、Go语言驱动:基于纯Go语言开发,使用了quic-go库;

2、兼容性;client包(Go)基于net/http标准库抽象实现;

3、负载均衡:可以在同一个隧道运行多个服务实例;

4、高性能:基于QUIC和HTTP/3实现其功能;

→点击获取网络安全资料·攻略←

200多本网络安全系列电子书
网络安全标准题库资料
项目源码
网络安全基础入门、Linux、web安全、攻防方面的视频
网络安全学习路线图

 

使用场景

Reverst主要用于将受限网络中的服务(例如受NAT网关保护的服务)公开并暴露到外网上。隧道文件需要部署在外网上,然后客户端服务器与隧道建立通信,并在目标隧道组中进行注册。隧道组是一组负载平衡的客户端服务器,通过反向隧道HTTP接口暴露在外网中。

下图所示为隧道生命周期:

工具安装

客户端

客户端安装命令:

go get go.flipt.io/reverst/client

代码构建:

go install ./client/...

服务器端

代码构建:

go install ./cmd/...

测试

Reverst使用Dagger来配置并运行一个集成测试套件:

dagger call test --source=.

测试套件会配置一个隧道,并在隧道中注册一个服务器-客户端,并通过隧道HTTP接口请求服务。

工具运行

下列参数是隧道服务器运行时的参数实例:

1、QUCI隧道监听127.0.0.1:7171;

2、HTTP服务监听127.0.0.1:8181;

3、日志记录设置为debug级别;

配置命令如下:

go run ./cmd/reverst/... -l debug \

    -n flipt.dev.local \

    -g examples/simple/group.yml \

    -k examples/simple/server.key \

-c examples/simple/server.crt

下列命令可以运行样例服务器:

go run ./examples/simple/main.go --username user --password pass

下列命令可以向服务发送请求:

curl -H 'Host: flipt.dev.local' 127.0.0.1:8181/fo

工具使用和配置

命令行参数选项与环境变量

reverst -h

COMMAND

  reverst

 

USAGE

  reverst [FLAGS]

 

FLAGS

  -l, --log LEVEL                      debug、info、warn或error (默认: INFO)

  -a, --tunnel-address STRING       接收隧道QUIC连接的地址 (默认: 127.0.0.1:7171)

  -s, --http-address STRING           处理HTTP请求的地址 (默认: 0.0.0.0:8181)

  -n, --server-name STRING           通过TLS识别隧道的服务器名称 (必须)

  -k, --private-key-path STRING      path to TLS private key PEM file (必须)

  -c, --certificate-path STRING      TLS证书PEM文件路径 (必须)

  -g, --tunnel-groups STRING       k8s配置映射标识符或文件路径 (默认: groups.yml)

  -w, --watch-groups                  监控隧道组源以获取更新

      --management-address STRING    管理API的HTTP地址

      --max-idle-timeout DURATION    连接可以空闲的最长时间 (默认: 1ms)

      --keep-alive-period DURATION   keep-alive事件间隔时间(默认: 30s)

隧道组配置

reverst -g path/to/configuration.yml

// alternatively:

reverst -g file:///path/to/configuration.yml
或:

reverst -g k8s://configmap/default/tunnelconfig/groups.yml

配置多个身份验证策略

groups:

  "group-name":

    hosts:

    - "some.host.address.dev" # Host for routing inbound HTTP requests to tunnel group

    authentication:

      basic:

        username: "user"

        password: "pass"

      bearer:

        token: "some-token"

      external:

        scheme: "JWT"

        endpoint: "http://some-external-endpoint/auth/ext"

网络安全学习资源分享:

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,需要点击下方链接即可前往获取 

 读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)

同时每个成长路线对应的板块都有配套的视频提供: 

大厂面试题 

视频配套资料&国内外网安书籍、文档

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料

所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~  

读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)

 

特别声明:

此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失。

  • 22
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值