Show HN: 使用 eBPF 实现无代理加密流量透视
Qtap: 一个 eBPF agent,用于捕获预加密的网络流量,提供关于出口连接及其原始进程的丰富上下文信息。
许可证
qpoint-io/qtap
代码
文件夹和文件
名称 | 名称 | 最后提交消息 | 最后提交日期
---|---|---|---
.github| .github
.vscode| .vscode
bpf| bpf
cmd/qtap| cmd/qtap
e2e| e2e
examples| examples
internal/tap| internal/tap
pkg| pkg
scripts| scripts
.gitignore| .gitignore
.golangci.yaml| .golangci.yaml
LICENSE| LICENSE
Makefile| Makefile
README.md| README.md
go.mod| go.mod
go.sum| go.sum
最新提交
历史
一个 eBPF agent,用于捕获流经 Linux 内核的流量。通过附加到 TLS/SSL 函数,数据在加密前后被拦截,然后传递到灵活的插件,具有完全的可见性以及所有可用的上下文 - 进程/容器/主机/用户/协议/等等。 Qtap 使得理解你的出口流量正在发生的事情成为可能,而无需修改应用程序、安装代理或管理证书。
Qtap 向你展示了以其原始的、未加密的形式发送和接收的确切数据,同时以最小的开销带外运行,而不会增加延迟或中断应用程序性能。
Qtap 可以增强你现有的可观察性管道,或者可以用作自定义解决方案(如 Qpoint)的基础组件,通过多种方式,包括:
- 安全审计 - 安全专业人员可以验证敏感数据是否未被无意地暴露在网络通信中。
- 调试网络问题 - 当 API 返回错误或连接失败时,查看正在发送的实际数据有助于识别配置错误的参数、格式错误的请求或意外的响应。
- API 开发 - 开发人员可以验证他们的应用程序是否发送正确格式的请求并正确处理响应,而无需修改代码。
- 解决第三方集成问题 - 在与外部服务集成时,Qtap 帮助确认实际交换的数据与文档声明的数据是否一致。
- 学习和探索 - 通过观察应用程序和服务之间的真实流量,了解协议的实际工作方式。
- 传统系统调查 - 在处理文档不完善或遗留系统时,Qtap 提供了对它们如何通信的洞察力,而无需访问源代码。
- 验证测试 - 确认应用程序更改不会意外地改变网络通信模式。
更多信息请参阅我们网站的 "How It Works" 部分。
快速开始
想试用 Qtap 吗?在演示模式下启动一个临时实例!在你的终端中实时查看流量。
# Run Qtap in demo mode
$ curl -s https://get.qpoint.io/demo | sudo sh
或者立即安装并开始运行!
# Install the Qtap agent
$ curl -s https://get.qpoint.io/install | sudo sh
# Run with defaults!
$ sudo qtap
社区
在 GitHub Discussions 中与 Qpoint 的开发人员和贡献者进行交流。
要求
- Linux,内核 5.10+,并启用 BPF Type Format (BTF)。你可以通过验证你的系统上是否存在
/sys/kernel/btf/vmlinux
来检查你的内核是否启用了 BTF。 - 主机上启用 eBPF。
- 主机或运行 agent 的 Docker 容器中具有提升的权限:
- 在主机上使用
sudo
运行 - 在 Docker 中,最好使用
CAP_BPF
、主机 pid 和 privileged 运行。例如:
- 在主机上使用
docker run \
--user 0:0 \
--privileged \
--cap-add CAP_BPF \
--cap-add CAP_SYS_ADMIN \
--pid=host \
--network=host \
-v /sys:/sys \
--ulimit=memlock=-1 \
us-docker.pkg.dev/qpoint-edge/public/qpoint:v0 \
tap \
--log-level=info
开发
前提条件
操作系统
- linux (kernel 5.8+)
- Qpoint 的 MacOS 开发人员喜欢使用 Lima 作为一个快速、简单的 Linux VM 进行开发。
工具
- go1.24+
- make
- clang14
- clang-tidy (可选/推荐)
快速开始
$ git clone https://github.com/qpoint-io/qtap.git
$ cd agent/
$ make build
常用的 Makefile
targets
以下是 Qpoint 开发人员最常用的 targets:
build
- 生成 eBPF 二进制文件并构建 Go 应用程序generate
- 生成 eBPF 二进制文件run
- 运行 Qtap 的调试实例ci
- 运行所有 ci 检查(在推送代码之前使用很好)
项目状态
该项目目前处于早期开发阶段。我们很高兴与社区分享我们的工作,并欢迎你的反馈!虽然我们正在积极改进,但请注意:
- 随着我们改进我们的方法,一些 API 可能会发生变化
- 文档在某些地方可能不完整
- 可能存在一些我们尚未解决的粗糙之处
我们欢迎通过 GitHub issues 提出的贡献,并感谢你的理解,我们是一个平衡多个优先级的小团队。 我们重视建设性的反馈,这有助于我们改进这个项目。
感谢你查看我们的工作!
贡献
通过向该项目提交贡献,你同意 Contributor License Agreement。 本协议允许我们将你的贡献包含在开源和商业版本中。
许可证
该项目采用双重许可,AGPLv3.0(用于开源使用)和商业许可证(用于商业使用)。
关于
Qtap: 一个 eBPF agent,用于捕获预加密的网络流量,提供关于出口连接及其原始进程的丰富上下文信息。
Topics
go linux kubernetes golang security containers developer-tools ebpf observability libbpf
Resources
License
Code of conduct
Stars
230 stars
Watchers
5 watching
Forks
5 forks
Contributors 5
Languages
- C 88.4%
- Go 11.4%
- Other 0.2%