这篇文章提供了关于eBPF应用程序开发的指南。正如标题所示,文章主要关注eBPF 201的概念,而不是提供另一篇关于eBPF技术是什么的入门级文章。我们提供了简短的介绍,但主要关注需要部署生产eBPF应用程序的开发团队的下一组概念和最佳实践。我们将探讨使BPF应用程序可以在多个内核版本和环境中部署和维护的编程语言和工具链。
所谓技术
eCapture支持流量转发的进展同步
eCapture项目距上次新版发布也已经过去2-3个月了,在这期间,社区论坛里很多网友提了一些问题以及需求,等我来解决。这几个月博主工作特别忙,一直没时间更新eCapture。这个周末特地抽时间解决了社区中反应的一些bug、优化点等。至于新功能,主要的就是`流量转发`功能,这个功能还是比较复杂的。
GitHub万星项目进度70%,eCapture旁观者7K Stars达成
eBPF挂钩TC egress时,被TCP Checksum搞死了
我最近也在尝试用eBPF TC类型程序,挂钩`egress`网络包,修改IP包、TCP包内容,实现路由跟踪的功能。除了eBPF验证器的奇葩问题外,剩下的就是`skb_buff`修改后,被客户端内核丢弃、中间路由丢弃、服务端内核丢弃的各种问题,头发那是一把一把的掉。幸运的是,我找到了这篇文章《Checksum-or-fxxk-up》,特意转来给大家分享。
golang uretprobe的崩溃与模拟实现
云原生架构下,服务的可观测性几乎是标配。K8S生态中,大量微服务都是用Golang写的,在观测Golang的函数返回值时,大概率会发生进程崩溃的情况。也就是说Go uprobe观测一切正常,但Go uretprobe观测,几乎都触发崩溃,今天,笔者来带大家了解崩溃原因,一起探讨解决方案。
Linux上文件监控的踩坑分享
如何给eBPF程序写单元测试
eBPF程序还很年轻,周边质量建设体系还刚起步,常用于Linux内核上的监控跟踪,本身比较底层,测试成本很高。对于常写eBPF的同学,特别头疼的是快速迭代的项目,如何保证功能正常。如何给eBPF程序写单元测试呢?
eBPF verifier验证器与编译器inline内联
在编写eCapture的GoTls密钥捕获功能时,遇到eBPF verifier的报错,无法启动,笔者后来通过启用`always inline`解决了这个问题。我觉得这是一个比较好的eBPF编写技巧,把详细排查过程分享出来。
漩涡:EDR内核回调、钩子和调用堆栈
通过本篇文章的阅读,我们将了解到现代EDR如何保护免受恶意植入物的攻击以及这些保护措施如何被绕过。我们将从一个技术上可行但实际无法达成操作目标的植入物转变为对如何编写能够实际工作并能够达成操作者目标的植入物有所认识。
eCapture旁观者支持Golang tls/https加密明文捕获
云原生生态中,golang语言开发的项目越来越多,例如Docker和K8s、etcd等。作为SRE、RD,偶尔需要在生产环境抓网络通讯包,用来分析排查故障。很多时候,都是tls/https加密协议,如何在不重启业务保留现场,不改为自定义CA证书的情况下,分析明文通讯内容呢?