1.本发明涉及网络安全领域,具体地说,涉及一种基于sflow的防火墙
流量检测方法、系统、设备及介质。
背景技术:
2.防火墙旁路部署在网络的核心设备侧审计流量时,因为防火墙只能接受对端设备通过镜像的方式将其
接口收发方向的所有流量全部发送到防火墙上,防火墙才可以进行该网络中经过的所有外网流量进行安全审计。但是这样就会经常发生现网流量太大,导致防火墙的性能消耗巨大,很多低规格低性能的防火墙无法承载大流量的场景,只能购买更高规格的防火墙才可以负载大型流量场景的流量审计工作,这个问题如果不解决,就会对防火墙本身的cpu、内存等性能资源造成极大的浪费,需要不断地提升防火墙的性能规格才能不断满足复杂庞大的流量场景。
3.现有防火墙旁路模式部署下,审计分析流量时只能通过镜像的方式获取对端设备流量,只能全量分析镜像过来的所有流量,对防火墙本身的性能消耗巨大以及分析流量的效率也是极低的,存在技术局限性带来的性能瓶颈问题,防火墙如果只支持镜像这种把对端核心流量完全复制过来进行安全审计的方法,那对防火墙自身的性能消耗浪费是一个很严峻的问题,但是如果可以采用按照一定的采样比例对庞大的流量进行随机采样的方式进行流量审计,这样既可以保证对现网流量进行安全审计,又可以降低对防火墙性能的消耗。因为流量小了,对防火墙的吞吐性能、cpu以及内存的消耗就会小很多,这样防火墙就可以多承载一些其他的安全防护功能。但是目前防火墙上没有实现基于sflow流量分析技术去分析流量的方法。
技术实现要素:
4.本发明针对现有的防火墙只能通过镜像的方式获取对端设备的流量,对防火墙本身的性能消耗巨大以及分析流量的效率极低的问题,提出一种基于sflow的防火墙流量检测方法、系统、设备及介质,首先将内嵌于交换机或者路由器等转发设备的sflow agent通过sflow采样技术获取网络设备上的流量转发统计并实时地通过sflow数据
报文发送到sflow collector以供sflow collector进行分析,然后将防火墙作为sflow collector,对sflow agent采样收集的sflow报文进行安全审计;防火墙只审计防护sflow采样报文,相比于通过镜像的方式审计所有流量,极大地改善了防火墙性能消耗,提升了防火墙旁路部署审计流量的效率。
5.本发明具体实现内容如下:
6.一种基于sflow的防火墙流量检测方法,包括以下步骤:
7.步骤1:内嵌于转发设备的sflow agent对流经网络设备的数据包进行周期性采样,得到网络信息,并将网络信息按照固定的格式发送至sflow collector;
8.sflow系统包含一个嵌入在设备中的sflow agent和远端的sflow collector。其
中,sflow agent通过sflow采样获取本设备上的接口统计信息和数据信息,将信息封装成sflow报文,sflow agent会将sflow报文发送到指定的sflow collector;
9.所述sflow采样的采样方式为随机采样,将每一个接口处理的报文设定一个范围为0~n的随机值,设置一个阈值n,n∈[0,n],当报文的随机值小于这个阈值时,报文采样。
[0010]
所述sflow报文包含4种报文
字段格式,分别为flow sample报文字段格式、expanded flow sample报文字段格式、counter sample报文字段格式、expanded counter sample报文字段格式。其中,expanded flow sample报文字段格式和expanded counter sample报文字段格式是sflow version5新增内容,是flow sample报文字段格式和counter sample报文字段格式的扩展,但不前向兼容。所有的extended的采样内容必须使用expanded采样报文字段格式进行封装;
[0011]
所述步骤1具体包括以下步骤:
[0012]
步骤11:转发设备启动后,初始化sflow;
[0013]
步骤111:初始化sflow全局变量;
[0014]
所述步骤111的具体为:将agent数据初始化为无效值、将collector port数据初始化为6343、将sampling_rate初始化为默认值、将counter_interval初始化为默认值、将采样方向初始化为无效值;
[0015]
步骤112:初始化sflow循环队列;
[0016]
所述步骤112的具体操作为:将循环队列每个节点大小初始化为512,将buffer初始化,大小根据转发设备实际槽数的多少动态分配,用来存放发送buffer的索引值;
[0017]
步骤113:初始化sflow发送函数;
[0018]
步骤114:注册sflow热插拔调用的回调函数;
[0019]
步骤115:注册sflow系统调用的回调函数;
[0020]
步骤116:注册sflow报文处理函数;
[0021]
步骤12:配置sflow命令行;
[0022]
步骤121:输入命令,打开数据库,获取记录个数和记录结果集,并逐条记录查询该接口信息,判断接口记录是否存在,若存在,则更新数据库接口数据,下发关闭或修改接口sflow功能指令到内核;若不存在,继续判断接口记录数是否大于最大值,若是,在接口下输出接口数已达到最大,若不是,更新数据库添加接口数据,下发添加接口指令到内核;
[0023]
所述命令行配置具体包括以下命令行配置:
[0024]
配置sflow agent ip命令,当agent ip与collector ip不同时,sflow agent ip a.b.c.d更新数据库/config/db/sflow_cfg.db下的agent配置表项,给内核下发修改agent ip的指令,否则,给配置界面返回agent ip与collector ip不能相同的指令;
[0025]
配置sflow collector ip命令和port命令,当collector ip与agent ip不同时,sflow collector ip a.b.c.d[port《0-65535》]更新数据库collector配置表项,给内核下发修改collector ip、port的指令,否则,给配置界面返回agent ip与collector ip不能相同的指令;
[0026]
配置sflow enable命令,所述sflow enable命令包括sflow enable both命令、sflow enable inbound命令、sflow enable outbound命令,如果没有配置sflow enable both命令、sflow enable inbound命令会提示配置agent ip和collector ip;遍历sflow数
据库接口配置表,若数据库中没有该接口信息而且数据库中记录数不大于8,在数据库中创建该接口配置表,给内核下发添加接口消息,记录数大于8,给配置界面返回配置接口数达到最大;若数据库中有该接口,更新数据库,给内核下发修改sflow enable指令;
[0027]
配置sflow sampling-rate命令,遍历sflow数据库接口配置表,若数据库中没有该接口信息,而且数据库中记录数不大于8,在数据库中创建该接口配置表,记录数大于8,给配置界面返回配置接口数达到最大;若数据库中有该接口,下发的采样率与之前不同,给内核下发修改sampling-rate指令;
[0028]
配置sflow counter-interval命令,更新数据库,给内核下发修改counter-interval指令;
[0029]
配置no sflow enable命令,遍历sflow数据库接口配置表,若数据库中没有该接口信息,不处理;若有,删除该接口记录,更新数据库,给内核下发关闭接口sflow功能指令;
[0030]
配置no sflow sampling-rate命令,恢复接口sampling-rate默认值,遍历sflow数据库接口配置表,若数据库中没有该接口信息,不处理;若数据库中有该接口且接口采样率不为默认值,更新数据库,给内核下发修改sampling-rate指令,否则不处理;
[0031]
配置no sflow counter-interval命令,恢复接口counter-interval默认值,更新数据库,给内核下发修改counter-interval指令;
[0032]
配置no sflow agent ip a.b.c.d命令,数据库agent配置表恢复默认值,给内核下发修改agent ip指令;
[0033]
配置no sflow collector ip a.b.c.d命令,恢复数据库collector配置表ip默认值,给内核下发修改collector ip指令;
[0034]
步骤122:命令行下发之后,内核态通过下发的命令行开启sflow指令、修改sflow参数指令、关闭sflow指令做出反应,将采集到的sflow报文入队再封装;
[0035]
所述内核态通过下发的开启sflow信息做出反应的具体过程为:首先建立槽号与发送buffer的映射关系,然后创建sflow报文发送线程,给驱动下发接口采样消息,驱动采样报文后,给skb-》ucbitflag打一个标记skb_flag_sflow,表示是sflow报文,counter报文采样功能开启,开启counter,初始化定时器,周期性获取counter报文,设置定时器超时时间,定时进入counter处理函数;判断是否为带有sflow标记的报文,若不是,不处理;若是,继续向下判断;继续判断循环队列是否能继续存放报文,如果队列已满,则报文不作处理,丢弃报文数加一;如果队列还能继续填充,分别生成flow sample报文字段格式、expanded flow sample报文字段格式、counter sample报文字段格式、expanded counter sample报文字段格式,并插入循环队列;
[0036]
所述内核态通过下发的修改sflow参数指令做出反应的具体过程为:首先判断是否为驱动所需要参数,若不是,则存入全局配置;若是则下发给驱动;初始化定时器,周期性获取counter报文,设置定时器超时时间,定时进入counter处理函数;然后判断是否为sflow报文,若不是,不处理;若是,继续向下判断;继续判断循环队列是否能继续存放报文,如果队列已满,则报文不作处理,丢弃报文数加一;如果队列还能继续填充,分别生成flow sample报文字段格式、expanded flow sample报文字段格式、counter sample报文字段格式、expanded counter sample报文字段格式,并插入循环队列;
[0037]
所述内核态通过下发的开启sflow指令做出反应的具体过程为:首先判断此接口
所在槽位是否为最后一个开启sflow功能的接口,如果是,删除映射关系并关闭接口sflow功能,若不是,映射关系总数减一,关闭此接口sflow功能;继续向下判断,判断此接口是否是唯一开启sflow功能的接口,如果不是,不做处理;如果是,关闭counter报文采样定时器,不再产生counter报文;
[0038]
步骤13:sflow报文入队封装;
[0039]
步骤131:sflow报文入队加锁;
[0040]
所述sflow报文入队加锁的具体操作为:首先将循环队列的每个节点向下挪动一个节点,然后标记置位节点头部,最后标记节点头部报文类型;
[0041]
步骤132:封装expanded flow sample报文字段;
[0042]
所述封装expanded flow sample报文字段的具体操作为:依次填充flow sample字段头部、raw packet header字段、ethernet frame data字段、ipv4 data字段、extended router data字段、extended switch data字段;
[0043]
步骤133:封装expanded counter sample字段;
[0044]
所述封装expanded counter sample字段的具体操作为:首先根据net_device结构体指针获取接口信息,然后根据dev-》get_stats()获取设备状态信息,最后按照字段信息进行填写;
[0045]
所述填写的具体操作为:依次填充expanded counters sample头字段、generic interface counters字段、ethernet interface counters字段、processor information字段;
[0046]
步骤14:将封装好的报文实例放在循环队列中,发送sflow报文线程,并将封装好的报文发送出去;
[0047]
所述目的ip为collector ip地址的服务器或主机;
[0048]
所述步骤14的具体步骤为:
[0049]
步骤141:发送sflow报文线程,申请8块1450大小空间;
[0050]
步骤142:无限循环判断循环队列是否为空,若循环队列为空,判断当前获取的8块buffer是否有报文,如果有报文,发送报文并睡眠500ms,继续判断是否使能了sflow,若有接口使能,继续读取队列,若队列中没有报文睡眠500ms,若没有接口使能,退出线程;队列不为空则继续向下判断;
[0051]
步骤143:判断当前获取到的索引值是否为有效值,若获取到的索引值为无效时,则丢弃该节点的报文,继续读取下一节点的报文;若获取到的索引值为有效值则继续向下判断;
[0052]
步骤144:判断当前节点是否为可读取节点即写标记是否被复位,如果判断为不可读节点,则继续判断8块buffer是否有报文,如果有,发送报文并睡眠500ms,继续判断是否使能了sflow,如果有接口使能了sflow继续睡眠,等待队列被填充,如果没有接口使能sflow就退出sflow线程;如果判断当前节点为可读取节点,则继续向下判断;
[0053]
步骤145:判断发送buffer是否有足够的空间放下一个sample实例,如果空间不足,则返回当前已满的buffer索引,并发送buffer中的报文,当发送报文超过50次,睡眠20ms;如果空间充足,则继续向buffer填充sample实例;
[0054]
步骤2:将防火墙作为sflow collector接收sflow agent发送的sflow报文,并对
sflow报文进行解析,并对解析后的sflow报文进行流量分析;
[0055]
所述步骤2的具体步骤为:
[0056]
步骤21:将detect_sflow_process作为sflow报文解析入口,判断sflow报文是否是sflow v5版本,若不是直接将sflow报文返回,若是,解析sflow报文头部信息,并循环解析sflow字段信息,继续向下判断;
[0057]
步骤22:判断是否解析完所有字段信息,若是将sflow报文返回,若不是,继续向下判断;
[0058]
步骤23:判断是否是flow sample字段,若是,根据detect_sflow_v5_flow_sample_process解析flow sample字段报文信息,若不是,继续向下判断;
[0059]
步骤24:判断是否是flow sample expanded字段,若是,根据detect_sflow_v5_expanded_flow_sample_process解析flow sample expanded字段报文信息,若不是,直接做略过处理;
[0060]
步骤25:判断解析后的flow sample字段报文信息和flow sample expanded字段报文信息是否提取成功,若是,与ip检测表项进行匹配,并对攻击详细信息和特征类型流量进行统计,若不是,返回步骤22判断是否解析完所有字段信息;
[0061]
步骤3:将解析后的sflow报文与防火墙的dfi/dpi检测进行匹配,生成安全审计生成表。
[0062]
本发明具有以下有益效果:
[0063]
(1)本发明将防火墙作为sflow collector进行流量分析,解决了目前审计分析流量时只能通过镜像的方式获取对端设备流量的技术局限性所带来的性能瓶颈问题,提升了防火墙旁路部署审计流量的效率;
[0064]
(2)本发明防火墙通过采样比的方式对sflow agent发送的报文进行按比例采样,提升了流量的安全审计效率,降低了防火墙的性能消耗,极大地改善了防火墙旁路部署审计网络中流量的整体效率。
附图说明
[0065]
图1为本发明整体流程图;
[0066]
图2为sflow报文结构组成示意图;
[0067]
图3为初始化sflow功能流程图;
[0068]
图4为命令行配置流程示意图;
[0069]
图5为配置内核态流程示意图;
[0070]
图6为sflow报文出队发送流程示意图;
[0071]
图7为解析sflow报文的流程示意图。
具体实施方式
[0072]
为了更清楚地说明本发明实施例的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,应当理解,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例,因此不应被看作是对保护范围的限定。基于本发明中的实施例,本领域普通技术工作人员在没有做出创造性劳动前提下所获得的所
有其他实施例,都属于本发明保护的范围。
[0073]
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“设置”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;也可以是直接相连,也可以是通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
[0074]
专业术语及英文缩写对应的完整英文解释如下:
[0075]
sflow:sampled flow的简称,sflow功能是一种基于报文采样的网络流量监控技术,主要用于对网络流量进行统计分析。
[0076]
流量分析:是指捕捉网络中流动的数据包,并通过查看数据包内部数据以及进行相关的协议、流量分析、统计等来发现网络运行过程中出现的问题。
[0077]
防火墙:是一个由计算机硬件和软件组成的系统,部署于网络边界,是内部网络和外部网络之间的连接桥梁,同时对进出网络边界的数据进行保护,防止恶意入侵、恶意代码的传播等,保障内部网络数据的安全。
[0078]
实施例1:
[0079]
本实施例提出一种基于sflow的防火墙流量检测方法,sflow系统包括流量采样代理sflow agent、流量采样收集器sflow collector,如图1所示,包括以下步骤:
[0080]
步骤1:将内嵌于交换机或路由器等转发设备的流量采样代理sflow agent对流经网络设备的数据包进行周期性采样,得到网络流量信息,并将网络流量信息按照固定的格式发送至流量采样收集器sflow collector;
[0081]
步骤2:将防火墙作为流量采样收集器sflow collector接收流量采样代理sflow agent发送的sflow报文,对sflow报文进行解析,并对解析后的sflow报文进行流量分析;
[0082]
步骤3:将解析后的sflow报文与防火墙的dfi/dpi检测进行匹配,生成安全审计生成表。
[0083]
工作原理:本实施例所提出的技术方案主要由以下3个步骤组成:sflow agent采样、sflow collector收集sflow报文、防火墙对报文进行安全审计。首先内嵌于交换机或者路由器等转发设备的sflow agent通过特定的采样技术获取网络设备上的流量转发统计并实时地通过sflow数据报文发送到sflow collector以供sflow collector进行分析,防火墙充当sflow collector的角,对sflow agent采样收集的sflow报文进行安全审计;这样防火墙审计防护的都是sflow采样报文,由此防火墙性能的消耗相比于通过镜像的方式审计所有流量有了极大的改善,从而实现了防火墙旁路部署审计流量效率的提升。
[0084]
实施例2:
[0085]
本实施例在上述实施例1的基础上,如图2、图3、图4、图5、图6、图7所示对采样、收集、解析、审计的具体步骤进行说明。
[0086]
具体包括以下步骤:
[0087]
步骤1:内嵌于转发设备的sflow agent对流经网络设备的数据包进行周期性采样,得到网络信息,并将网络信息按照固定的格式发送至sflow collector;
[0088]
sflow系统包含一个嵌入在设备中的sflow agent和远端的sflow collector;
[0089]
其中,sflow agent通过sflow采样获取本设备上的接口统计信息和数据信息,将
both命令、sflow enable inbound命令会提示配置agent ip和collector ip;遍历sflow数据库接口配置表,若数据库中没有该接口信息而且数据库中记录数不大于8,在数据库中创建该接口配置表,给内核下发添加接口消息,记录数大于8,给配置界面返回配置接口数达到最大;若数据库中有该接口,更新数据库,给内核下发修改sflow enable指令;
[0109]
配置sflow sampling-rate命令,遍历sflow数据库接口配置表,若数据库中没有该接口信息,而且数据库中记录数不大于8,在数据库中创建该接口配置表,记录数大于8,给配置界面返回配置接口数达到最大;若数据库中有该接口,下发的采样率与之前不同,给内核下发修改sampling-rate指令;
[0110]
配置sflow counter-interval命令,更新数据库,给内核下发修改counter-interval指令;
[0111]
配置no sflow enable命令,遍历sflow数据库接口配置表,若数据库中没有该接口信息,不处理;若有,删除该接口记录,更新数据库,给内核下发关闭接口sflow功能指令;
[0112]
配置no sflow sampling-rate命令,恢复接口sampling-rate默认值,遍历sflow数据库接口配置表,若数据库中没有该接口信息,不处理;若数据库中有该接口且接口采样率不为默认值,更新数据库,给内核下发修改sampling-rate指令,否则不处理;
[0113]
配置no sflow counter-interval命令,恢复接口counter-interval默认值,更新数据库,给内核下发修改counter-interval指令;
[0114]
配置no sflow agent ip a.b.c.d命令,数据库agent配置表恢复默认值,给内核下发修改agent ip指令;
[0115]
配置no sflow collector ip a.b.c.d命令,恢复数据库collector配置表ip默认值,给内核下发修改collector ip指令;
[0116]
步骤122:命令行下发之后,内核态通过下发的命令行开启sflow指令、修改sflow参数指令、关闭sflow指令做出反应,将采集到的sflow报文入队再封装;
[0117]
所述内核态通过下发的开启sflow信息做出反应的具体过程为:首先建立槽号与发送buffer的映射关系,然后创建sflow报文发送线程,给驱动下发接口采样消息,驱动采样报文后,给skb-》ucbitflag打一个标记skb_flag_sflow,表示是sflow报文,counter报文采样功能开启,开启counter,初始化定时器,周期性获取counter报文,设置定时器超时时间,定时进入counter处理函数;判断是否为带有sflow标记的报文,若不是,不处理;若是,继续向下判断;继续判断循环队列是否能继续存放报文,如果队列已满,则报文不作处理,丢弃报文数加一;如果队列还能继续填充,分别生成flow sample报文字段格式、expanded flow sample报文字段格式、counter sample报文字段格式、expanded counter sample报文字段格式,并插入循环队列;
[0118]
所述内核态通过下发的修改sflow参数指令做出反应的具体过程为:首先判断是否为驱动所需要参数,若不是,则存入全局配置;若是则下发给驱动;初始化定时器,周期性获取counter报文,设置定时器超时时间,定时进入counter处理函数;然后判断是否为sflow报文,若不是,不处理;若是,继续向下判断;继续判断循环队列是否能继续存放报文,如果队列已满,则报文不作处理,丢弃报文数加一;如果队列还能继续填充,分别生成flow sample报文字段格式、expanded flow sample报文字段格式、counter sample报文字段格式、expanded counter sample报文字段格式,并插入循环队列;
[0119]
所述内核态通过下发的开启sflow指令做出反应的具体过程为:首先判断此接口所在槽位是否为最后一个开启sflow功能的接口,如果是,删除映射关系并关闭接口sflow功能,若不是,映射关系总数减一,关闭此接口sflow功能;继续向下判断,判断此接口是否是唯一开启sflow功能的接口,如果不是,不做处理;如果是,关闭counter报文采样定时器,不再产生counter报文;
[0120]
步骤13:sflow报文入队封装;
[0121]
步骤131:sflow报文入队加锁;
[0122]
所述sflow报文入队加锁的具体操作为:首先将循环队列的每个节点向下挪动一个节点,然后置位节点头部写标记,最后标记节点头部报文类型;
[0123]
步骤132:封装expanded flow sample报文字段;
[0124]
所述封装expanded flow sample报文字段的具体操作为:依次填充flow sample字段头部、raw packet header字段、ethernet frame data字段、ipv4 data字段、extended router data字段、extended switch data字段;
[0125]
步骤133:封装expanded counter sample字段;
[0126]
所述封装expanded counter sample字段的具体操作为:首先根据net_device结构体指针获取接口信息,然后根据dev-》get_stats()获取设备状态信息,最后按照字段信息进行填写;
[0127]
所述填写的具体操作为:依次填充expanded counters sample头字段、generic interface counters字段、ethernet interface counters字段、processor information字段;
[0128]
步骤14:将封装好的报文实例放在循环队列中,发送sflow报文线程,并将封装好的报文发送出去;
[0129]
所述目的ip为collector ip地址的服务器或主机;
[0130]
所述步骤14的具体步骤为:
[0131]
步骤141:发送sflow报文线程,申请8块1450大小空间;
[0132]
步骤142:无限循环判断循环队列是否为空,若循环队列为空,判断当前获取的8块buffer是否有报文,如果有报文,发送报文并睡眠500ms,继续判断是否使能了sflow,若有接口使能,继续读取队列,若队列中没有报文睡眠500ms,若没有接口使能,退出线程;队列不为空则继续向下判断;
[0133]
步骤143:判断当前获取到的索引值是否为有效值,若获取到的索引值为无效时,则丢弃该节点的报文,继续读取下一节点的报文;若获取到的索引值为有效值则继续向下判断;
[0134]
步骤144:判断当前节点是否为可读取节点即写标记是否被复位,如果判断为不可读节点,则继续判断8块buffer是否有报文,如果有,发送报文并睡眠500ms,继续判断是否使能了sflow,如果有接口使能了sflow继续睡眠,等待队列被填充,如果没有接口使能sflow就退出sflow线程;如果判断当前节点为可读取节点,则继续向下判断;
[0135]
步骤145:判断发送buffer是否有足够的空间放下一个sample实例,如果空间不足,则返回当前已满的buffer索引,并发送buffer中的报文,当发送报文超过50次,睡眠20ms;如果空间充足,则继续向buffer填充sample实例;
[0136]
步骤2:将防火墙作为sflow collector接收sflow agent发送的sflow报文,并对sflow报文进行解析,并对解析后的sflow报文进行流量分析;
[0137]
所述步骤2的具体步骤为:
[0138]
步骤21:将detect_sflow_process作为sflow报文解析入口,判断sflow报文是否是sflow v5版本,若不是直接将sflow报文返回,若是,解析sflow报文头部信息,并循环解析sflow字段信息,继续向下判断;
[0139]
步骤22:判断是否解析完所有字段信息,若是将sflow报文返回,若不是,继续向下判断;
[0140]
步骤23:判断是否是flow sample字段,若是,根据detect_sflow_v5_flow_sample_process解析flow sample字段报文信息,若不是,继续向下判断;
[0141]
步骤24:判断是否是flow sample expanded字段,若是,根据detect_sflow_v5_expanded_flow_sample_process解析flow sample expanded字段报文信息,若不是,直接做略过处理;
[0142]
步骤25:判断解析后的flow sample字段报文信息和flow sample expanded字段报文信息是否提取成功,若是,与ip检测表项进行匹配,并对攻击详细信息和特征类型流量进行统计,若不是,返回步骤22判断是否解析完所有字段信息;
[0143]
步骤3:将解析后的sflow报文与防火墙的dfi/dpi检测进行匹配,生成安全审计生成表。
[0144]
本实施例的其他部分与上述实施例1相同,故不再赘述。
[0145]
实施例3:
[0146]
本实施例在上述实施例1-2任一项的基础上,如图2、图3、图4、图5、图6、图7所示,以一个具体的实施例进行详细说明。
[0147]
工作原理:本实施例为解决现有防火墙旁路模式部署下,审计分析流量时只能通过镜像的方式获取对端设备流量的技术局限性所带来的性能瓶颈问题,从改变获取对端设备流量的方式出发,通过sflow流量分析技术,提出了一种基于sflow流量分析技术的防火墙检测流量的解决方案,以解决当前防火墙只能通过镜像获取对端设备流量的技术局限性问题。
[0148]
如图1所示,本实施例主要由以下3个步骤组成:sflow agent采样、sflow collector收集sflow报文、防火墙对报文进行安全审计。首先内嵌于交换机或者路由器等转发设备sflow agent通过特定的采样技术获取网络设备上的流量转发统计并实时地通过sflow数据报文发送到collector以供collector进行分析,防火墙充当sflow collector的角,对agent采样收集的sflow报文进行安全审计;这样防火墙审计防护的都是sflow采样报文,由此防火墙性能的消耗相比于通过镜像的方式审计所有流量有了极大的改善。从而实现提升防火墙旁路部署审计流量的效率。
[0149]
1.1sflow agent采样
[0150]
首先,需要内嵌于交换机或者路由器等转发设备的sflow agent通过sflow技术对流经网络设备的数据包进行周期性采样来获取网络信息,并将样本信息按照固定的格式发送至流量分析服务器。sflow系统包含一个嵌入在设备中的sflow agent和远端的sflow collector。其中,sflow agent通过sflow采样获取本设备上的接口统计信息和数据信息,
将信息封装成sflow报文,sflow agent会将sflow报文发送到指定的sflow collector。
[0151]
1.1.1sflow采样方式
[0152]
sflow agent提供了flow采样方式供用户从采样的角度分析网络流量状况。
[0153]
flow采样是针对接口上报文的采样,是sflow agent设备在指定端口上按照特定的采样方向和采样比对报文进行采样分析,并将分析的结果通过sflow报文发送到collector设备的过程。
[0154]
sflow目前采用的是随机采样的方法,随机采样方式是指针对每一个接口处理的报文给一个随机值,假定随机数的取值范围为0~n,设置一个阈值n(n∈[0,n]),当报文的随机值小于这个阈值时,报文采样,这样实际的采样比为n/(n+1)。从统计角度来说,随机采样方式采集的样本更加能够体现整个样本空间的情况,因此目前主要采用的采样方式为随机采样方式,flow采样报文的主要信息如表6-1所示。
[0155]
表6-1flow采样报文中主要字段信息说明
[0156][0157]
1.1.2sflow报文格式
[0158]
sflow报文采用udp封装,基本结构由首部和多组采样数据构成。
[0159]
如图2所示,sflow报文共有4种报文字段格式,分别为flow sample、expanded flow sample、counter sample、expanded counter sample。其中expanded flow sample和expanded counter sample是sflow version5新增内容,是flow sample和counter sample的扩展,但不前向兼容。所有的extended的采样内容必须使用expanded采样报文格式封装。
[0160]
说明:目前sflow采用sflow version5版本,仅支持expanded flow sample和expanded counter sample两种报文字段格式。
[0161]
1.1.3sflow实现流程
[0162]
1.1.3.1sflow初始化流程
[0163]
如图3所示,转发设备启动后,sflow模块进行初始化操作:
[0164]
①
sflow全局数据初始化:
[0165]
agent初始化为无效值,无效值为零。
[0166]
collector port初始化为6343。
[0167]
sampling_rate初始化为默认值,默认值为200000。
[0168]
counter_interval初始化为默认值,默认值为20s。
[0169]
采样方向初始化为无效值,无效值为零。
[0170]
②
循环队列初始化:
[0171]
队列每个节点大小为512,共2048个节点,总共空间大小为两者之积,是动态分配。
[0172]
初始化buffer,大小根据设备实际槽数的多少动态分配,用来存放发送buffer的索引值。
[0173]
③
sflow发送函数初始化。
[0174]
④
注册热插拔调用的回调函数。
[0175]
⑤
注册系统调用的回调函数。
[0176]
⑥
注册sflow报文处理函数。
[0177]
1.1.3.2sflow配置流程
[0178]
1.1.3.2.1用户态配置流程
[0179]
想要通过sflow功能对采样报文进行分析,需要将sflow功能通过命令行配置,从用户态下发到内核态,内核再下发给驱动。使用命令行语句可对sflow功能进行使能,关闭及修改,在用户态,可以通过数据库将这些操作保存,修改,删除,如图4所示,相关命令行配置操作:
[0180]
①
sflow agent ip命令配置,当agent ip与collector ip不同时,sflow agent ip a.b.c.d更新数据库/config/db/sflow_cfg.db下的agent配置表项,给内核下发修改agent ip的消息,否则,给配置界面返回agent ip与collector ip不能相同。
[0181]
②
sflow collector ip命令配置及port命令配置,collector ip与agent ip不同时,sflow collector ip a.b.c.d[port《0-65535》]更新数据库collector配置表项,给内核下发修改collector ip,port消息,否则,给配置界面返回agent ip与collector ip不能相同。
[0182]
③
sflow enable命令配置,sflow enable(both|inbound|outbound),如果没有配置both、inbound项会提示项配置agent ip及collector ip;遍历sflow数据库接口配置表,若数据库中没有该接口信息而且数据库中记录数不大于8,在数据库中创建该接口配置表,给内核下发添加接口消息,记录数大于8,给配置界面返回配置接口数达到最大;若数据库中有该接口,更新数据库,给内核下发修改sflow enable消息。
[0183]
④
sflow sampling-rate《1000-500000》命令配置,遍历sflow数据库接口配置表,若数据库中没有该接口信息,而且数据库中记录数不大于8,在数据库中创建该接口配置表,记录数大于8,给配置界面返回配置接口数达到最大;若数据库中有该接口,下发的采样率与之前不同,给内核下发修改sampling-rate消息。
[0184]
⑤
sflow counter-interval《2-200》命令配置,更新数据库,给内核下发修改counter-interval消息。
[0185]
⑥
no sflow enable,遍历sflow数据库接口配置表,若数据库中没有该接口信息,
不处理;若有,删除该接口记录,更新数据库,给内核下发关闭接口sflow功能消息。
[0186]
⑦
no sflow sampling-rate,恢复接口sampling-rate默认值。遍历sflow数据库接口配置表,若数据库中没有该接口信息,不处理;若数据库中有该接口且接口采样率不为默认值,更新数据库,给内核下发修改sampling-rate消息,否则不处理。
[0187]
⑧
no sflow counter-interval,恢复接口counter-interval默认值。更新数据库,给内核下发修改counter-interval消息。
[0188]
⑨
no sflow agent ip a.b.c.d使得数据库agent配置表恢复默认值,给内核下发修改agent ip消息。
[0189]
⑩
no sflow collector ip a.b.c.d,恢复数据库collector配置表ip默认值,给内核下发修改collector ip消息。
[0190]
1.1.3.2.2内核态配置流程
[0191]
如图5所示,命令行下发之后,内核态通过下发的信息:使能sflow、修改sflow参数、关闭sflow做出反应,将采集到的报文入队再封装:
[0192]
①
使能sflow:
[0193]
建立槽号与发送buffer的映射关系,创建sflow报文发送线程,给驱动下发接口采样消息,驱动采样报文后,给skb-》ucbitflag打一个标记skb_flag_sflow,表示是sflow报文。counter报文采样功能开启。开启counter,初始化定时器,设置定时器超时时间,定时进入counter处理函数;
[0194]
判断是否为sflow报文,若不是,不处理;若是,继续向下判断;
[0195]
继续判断循环队列是否能继续存放报文,如果队列已满,则报文不作处理,丢弃报文数加一;如果队列没有满,将报文入队;
[0196]
②
修改sflow参数:
[0197]
如果参数为驱动所需要的则下发给驱动,例如:sflow sampling-rate 1000;否则保存在全局配置变量中,例如:no sflow agent ip 10.12.9.2;
[0198]
③
关闭接口sflow功能:
[0199]
判断此接口所在槽位是否为最后一个接口开启sflow功能,如果是,取消映射关系,关闭接口sflow功能,继续向下判断;如果不是,映射关系总数减一,关闭此接口sflow功能,继续向下判断;
[0200]
判断此接口是否是唯一开启sflow的接口,如果不是,不做处理;如果是,清除定时器,不再产生counter报文;
[0201]
1.1.3.3sflow报文入队封装流程
[0202]
1.1.3.3.1入队流程
[0203]
循环队列每个节点大小为512,共2048个节点;当某一个接口使能sflow后会产生flow采样的报文与counter采样的报文。为了防止两种报文同时入队,或者使能多个接口sflow功能,flow sample报文同时入队会产生冲突,因为设备是多核会并发,因而需要加锁。这样可以实现多处理器的快速写操作。入队加锁流程:
[0204]
①
向下挪动一个节点。
[0205]
②
置位节点头部写标记。加写标记,是避免正在写入flow sample时,sflow发送线程读。此标记在写入完全后被复位。
[0206]
③
标记节点头部报文类型。
[0207]
1.1.3.3.2expanded flow sample字段封装流程
[0208]
sk_buff是一个控制结构,通过它,可以访问网络报文里的各种数据。网络报文中包含了在协议栈各层使用到的各种信息,封装expanded flow sample所需信息通过sk_buff读取出来。
[0209]
①
填充flow sample字段头部:
[0210]
flow sample type,字段类型,expanded flow sample字段,值为3;
[0211]
sample length,该字段总的字节数,根据实际报文长度计算得出;
[0212]
sequence number,字段序列号,每填充一次flow sample字段加一;
[0213]
source id type,接口类型,默认为0;
[0214]
source id index,当前使能的接口索引值,根据实际情况获取;
[0215]
sampling rate,采样率,可以通过命令行进行配置,默认为20000;
[0216]
sampling pool,采样池的报文个数,计算方法为:
[0217]
采样池报文个数=该接口实时总的报文个数-开启sflow时该接口报文个数。
[0218]
dropped packets,丢弃报文个数,当入队失败时丢弃该报文,丢弃报文个数加一;
[0219]
input/outputinterface format,入接口类型/出接口类型,默认为0;
[0220]
input/outputinterface value入接口索引值/出接口索引值,根据实际情况获取;
[0221]
②
填充raw packet header字段:
[0222]
format,当前字段,raw packet header字段值为1;
[0223]
flow data length,总的字节数,根据实际情况获取:
[0224]
flow data length=frame length
–
payload removed+16;
[0225]
header protocol,原始数据mac协议,以太网类型报文为1;
[0226]
frame length,截取的原始报文总的字节数,报文大于128字节截取128字节,否则截取全部报文;
[0227]
plyload removed,截取报文时被忽略掉的字节数;
[0228]
headr of sampled packet,截取到的原始报文;
[0229]
③
填充ethernet frame data字段:
[0230]
format,字段类型,ethernet frame data字段值为2;
[0231]
flow data length,该字段总的字节数,字段为24,不包含tag和length;
[0232]
length of mac packet,原始报文总字节数,包括2层头及后续的长度;
[0233]
source mac address,源mac地址,为8字节;
[0234]
destination mac address,目的mac地址,为8字节;
[0235]
④
填充ipv4 data字段:
[0236]
format,字段类型,ipv4 data字段值为3;
[0237]
flow data length,该字段总的字节数为32,不包含tag和length字段;
[0238]
length of ip packet原始报文三层头及后续报文总字节数;
[0239]
ip protocol,ip协议类型(tcp=6,udp=17);
[0240]
source ip address,原始报文源ip;
[0241]
destination ip address,原始报文目的ip;
[0242]
source port,原始报文源端口号;
[0243]
destination port,原始报文目的端口号;
[0244]
tcp flags,tcp标记,tcp报文才有;
[0245]
ip type of service,服务类型;
[0246]
⑤
填充extended router data字段:
[0247]
format,字段类型,extended router data字段值为1002;
[0248]
flow data length,该字段总的字节数为16,不包含tag和length字段;
[0249]
next hop,下一跳的ip地址;
[0250]
next hop source mask,源ip匹配转发表中的掩码长度;
[0251]
next hop destination mask,目的ip匹配转发表中的掩码长度;
[0252]
说明:遇到icmp,igmp协议报文不填此字段;填充时需先查询报文是否走三层转发,而二层转发与三层转发获取字段信息方法不同,当目的mac为vlan的mac,走三层转发或者出接口不为0而且invlan_dev存在,net_device结构体指针,走三层转发,否则,走二层转发;当查询不到时,不显示该字段。
[0253]
⑥
填充extended switch data字段:
[0254]
format,字段类型,extended switch data字段值为1001;
[0255]
flow data length,该字段总的字节数为16,不包含tag和length字段;
[0256]
incoming 802.1q vlan,入相vlan id号;
[0257]
incoming 802.1p priority,入相vlan优先级;
[0258]
outgoing 802.1q vlan,出相vlan id号;
[0259]
outgoing 802.1p priority,出相vlan优先级;
[0260]
填充实施流程可表示为:
[0261]
frame 4:370bytes on wire(2960bits),370bytes captured(2960bits)on interface 0
[0262]
ethernet ii,src:10:24:33:44:55:67(10:24:33:44:55:67),dst:honhaipr_eb:de:12(44:37:e6:eb:de:12)
[0263]
internet protocol version 4,src:10.23.44.100(10.23.44,100),dst:10.23.44.6(10.23.44.6)
[0264]
user datagram protocol,src port:41580(41580),dst port:6343(6343)
[0265]
inmon sflow
[0266]
datagram version:5
[0267]
agent address:1.1.1.1(1.1.1.1)
[0268]
sub-agent id:0
[0269]
sequence number:2276
[0270]
sysuptime:11395530
[0271]
numsamples:1
[0272]
expanded flow sample,seq 4
[0273]
0000 0000 0000 0000 0000............=enterprise:standard sflow(0)
[0274]
.....................0000 0000 0011=sflow sample type:expanded flow sample(3)
[0275]
sample length(byte):264
[0276]
sequence number:4
[0277]
source id type:0
[0278]
source id index:0
[0279]
sampling rate:1out of 1000packets
[0280]
sample pool:0total packets
[0281]
dropped packets:0
[0282]
input interface format:0
[0283]
input interface value:0
[0284]
output interface format:0
[0285]
output interface value:0
[0286]
flow record:5
[0287]
raw packet header
[0288]
ethernet frame data
[0289]
ipv4 data
[0290]
extended switch data
[0291]
extended router data
[0292]
1.1.3.3.3expanded counter sample字段封装流程
[0293]
expanded counter sample字段通过结构体指针dev获取接口信息,net_device结构体指针,根据dev-》get_stats()获取设备状态信息再按照字段信息进行填写:
[0294]
①
填充expanded counters sample头字段:
[0295]
sflow sample type,字段类型,expanded counters sample字段,值为4;
[0296]
sample length,expanded counters sample结构总的字节数,不包含tag和length字段,但包括以下的各记录字段;
[0297]
sequence number,字段序列号依次递增,分接口记录序列号;
[0298]
source id type,数据源类型,默认为0代表接口类型,暂只支持接口类型;
[0299]
source id index,数据源接口索引值;
[0300]
counter records,以下包含的记录数;
[0301]
②
填充generic interface counters字段;
[0302]
format,generic interface counters字段值为1;
[0303]
flow data length,总的字节数,不包含tag和length字段为88;
[0304]
interface index,接口的索引值;
[0305]
interface type,接口的类型,ethernet接口类型为6;
[0306]
interface speed,接口的速率支持规格,单位是bps;
[0307]
interface direction,双工模式类型,0=unknown,1=全双工,2=半双工
[0308]
接口状态第0位=ifadminstatus(0=down,1=up),
[0309]
第1位=ifoperstatus(0=down,1=up);
[0310]
input/outputoctets,进/出方向统计报文字节数;
[0311]
input/outputpackets,进/出方向统计报文数;
[0312]
input/outputmulticase packets,进/出方向组播报文数;
[0313]
input/outputbroadcast packets,进/出方向广播报文数;
[0314]
input/outputdiscarded packets,进/出方向丢弃报文数;
[0315]
input/outputerrors,进/出方向错误报文数;
[0316]
input unknow protocol packet,暂时不支持查询,默认为0;
[0317]
promiscuous mode,混杂模式即非0代表混杂模式;
[0318]
③
填充ethernet interface counters字段:
[0319]
format,ethernet interface counters字段值为1;
[0320]
flow data length,总的字节数为52,不包含tag和length字段;
[0321]
fcs errors,循环冗余校验码错误个数;
[0322]
excessive collisions,冲突报文个数;
[0323]
carrier sense errors,载体错误个数;
[0324]
frame too longs,报文过长错误个数;
[0325]
说明:其他字段暂不支持查询。
[0326]
④
填充processor information:
[0327]
format,processor information字段值为1001;
[0328]
随时flow data length,总的字节数为28,不包含tag和length字段;
[0329]
5s cpu load(100=1%),1分钟cpu使用率;
[0330]
1m cpu load(100=1%),5分钟cpu使用率;
[0331]
5m cpu load(100=1%),5分钟cpu使用率;
[0332]
total memory,设备内存总大小,单位是字节;
[0333]
free memory,设备剩余内存大小,单位是字节;
[0334]
具体执行流程如下:
[0335]
frame 1:314bytes on wire(2512bits),314bytes captured(2512bits)on interface 0
[0336]
ethernet ii,src:10:24:33:44:55:67(10:24:33:44:55:67),dst:honhaipr_eb:de:12(44:37:e6:eb:de:12)
[0337]
internet protocol version 4,src:10.23.44.100(10.23.44,100),dst:10.23.44.6(10.23.44.6)
[0338]
user datagram protocol,src port:41580(41580),dst port:6343(6343)
[0339]
inmon sflow
[0340]
datagram version:5
[0341]
agent address:1.1.1.1(1.1.1.1)
[0342]
sub-agent id:0
[0343]
sequence number:2273
[0344]
sysuptime:11393490
[0345]
numsamples:1
[0346]
expanded flow sample,seq 2273
[0347]
0000 0000 0000 0000 0000............=enterprise:standard sflow(0)
[0348]
.....................0000 0000 0011=sflow sample type:expanded flow sample(4)
[0349]
sample length(byte):232
[0350]
sequence number:2273
[0351]
source id type:0
[0352]
source id index:0
[0353]
counters records:3
[0354]
generic interface counters
[0355]
ethernet interface counters
[0356]
processor information
[0357]
1.1.3.4sflow出队发送流程
[0358]
封装好的报文实例放在队列中,发送报文线程将封装好的报文发送出去,目的ip则为collector ip地址的服务器或主机。
[0359]
如图6所示,发送线程工作过程如下:
[0360]
①
发送线程会一直判断队列是否为空:如果为空,就判断八块buffer是否有报文,如果有就发送出去然后睡眠500ms,判断是否使能了sflow,如果有接口使能,继续读取队列,依然没有报文就睡眠,如果没有接口使能就退出线程;队列不为空就继续向下判断。
[0361]
②
判断当前获取到的索引值是否为有效值。当获取到的索引值为无效时,则丢弃该节点的报文,继续读取下一节点的报文;当获取到的索引值为有效值则继续向下判断。
[0362]
③
判断当前节点是否为可读取节点即写标记是否被复位,如果判断为不可读节点则就判断八块buffer是否有报文,如果有就发送出去然后睡眠500ms,判断是否使能了sflow,如果使能了继续睡眠等待队列被填充,如果没有接口使能就退出线程;如果判断当前节点为可读取节点,则继续向下判断。
[0363]
④
判断发送buffer是否有足够的空间放下一个sample实例,如果空间不足,就返回当前已满的buffer索引,然后将buffer中的报文发送出去,当发送报文超过50次,睡眠20ms;如果空间充足,则继续向buffer填充sample实例。
[0364]
1.2sflow collector收集sflow报文
[0365]
其次防火墙作为sflow collector需要收集sflow agent采样收集发送的sflow报文,而防火墙实现正常解析sflow报文需要支持xflow的流量检测模式,正常防火墙是支持镜像mirro的流量检测方式,为了实现可以正常检测解析sflow报文需要防火墙支持xflow的检测模式。并且防火墙需要支持配置xflow输出器,用来指定对端发送sflow报文的接口ip以及相应的udp端口。
[0366]
具体命令大概格式如下:
[0367]
xflow-exporter-info exporter-ip a.b.c.d port《1025-65535》flow-type(sflow)
[0368]
exporter-ip参数:输出器ip地址;
[0369]
port参数:输出器端口;
[0370]
flow-type参数:流类型,特指sflow;
[0371]
1.2.1防火墙解析sflow报文的流程
[0372]
防火墙解析sflow报文只是用做流量分析,只需提取出报文的源ip、目的ip、源端口、目的端口、协议、flag标识、入接口、出接口、报文长度、采样比等信息。所以只需要解析flow采样的raw packet字段即可,且只支持分析sflow的v5版本报文。
[0373]
如图7所示,具体步骤以下步骤:
[0374]
1、发送sflow报文线程,申请8块1450大小空间;
[0375]
2、无限循环判断循环队列是否为空,若循环队列为空,判断当前获取的8块buffer是否有报文,如果有报文,发送报文并睡眠500ms,继续判断是否使能了sflow,若有接口使能,继续读取队列,若队列中没有报文睡眠500ms,若没有接口使能,退出线程;队列不为空则继续向下判断;
[0376]
3、判断当前获取到的索引值是否为有效值,若获取到的索引值为无效时,则丢弃该节点的报文,继续读取下一节点的报文;若获取到的索引值为有效值则继续向下判断;
[0377]
4、判断当前节点是否为可读取节点即写标记是否被复位,如果判断为不可读节点,则继续判断8块buffer是否有报文,如果有,发送报文并睡眠500ms,继续判断是否使能了sflow,如果有接口使能了sflow继续睡眠,等待队列被填充,如果没有接口使能sflow就退出sflow线程;如果判断当前节点为可读取节点,则继续向下判断;
[0378]
5、判断发送buffer是否有足够的空间放下一个sample实例,如果空间不足,则返回当前已满的buffer索引,并发送buffer中的报文,当发送报文超过50次,睡眠20ms;如果空间充足,则继续向buffer填充sample实例;
[0379]
目前防火墙只需要支持解析flow sample字段和flow sample expanded字段即可。
[0380]
1.3防火墙对解析后的sflow报文进行安全审计
[0381]
在防火墙对sflow的flow采样报文进行解析并进行流量分析后进入防火墙的报文审计模块,对接收的报文进行安全模块相应的安全审计;防火墙审计sflow agent通过采样的方式发送的报文对流量的安全审计效率得到了很大的提升,对防火墙的性能消耗也降低了很多,对防火墙旁路部署审计网络中流量的整体效率都可以得到极大的改善。
[0382]
本实施例对传统的防火墙进行优化,通过镜像的方式获取对端设备的流量,只能全量分析镜像过来的所有流量,对防火墙本身的性能消耗巨大以及分析流量的效率也是极低的。所以一旦引入了sflow这种按照一定的采样比从特定端口上采集报文,再由agent设备对报文进行分析,包括报文内容、报文转发规则信息等等,并将分析结果以及原始报文通告给防火墙进行统一分析,那么对于防火墙的性能消耗以及流量分析的效率都会得到极大的改善;
[0383]
流量分析技术还有netflow、cflow和netstream等,流量分析实现的效果和sflow几乎一致,都是通过采样比的方式对流量进行按比例采样,达到高效分析流量的目的。
[0384]
本实施例的其他部分与上述实施例1-2任一项相同,故不再赘述。
[0385]
以上所述,仅是本发明的较佳实施例,并非对本发明做任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化,均落入本发明的保护范围之内。
技术特征:
1.一种基于sflow的防火墙流量检测方法,sflow系统包括流量采样代理sflow agent、流量采样收集器sflow collector,其特征在于,包括以下步骤:步骤1:将内嵌于交换机或路由器等转发设备的流量采样代理sflow agent对流经网络设备的数据包进行周期性采样,得到网络流量信息,并将网络流量信息按照设定的格式发送至流量采样收集器sflow collector;步骤2:将防火墙作为流量采样收集器sflow collector接收流量采样代理sflow agent发送的sflow报文,对sflow报文进行解析,并对解析后的sflow报文进行流量分析;步骤3:将解析后的sflow报文与防火墙的dfi/dpi检测进行匹配,生成安全审计生成表。2.如权利要求1所述的一种基于sflow的防火墙流量检测方法,其特征在于,所述步骤1具体包括以下步骤:步骤11:转发设备启动后,初始化sflow系统;步骤12:配置sflow命令行;步骤13:根据配置后的sflow命令行,将sflow报文入队封装;步骤14:将封装好的sflow报文放在循环队列中,发送sflow报文线程,并发送封装好的sflow报文。3.如权利要求2所述的一种基于sflow的防火墙流量检测方法,其特征在于,所述步骤11具体包括以下步骤:步骤111:初始化sflow全局变量;步骤112:初始化sflow循环队列;步骤113:初始化sflow发送函数;步骤114:注册sflow热插拔调用的回调函数;步骤115:注册sflow系统调用的回调函数;步骤116:注册sflow报文处理函数。4.如权利要求3所述的一种基于sflow的防火墙流量检测方法,其特征在于,所述步骤111的具体操作为:将agent数据初始化为无效值、将collector port数据初始化为6343、将sampling_rate初始化为默认值、将counter_interval初始化为默认值、将采样方向初始化为无效值。5.如权利要求4所述的一种基于sflow的防火墙流量检测方法,其特征在于,所述步骤112的具体操作为:将循环队列每个节点大小初始化为512,并根据转发设备实际槽数的多少初始化buffer的大小。6.如权利要求2所述的一种基于sflow的防火墙流量检测方法,其特征在于,所述步骤12的具体步骤为:步骤121:输入命令,打开数据库,获取记录个数和记录结果集,并逐条记录查询该接口信息,判断接口记录是否存在,若存在,则更新数据库接口数据,下发关闭或修改接口sflow功能指令到内核;若不存在,继续判断接口记录数是否大于最大值,若是,在接口下输出接口数已达到最大,若不是,更新数据库添加接口数据,下发添加接口指令到内核;步骤122:内核态根据命令行下发的开启接口sflow功能指令、修改接口sflow功能参数指令、关闭接口sflow功能指令做出反应,将采集到的sflow报文入队封装。
information字段。12.如权利要求11所述的一种基于sflow的防火墙流量检测方法,其特征在于,所述步骤14具体包括以下步骤:步骤141:发送sflow报文线程,申请8块1450大小空间的buffer;步骤142:无限循环判断循环队列是否为空,若循环队列为空,判断当前获取的8块buffer是否有报文,如果有报文,发送报文并睡眠500ms,继续判断是否使能了sflow,若有接口使能,继续读取队列,若队列中没有报文,则睡眠500ms,若没有接口使能,退出线程;队列不为空则继续向下判断;步骤143:判断当前获取到buffer的索引值是否为有效值,若获取到的索引值为无效时,则丢弃该节点的报文,继续读取下一节点的报文;若获取到的索引值为有效值则继续向下判断;步骤144:判断当前节点是否为可读取节点即写标记是否被复位,如果判断为不可读节点,则继续判断8块buffer是否有报文,如果有,发送报文并睡眠500ms,继续判断是否使能了sflow,如果有接口使能了sflow继续睡眠,等待队列被填充,如果没有接口使能sflow就退出sflow线程;如果判断当前节点为可读取节点,则继续向下判断;步骤145:判断发送buffer是否有足够的空间放下一个sample实例,如果空间不足,则返回当前已满的buffer索引,并发送buffer中的报文,当发送报文超过50次,睡眠20ms;如果空间充足,则继续向buffer填充sample实例。13.如权利要求12所述的一种基于sflow的防火墙流量检测方法,其特征在于,所述步骤2具体包括以下步骤:步骤21:将detect_sflow_process作为sflow报文解析入口,判断sflow报文是否是sflow v5版本,若不是直接将sflow报文返回,若是,解析sflow报文头部字段信息,并循环解析sflow字段信息,继续向下判断;步骤22:判断是否解析完所有字段信息,若是,将sflow报文返回,若不是,继续向下判断;步骤23:判断是否是flow sample字段,若是,根据detect_sflow_v5_flow_sample_process解析flow sample字段报文信息,若不是,继续向下判断;步骤24:判断是否是flow sample expanded字段,若是,根据detect_sflow_v5_expanded_flow_sample_process解析flow sample expanded字段报文信息,若不是,直接做略过处理;步骤25:判断解析后的flow sample字段报文信息和flow sample expanded字段报文信息是否提取成功,若是,与ip检测表项进行匹配,并对攻击详细信息和特征类型流量进行统计,若不是,返回到步骤22继续判断是否解析完所有字段信息。14.一种防火墙流量检测防护系统,其特征在于,包括sflow agent采样模块、sflow collector收集模块、sflow审计模块;所述sflow agent采样模块,用于将内嵌于交换机或路由器等转发设备的流量采样代理sflow agent对流经网络设备的数据包进行周期性采样,得到网络流量信息,并将网络流量信息按照固定的格式发送至流量采样收集器sflow collector;所述sflow collector收集模块,用于将防火墙作为流量采样收集器sflow collector
接收流量采样代理sflow agent发送的sflow报文,对sflow报文进行解析,并对解析后的sflow报文进行流量分析;所述sflow审计模块,用于将解析后的sflow报文与防火墙的dfi/dpi检测进行匹配,生成安全审计生成表。15.一种电子设备,其特征在于,包括存储器,用于存储计算机程序;所述处理器,用于执行所述计算机程序时实现如权利要求1-13任一项所述的防火墙流量检测方法的步骤。16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1-13任一项所述的防火墙流量检测方法的步骤。
技术总结
本发明提出一种基于sflow的防火墙流量检测方法、系统、设备及介质,首先将内嵌于交换机或者路由器等转发设备的sFlow Agent通过特定的采样技术获取网络设备上的流量转发统计并实时地通过sFlow数据报文发送到sFlow Collector以供sFlow Collector进行分析,将防火墙作为sFlow Collector,对sFlow Agent采样收集的sflow报文进行安全审计;本发明防火墙审计防护的都是sflow采样报文,相比于通过镜像的方式审计所有流量,防火墙性能的消耗有了极大的改善,通过采样比的方式对sflow agent发送的报文进行按比例采样,提升了防火墙旁路部署审计流量的效率。部署审计流量的效率。部署审计流量的效率。
技术研发人员:
王加旺 韩思
受保护的技术使用者:
杭州安恒信息技术股份有限公司
技术研发日:
2022.08.15
技术公布日:
2022/11/18