熊喵君的博客

Thinking will not overcome fear but action will.

透明代理汇总:Transparent Proxy All In One

记录项目预研 / 开发的若干细节

0x00 前言 本文汇总下笔者在调研透明代理(Linux 下的全流量代理网关)的一些技术学习与分享 0x01 代理的技术方案比较 TProxy TProxy 是一种 Linux 内核模块,可以在 Linux 内核层面拦截网络数据并进行处理,从而实现透明代理。TProxy 可以在不改变源 IP 地址和端口的情况下,将数据包重定向到代理服务器(通常是监听在本机lo网卡上的进程)进...

Wireguard 实现原理与分析(一)

一个基于 golang 实现的 vpn-tunnel 分析

0x00 前言 WireGuard(简称 wg)是一种快速、现代、安全的 VPN 协议,基于 golang 的开源地址 在此,本文探讨其 linux 下的配置和实现等细节 0x01 工作原理 WireGuard 以 UDP 实现,但是运行在 IP 层(即 ip-over-udp)。每个 Peer 都会生成一个 wg0 虚拟网卡,同时服务端会在物理网卡上监听 UDP 51820 端...

重拾 Linux 网络(三):透明代理中的路由策略

0x00 前言 不要把路由表和 iptables 混淆,路由表决定如何传输数据包,而 iptables 决定是否传输数据包,他俩的职责不一样;最近印象较深的一句话 0x01 iptables/router/ip rule 区别 ip route(即 route -n),iproute2 提供的命令 ip rule:策略路由(最重要),定义了数据包路由查询的规则 ...

重拾 Linux 网络(二):网卡 / 虚拟网卡、tap/tun 那些事

0x00 前言 本文回顾下网络的基础知识,主要是网卡、虚拟网卡,以及非常重要的 tap/tun 开发模式及应用构建相关。 0x01 物理网卡 && 虚拟网卡 物理网卡 物理网卡设备的工作流程如下: 所有物理网卡收到的包会交给内核的 Network Stack 处理,然后通过 Socket API 通知给用户程序。 虚拟网卡 相比于物理网卡负责内核网...

MITM:中间人机制 review

如何优雅的实现 https mitm(透明劫持)

0x00 前言 本文探讨下 HTTPS 劫持这个话题,一些常见的网络调试工具 fiddler、charles、surge、wireshark 等,或多或少都是利用了 HTTPS 的 MITM 攻击来实现的。HTTPS 劫持的核心原理是不安全的 CA(或者是非权威 CA) 可以给任何网站 or 域名进行 CA 签名,TLS 服务端解密需要服务端私钥和服务段证书,然而这个不安全的 CA 可...

重拾 Linux 网络(一):iptables

如何利用 iptables 构建透明代理

0x00 前言 最新笔者在研究全流量代理,本文回顾一下 iptables 的原理,先回顾下 netfilter/iptables 的基础概念: iptables 可以参考下面若干文章: IPtables,文章合集,非常全面了 重温 iptables Netfilter 模块,在网络层的五个位置(也就是 iptables 四表五链中的五链)注册了一些钩子函数,用来截取数据...

Kubernetes 应用改造(九):CRD && Controller && Operator 入门

0x00 前言 先列举几个概念: CRD(Custom Resource Definition) Controller Operator:Operator 是一种封装、部署和管理 kubernetes 应用的方法 Operator的应用场景 Operator 是由 kubernetes 自定义资源(CRD, Custom Resource Definition)和控制器(...

helm 入门与应用:Kubernetes 包管理器

使用 helm 部署 kubernetes 应用(helm V3)

0x00 前言 Helm 是 Kubernetes 的包管理工具,类似于 Linux 下的包管理工具如 yum 等。通过 helm 可以将打包好的 yaml 文件部署到 Kunernetes 集群 Helm 的应用场景 将所有的 yaml 文件(deployment、Service、Ingress 等等)进行整体的管理,实现 yaml 文件的高效复用。这里的高效复用是指 yaml 文件...

Sync.Pool 应用与分析(续)

Golang sync.Pool 源码分析

0x00 前言 前文 Golang 中的 sync.Pool 使用 介绍了 sync.Pool 的使用及若干细节。 sync.Pool 是并发安全且可伸缩的,常用于存放可复用的对象的一个容器,以减少反复创建对象带来的开销,这里需要注意,Pool 是用于存放对象的,不建议用来缓存一些有状态的对象(如长连接等)或数据等持久存储对象,因为 Pool 中的内容是会随着 GC 而被回收。 ...

bytes.Buffer 源码分析及应用

0x00 前言 本文分析下 golang 标准库 bytes.Buffer 的实现(本文基于 go1.17 版本的实现分析) 笔者在给 ssh 网关增加终端解析功能中大量使用了 bytes.Buffer 这个结构,bytes.Buffer 是 Golang 标准库 []byte 缓冲区(流式缓冲区),具有读写方法和可变大小的字节存储功能。缓冲区的零值是一个待使用的空缓冲区。可以持续向...