news 2026/4/16 12:52:52

防火墙性能天花板:使用 eBPF (XDP) 在网卡驱动层丢弃 DDoS 攻击包,性能吊打 iptables

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
防火墙性能天花板:使用 eBPF (XDP) 在网卡驱动层丢弃 DDoS 攻击包,性能吊打 iptables

标签:#eBPF #XDP #DDoS #LinuxKernel #NetworkPerformance #CyberSecurity


🐢 前言:Iptables 的“原罪”——sk_buff

在 Linux 内核中,网络包不仅仅是二进制数据,它被封装在一个名为sk_buff(Socket Buffer) 的结构体中。
这个结构体包含了大量元数据(时间戳、设备信息、路由信息等),大小往往超过 200 字节。

传统路径 (Iptables):

  1. 网卡收到包 -> 触发中断。
  2. 驱动申请内存,创建sk_buff最昂贵的操作)。
  3. 数据从 DMA 拷贝到sk_buff
  4. 进入协议栈(IP 层)。
  5. Netfilter (Iptables) 匹配规则 -> DROP。

XDP 路径:

  1. 网卡收到包 -> 触发中断。
  2. 驱动直接运行 XDP 程序(eBPF 字节码)。
  3. XDP 判断 -> DROP。
  4. (无需创建sk_buff,无需进入协议栈)。

架构对比图 (Mermaid):

🚀 XDP 路径

✅ XDP Hook (极快)

XDP_DROP

XDP_PASS

网卡 NIC

驱动程序

eBPF 程序

丢弃

创建 sk_buff

进入内核协议栈

传统路径 (Iptables)

❌ 内存分配 sk_buff (极慢)

Netfilter Hook

网卡 NIC

驱动程序

sk_buff

TC / IP 协议栈

iptables -j DROP

丢弃


💻 一、 实战:编写 XDP 丢包程序

我们需要编写一段受限的 C 代码(Kernal Space),编译成 eBPF 字节码,然后加载到内核。

1. 内核态代码 (xdp_firewall.c)

这段代码逻辑很简单:解析以太网头 -> 解析 IP 头 -> 检查源 IP 是否在黑名单 -> 丢弃或放行。

#include<linux/bpf.h>#include<bpf/bpf_helpers.h>#include<linux/if_ether.h>#include<linux/ip.h>#include<arpa/inet.h>// 定义一个 BPF 哈希表 (Map),用于存储黑名单 IP// Key: __u32 (源IP), Value: __u32 (统计计数)struct{__uint(type,BPF_MAP_TYPE_HASH);__uint(max_entries,10000);__type(key,__u32);__type(value,__u32);}blacklist_mapSEC(".maps");SEC("xdp_prog")intxdp_drop_ips(structxdp_md*ctx){// 1. 获取数据包的指针void*data_end=(void*)(long)ctx->data_end;void*data=(void*)(long)ctx->data;// 2. 解析以太网头structethhdr*eth=data;if(data+sizeof(*eth)>data_end){returnXDP_PASS;// 包太短,交给内核处理}// 只处理 IPv4if(eth->h_proto!=bpf_htons(ETH_P_IP)){returnXDP_PASS;}// 3. 解析 IP 头structiphdr*iph=data+sizeof(*eth);if((void*)(iph+1)>data_end){returnXDP_PASS;}// 4. 查表:源 IP 是否在黑名单中?__u32 src_ip=iph->saddr;__u32*stats=bpf_map_lookup_elem(&blacklist_map,&src_ip);if(stats){// 5. 命中黑名单,丢弃!// 可选:原子操作增加计数器 *stats += 1;returnXDP_DROP;}returnXDP_PASS;}char_license[]SEC("license")="GPL";
2. 编译与加载

使用clang将其编译为.o文件。

clang -O2 -target bpf -c xdp_firewall.c -o xdp_firewall.o

使用ip命令加载到网卡(假设网卡是eth0):

# xdpdrv 代表 Native 模式 (驱动支持),性能最高# xdpgeneric 代表通用模式 (无驱动支持,模拟运行),性能稍差sudoiplinksetdev eth0 xdpdrv obj xdp_firewall.o sec xdp_prog
3. 用户态控制:添加黑名单

我们需要一个用户态程序(Go/Python/C)来操作 BPF Map。为了演示方便,使用bpftool工具直接写入 Map。

# 假设我们要封禁 192.168.1.100 (Hex: C0 A8 01 64)# 找到 map idsudobpftool map list# 写入 Map (Key: IP, Value: 0)sudobpftool map updateid<MAP_ID>key 0xc0 0xa8 0x01 0x64 value0

📊 二、 性能基准测试 (Benchmark)

这是最震撼的部分。我们在两台直连的服务器上进行测试,一台使用pktgen发送 64字节 的 SYN Flood 攻击包,另一台进行防御。

测试环境:

  • CPU: Intel Xeon Gold (单核处理中断)
  • NIC: Mellanox ConnectX-4 25GbE
  • OS: Ubuntu 20.04 (Kernel 5.4+)
防御方案处理位置PPS (每秒包数)CPU 占用结果
无防御应用程序~0.8 Mpps100% (用户态)系统卡死
iptablesNetfilter~1.8 Mpps100% (软中断)内核过载,丢包严重
XDP (Generic)协议栈入口~3.5 Mpps100%提升一倍
XDP (Native)网卡驱动层~14.8 Mpps60%线速 (Line Rate) 处理!

解读:

  • Iptables在 180 万 PPS 时就撑不住了,瓶颈在于sk_buff分配和 Connection Tracking(连接追踪)。
  • XDP Native轻松跑满了 10G/25G 网卡的物理极限(14.8 Mpps 是 10Gbps 下 64 字节包的理论极限)。CPU 甚至还有空闲!

⚠️ 三、 XDP 的局限性

虽然 XDP 很强,但也不是万能的:

  1. 网卡驱动支持:虽然 Generic 模式支持所有网卡,但要达到千万级 PPS,必须网卡驱动支持 Native XDP(主流的 Intel, Mellanox, Broadcom 都支持)。
  2. 功能受限:XDP 程序为了保证安全和速度,不能使用循环(必须展开),栈空间极小(512字节),无法感知 TCP 连接状态(无状态防火墙)。
  3. 调试困难:eBPF 的调试需要一定的门槛。

🎯 总结

  • Iptables适合处理复杂的、低流量的控制策略(如 SSH 访问控制)。
  • XDP是处理DDoS、负载均衡 (L4LB)的终极武器。

如果你的业务面临大规模流量攻击的风险,不要再去调优sysctl里的net.ipv4.tcp_max_syn_backlog了,直接上 XDP 吧。

Next Step:
查看开源项目CiliumL4LB Katran(Facebook 开源)。它们是 XDP 在工业界落地的最佳范例。尝试在你的测试环境中,使用xdp-tools包中的xdpdump来抓取经过 XDP 程序的流量,体验一下在 tcpdump 抓不到包之前就能看到流量的感觉。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 10:16:34

XMLHttpRequest 从入门到实战:GET/POST 请求完整案例

一、前言 在前后端分离开发模式中&#xff0c;AJAX 是实现页面无刷新数据交互的核心技术&#xff0c;而 XMLHttpRequest&#xff08;简称 XHR&#xff09;正是浏览器原生支持的 AJAX 底层 API。 相比于现代的 fetch 和 Axios&#xff0c;XMLHttpRequest 兼容性更好&#xff0…

作者头像 李华
网站建设 2026/4/15 16:03:35

基于Java的家政搬家智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 家政搬家智慧管理系统的主要功能模块包括会员管理、订单管理等23个子系统&#xff0c;覆盖了从客户注册到售后服务的全流程。开发背景分析基于传统管理模式效率低下且无法提供个性化服务的实际问题。创新性在于将现代技术与实际需求相结合…

作者头像 李华
网站建设 2026/4/15 11:42:59

【开题答辩全过程】以地铁安全管理信息系统设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

作者头像 李华
网站建设 2026/4/16 10:20:57

从 2025 到 2026,Berachain 的“攻”与“守”

​——当 L1 不再靠叙事生存&#xff0c;它还能做什么&#xff1f;2025 年成为 L1 赛道发展的关键分水岭。早期依赖技术先行的叙事——不断追求更高的 TPS、更低的 Gas 成本——已经难以继续支撑估值扩张。基础设施本身并未失去价值&#xff0c;但它不再自动等价于代币价值&…

作者头像 李华
网站建设 2026/4/16 10:16:58

服装管理订单ERP是什么?主要包括哪些功能?

服装管理订单ERP系统的功能解析与应用 服装管理订单ERP系统是一款专为服装电商行业设计的综合软件&#xff0c;它集成了多个功能模块&#xff0c;包括进销存管理、发货管理、财务管理和商品管理。这些模块相互连接&#xff0c;形成了一个高效的运营平台。进销存管理能够实时监控…

作者头像 李华
网站建设 2026/4/16 10:16:57

学长亲荐9个AI论文写作软件,专科生轻松搞定毕业论文!

学长亲荐9个AI论文写作软件&#xff0c;专科生轻松搞定毕业论文&#xff01; 专科生的论文救星&#xff0c;AI 工具如何改变你的写作方式 对于许多专科生来说&#xff0c;毕业论文既是一道门槛&#xff0c;也是一次挑战。尤其是在时间紧张、资料匮乏、写作经验不足的情况下&…

作者头像 李华