ddos攻击是啥意思 DDoS是什么意思( 四 )


XDP_REDIRECT, http:// Transmit packet from another interface
};
可以看出这个动作的本质是一个int值 。前面4个动作是不需要参数的,最后一个动作需要额外指定一个NIC网络设备名称,作为转发这个数据包的目的地 。
启用XDP后 , 网络包传输路径是这样的:

可以看到多了3个红色方框圈起来的新链路,我们来一一介绍:
offload模式,XDP程序直接hook到可编程网卡硬件设备上,与其他两种模式相比,它的处理性能最强;由于处于数据链路的最前端,过滤效率也是最高的 。如果需要使用这种模式,需要在加载程序时明确声明 。目前支持这种模式的网卡设备不多,有一家叫netronome 。
native模式,XDP程序hook到网络设备的驱动上,它是XDP最原始的模式,因为还是先于操作系统进行数据处理,它的执行性能还是很高的,当然你的网络驱动需要支持,目前已知的有i40e, nfp, mlx系列和ixgbe系列 。
generic模式,这是操作系统内核提供的通用 XDP兼容模式,它可以在没有硬件或驱动程序支持的主机上执行XDP程序 。在这种模式下,XDP的执行是由操作系统本身来完成的,以模拟native模式执行 。好处是,只要内核够高,人人都能玩XDP;缺点是由于是仿真执行,需要分配额外的套接字缓冲区(SKB),导致处理性能下降,跟native模式在10倍左右的差距 。
当前主流内核版本的Linux系统在加载XDP BPF程序时,会自动在native和generic这两种模式选择,完成加载后,可以使用ip命令行工具来查看选择的模式 。
struct bpf_map_def SEC(“maps”) c_map = {
.type = BPF_MAP_TYP_PERCPU_ARRAY,
.key_size = sizeof(int),
.value_size = sizeof(long),
.max_entries = 256,
};
void sample_packet(void *data, void *data_end) {
http:// mark the packet to be sampled
}
static inline void update_rule_counters(int rule_id) {
long *value =https://m.laogu.cc/
bpf_map_lookup_elem(&c_map, &rule_id);
if (value)
*value += 1;
}
static inline int rule_1(void *data, void *data_end) {
http:// if any of the rule conditions is not met
http:// return XDP_PASS;
update_rule_counters(1);
sample_packet(data, data_end);
return XDP_DROP;
}
http:// static inline int rule_2(..)
SEC(“xdp1”)
int xdp_prog(struct xdp_md *ctx) {
void *data = https://m.laogu.cc/(void *)(long)ctx->data;
void *data_end = (void *)(long)ctx->data_end;
int ret;
ret = rule_1(data, data_end);
if (ret != XDP_PASS)
return ret;
ret = rule_2(data, data_end);
if (ret != XDP_PASS)
return ret;
http://..
return XDP_PASS;
}
XDP的程序在这里的主要作用是完成early drop ,而不是识别,相当于执行者,通过我们的分析工具下发拦截指令,并实施拦截 。大体的玩法就是:
1, 自研的模块负责识别DDOS攻击包
2, 自研的规则下发拦截规则,完成告警并记录
3, XDP负责阻止黑名单里的IP继续访问
DDOS大体介绍了一遍,了解即可,上面都是脏活累活即可,交给专门做防DDoS的厂商去做,一般都直接使用CDN和高防即可,比如,知道创宇的加速乐,腾讯云的大禹等等 。

【ddos攻击是啥意思 DDoS是什么意思】声明:本文由猫小编【创业者资源平台】作者编辑发布 , 更多技术关注猫小编技术!

推荐阅读