欢迎访问 内存溢出 —— 独立后端与系统工程技术博客

专注于分布式系统、Linux内核、数据库存储与后端工程实践

Linux 内核态网络加速:XDP(eXpress Data Path)与 DDoS 高速清洗

发表于:|最后更新:|分类:Linux与网络|阅读:5732 次

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;
}