零信任学习系列六——复现与学习github zero-trust项目(1)

该项目是《白帽子安全开发实战》的第十章内容零信任安全。开发语言为go语言,此项目由三部分组成:反向代理与路由模块(并非隐式代理,没有实现将代理隐藏的功能),认证模块,鉴权模块。详细开发过程我还正在学习中,由于没有接触过go语言,很多地方并不是很懂,都得从零开始学习。
此项目的github地址为:
http://github.com/netxfly
在本机上跑这个项目我遇到了很多的问题,首先是go语言的依赖包的问题,很多外网和github上的包由于网络问题无法下载,我通过修改go mod和go init等命令外加修改go语言的网络代理和打开代理才解决这个问题。这样这个项目在本机vscode才不报错,其次就是很奇怪的网络的问题,此项目的前面各个部分的demo在本机都能跑通,但就是最后一个集成完成的测试demo在本机总是跑不通,服务端无法收到并记录客户端的访问请求和一些基础ip信息。最后解决办法是在linux虚拟机上从头开始配置相关文件,最终庆幸的是最终在linux虚拟机上最终跑通了。
项目展示结果:
有一个B站视频是该项目的运行效果https://www.bilibili.com/video/BV1uK4y1S7Ny?from=search&seid=12273164360537456600
实现效果如下:
首先是运行zero-trust-demo下的main.go文件,实现效果是启动四个端口,其中8081,8082,8083是上端服务器,8000是代理服务器,当我们访问8000端口的时候,会自动跳转到8081,8082,8083其中一个上端服务器
在这里插入图片描述
演示效果:
直接访问8000端口,会直接告诉你i am proxy
在这里插入图片描述
直接访问上游服务器端口8081,8082,8083
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个上游服务器的作用是每次用户访问时输出后端的监听地址,后端服务器的host,用户请求的url和header,是利用中间件实现的。
当访问url为8000端口下的/blog目录的时候,此时8000端口是允许的,会自动跳动到上游服务器,如下图,每次刷新后都会随机跳动到8081,8082,8083的其中一个服务器。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
控制台打印出来的信息和以上上有服务器blog目录下的东西差不多:
如下
在这里插入图片描述

代码展示以及个人理解
主函数:
在这里插入图片描述
此项目结构目录在这里插入图片描述
在server.go 和server.go 两个包下主要是一些相关函数和中间件的实现和调用

看了一下,以我目前的能力很多地方和函数都不是能够理解和使用,所以这快先暂时不解释源码了。

下面就是重头戏了,zero-trust-proxy的实现
一部分一部分来看

反向代理模块的实现与配置文件
反向代理的配置文件由三部分组成:前端服务器(反向代理本身),后端服务器(反向代理的上游服务器),路由(也就是url,根据不同的url
,实现不同的操作)
配置文件:在这里插入图片描述
第一部分server配置文件:

server:
  listen_ip: 0.0.0.0
  //反向代理服务器监听的ip,我一直没有搞明白监听ip是什么意思
  listen_port: 443
  //反向代理服务器监听的端口
  timeout: 30s
  //读写超过时间
  idle_timeout: 30s
  //空闲会话超过时间
  tls_context:
  //证书的配置
    certificate_path: certs/server.crt
    private_key_path: certs/server.key

这里的配置文件主要是填充http.Server结构体中对应的字段。至于公钥和私钥文件是通过方法加载的,暂时先不讨论

第二部分上游服务器的配置

upstreams:
  - name: xsec1
  //后端服务器的名字
    connect_timeout: 5s
  //会话超过时间
    url: http://127.0.0.1:8081
  //后端服务器的协议与地址
  - name: xsec2
    connect_timeout: 5s
    url: http://127.0.0.1:8082

主要是为了填充在这里插入图片描述
中的

// ReverseProxyConfig configuration settings for a proxy instance
type ReverseProxyConfig struct {
	ConnectTimeout time.Duration
	Timeout        time.Duration
	IdleTimeout    time.Duration
}

此结构体

第三部分路由模块

routes:
  - host: p.xsec.io
    rules:
      - request.ip.network("10.211.55.0/24")
      - request.email == "xsec888@gmail.com"
    http:
      paths:
        - path: /
          upstream: xsec1
          authentication: true

  - host: blog.xsec.io
    rules:
      - request.ip == "10.211.55.3"
      - request.email == "xsec888@gmail.com"
    http:
      paths:
        - path: /blog/
          upstream: xsec1
          authentication: true

使用了路由框架,根据配置文件的host,upstream,path封装了相应的路由设置函数,代码没看懂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值