本发明属于网络技术与安全领域,尤其涉及一种基于xdp的高性能流量采集器。
背景技术:
1、随着互联网的普及和应用的发展,网络流量的增长迅猛,网络安全问题也越来越突出。对网络中传输的流量进行采样分析,可以及时检测并响应网络攻击、入侵行为、恶意代码等安全事件,减少潜在风险,并保护网络的完整性、可用性和机密性。
2、目前主流的流量包采样工具有如下两种:
3、(1)基于libpcap采样工具如tcpdump:语法简单功能强大支持丰富的过滤器、通用性强适用于所有linux发行版、但性能相对较弱不适用于大流量场景。
4、(2)基于dpdk的采样工具:高性能低延迟、绕过内核协议栈有非常高的吞吐量、但使用非常复杂、部署和学习成本交高、且通用性差,需要特定的intel网卡才能工作,而且与内核防火墙模块不能并存易冲突。
5、现有的采样技术存在性能与通用性不可兼得的局面,使用基于libpcap的方式采样时最大的问题就是性能瓶颈,长时间持续采样非常容易对正常业务造成干扰,且不能直接设置采样率和最大采样速率,在大流量场景采样会直接拉高系统负载造成丢包。使用dpdk采集流量能获得高性能、低延迟,但最大的问题是通用性差需要适配专门的intel网卡、较高学习门槛,做精细化配置时需要专门的开发和调试技能、维护成本较高。
技术实现思路
1、鉴于以上现有技术的不足,发明的目的在于提供一种基于xdp的高性能流量采集器,可以提供与tcpdump一致的捕获过滤语法同时具备dpdk高性能的通用流量采样器方案,解决上述性能与通用性不能兼得的问题。
2、本发明提出了一种基于xdp的高性能流量采集器,包括:用户态管理模块和内核ebpf模块,其中,
3、所述用户态管理模块位于用户空间,在所述用户态管理模块上部署有采样管理程序,所述采样管理程序用于对输入的tcpdump捕获过滤器语句进行动态编译,并生成ebpf程序,然后将所述ebpf程序发送至所述内核ebpf模块;
4、所述内核ebpf模块位于内核空间,在所述内核ebpf模块上部署有高性能数据路径xdp程序,所述内核ebpf模块用于接收来自所述用户态管理模块的所述ebpf程序,并将所述ebpf程序挂载到xdp程序上,所述xdp程序将数据包直接通过环形缓冲区ring buffer发送到所述采样管理程序,不经过内核协议栈。
5、进一步地,所述采样管理程序启动后加载解析配置文件,将配置文件的filter字段编译为ebpf字节码并插入到预先开发完成的ebpf模板中并一起编译为obj文件,再将编译好的obj文件加载到网卡驱动xdp挂载点上,将配置文件中的ratio和max_rate写入到ebpf-map数据结构,xdp程序通过读取ebpf-map数据结构,以按比率和最大速率进行采样,所述采样管理程序通过从环形缓冲区ringbuffer获取采样到的数据并供后续的分析。
6、进一步地,所述配置文件包括:
7、nic文件:用于描述对那张网卡进行采样;
8、ratio文件:用于描述采样的比例;
9、max_rate文件:用于描述最大采样速率;
10、filter文件:用于描述关注的数据包。
11、进一步地,所述采样管理程序将编译好的obj文件加载到配置文件nic字段指定的网卡xdp挂载点上。
12、进一步地,所述将配置文件的filter字段编译为ebpf字节码并插入到预先开发完成的ebpf模板,包括:
13、将filter字段的tcpdump过滤器语句编译成ebpf指令时,先将其编译为cbpf指令,然后再将cbpf指令转换为ebpf程序,并将编译好的ebpf程序加载到内核
14、进一步地,开发完成ebpf模板,包括:ebpf模板程序负责按配置的ratio和max_rate进行数据包过滤,然后通过bpf_tail_call指令跳转到由filter编译而成的ebpf程序,命中则通过环形缓冲区ring buffer先管理进程发送数据。
15、进一步地,所述采样管理程序在从环形缓冲区ringbuffer获取采样到的数据分析后,实时对采集到的数据包进行安全分析或序列化文件。
16、进一步地,所述用户态管理模块进一步配置有业务程序,其中,数据包进入协议栈后分配sk_buff数据,用于维护socket buffer状态和描述信息,由协议栈通过socket发送至业务程序。
17、进一步地,所述基于xdp的高性能流量采集器部署在流量入口的负载均衡器上,以采集所有到达负载均衡器的流量,包括所有扫描器构造的数据包。
18、进一步地,所述基于xdp的高性能流量采集器部署在每台服务器上,以采集到达每台服务器的流量。
19、本发明有益效果如下:
20、本发明提出的基于xdp的高性能流量采集器,具有以下有益效果:
21、1.高性能:性能远超tcpdump更适用于大流量场景采样。高性能的主要原因是xdp程序能在网卡驱动中被调用可不经过内核协议栈,采样的数据在内核中有更短的路径。
22、2.通用性高:完全支持tcpdump的捕获过滤器语法,无额外学习成本。捕获过滤语法与tcpdump完全一致无需类似dpdk的额外学习成本。支持tcpdump过滤语法的主要原因是解析出的cbpf程序能非常容易的转换为ebpf程序。
23、3.精细配置:通过配置文件设置采样比和最大采样率,主要借助于ebpf程序能通过ebpf-map从用户态获取配置,现有的tcpdump只支持全量采集通过过滤器的流量。
24、4.兼容性强:无需像dpdk那样适配专用的intel网卡,xdp从linux4.8起原生支持。
25、5.可控性强:xdp的ebpf程序在流量过滤时能实现更精细化的匹配。
1.一种基于xdp的高性能流量采集器,其特征在于,包括:用户态管理模块和内核ebpf模块,其中,
2.根据权利要求1所述的一种基于xdp的高性能流量采集器,其特征在于,所述采样管理程序启动后加载解析配置文件,将配置文件的filter字段编译为ebpf字节码并插入到预先开发完成的ebpf模板中并一起编译为obj文件,再将编译好的obj文件加载到网卡驱动xdp挂载点上,将配置文件中的ratio和max_rate写入到ebpf-map数据结构,xdp程序通过读取ebpf-map数据结构,以按比率和最大速率进行采样,所述采样管理程序通过从环形缓冲区ringbuffer获取采样到的数据并供后续的分析。
3.根据权利要求2所述的一种基于xdp的高性能流量采集器,其特征在于,所述配置文件包括:
4.根据权利要求2所述的一种基于xdp的高性能流量采集器,其特征在于,所述采样管理程序将编译好的obj文件加载到配置文件nic字段指定的网卡xdp挂载点上。
5.根据权利要求2所述的一种基于xdp的高性能流量采集器,其特征在于,所述将配置文件的filter字段编译为ebpf字节码并插入到预先开发完成的ebpf模板,包括:
6.根据权利要求2或5所述的一种基于xdp的高性能流量采集器,其特征在于,开发完成ebpf模板,包括:ebpf模板程序负责按配置的ratio和max_rate进行数据包过滤,然后通过bpf_tail_call指令跳转到由filter编译而成的ebpf程序,命中则通过环形缓冲区ringbuffer先管理进程发送数据。
7.根据权利要求2所述的一种基于xdp的高性能流量采集器,其特征在于,所述采样管理程序在从环形缓冲区ringbuffer获取采样到的数据分析后,实时对采集到的数据包进行安全分析或序列化文件。
8.根据权利要求1所述的一种基于xdp的高性能流量采集器,其特征在于,所述用户态管理模块进一步配置有业务程序,其中,数据包进入协议栈后分配sk_buff数据,用于维护socket buffer状态和描述信息,sk_buff的载荷最终由协议栈通过socket发送至业务程序。
9.根据权利要求1所述的一种基于xdp的高性能流量采集器,其特征在于,所述基于xdp的高性能流量采集器部署在流量入口的负载均衡器上,以采集所有到达负载均衡器的流量,包括所有扫描器构造的数据包。
10.根据权利要求1所述的一种基于xdp的高性能流量采集器,其特征在于,所述基于xdp的高性能流量采集器部署在每台服务器上,以采集到达每台服务器的流量。
