从 BPF 直接发送数据包:Linux 内核安全监控的突破
来源:lwn.net — 2026-07-14
📋 概述
LWN 报道了 2026 年 LSFMM+BPF 峰会上 Tetragon 团队的一项重要工作:让 BPF 程序无需用户态代理即可直接发送网络数据包。现有的 BPF 安全监控工具(如 Tetragon)依赖用户态进程通过 ring buffer 接收数据并转发到远程服务器,这意味着如果攻击者能杀掉用户态代理,监控就会失效。团队先后尝试了 splice() 方案(被社区否决)、netpoll 方案(可行但有争议)和最新的 UDP 内核套接字方案。讨论的核心焦点是:直接绕过网络协议栈发送数据包虽然提供了内核级的可靠性,但也带来了带宽管理和驱动兼容性的隐忧。
🔑 核心要点
- 当前痛点:Tetragon 等 BPF 安全监控工具依赖用户态代理转发数据,如果代理被攻击者终止,整个监控链路就会中断。
- 方案一(被否决):使用 splice() 的同步方案不适合 BPF 的执行模型,被认为设计方向错误。
- 方案二(可行争议):利用netpoll/netconsole 基础设施从任意内核上下文发送 UDP 包,优势是绕过协议栈带来的健壮性。
- 核心争议:UDP vs TCP——网络维护者倾向于 TCP(可应用正常的带宽管理),但 UDP 在安全监控场景下更可靠。
- 90% 的 NIC 驱动不支持 netpoll(Starovoitov 的估计),这使得 netpoll 方案的通用性存疑。
- 最新方案(2026-07-06):允许 BPF 程序创建和使用 UDP 内核套接字,在保持内核级可靠性的同时走正常的网络路径。
💡 金句
Finally I'll be able to send alert emails directly from the kernel. I always dreamed of that! Not. ——终于能从内核直接发送告警邮件了。我做梦都想这样!并不是。
👍 0
👎 0
← 返回 Lobsters 首页