XDP(eXpress Data Path) 允许在网卡驱动刚收到网络数据包、尚未分配 sk_buff 且尚未进入内核协议栈时,直接通过 eBPF 程序对数据包进行过滤或丢弃,是实现数千万 PPS 级抗 DDoS 防御的核心技术。
一、XDP_DROP 极速丢包逻辑
c
#include <linux/bpf.h>
#include <linux/if_ether.h>
#include <linux/ip.h>
#include <bpf/bpf_helpers.h>
SEC("xdp")
int xdp_drop_syn_flood(struct xdp_md *ctx) {
void *data = (void *)(long)ctx->data;
void *data_end = (void *)(long)ctx->data_end;
struct ethhdr *eth = data;
if ((void *)(eth + 1) > data_end) return XDP_PASS;
if (eth->h_proto != __constant_htons(ETH_P_IP)) return XDP_PASS;
struct iphdr *iph = (void *)(eth + 1);
if ((void *)(iph + 1) > data_end) return XDP_PASS;
// 匹配特定被攻击源 IP 并立即无损丢弃
if (iph->saddr == __constant_htonl(0x0a000001)) {
return XDP_DROP;
}
return XDP_PASS;
}