一种基于Linux的Nat日志记录方法与装置制造方法

文档序号:7776644阅读:156来源:国知局
一种基于Linux的Nat日志记录方法与装置制造方法【专利摘要】本发明涉及日志系统【
技术领域
】,尤其涉及一种基于Linux的Nat日志记录方法与装置,所述方法包括:A.数据报文到达网卡,并进入内核防火墙;B.数据报文到达第一检测点,判断是否需要做DNat记录,是则对所述数据报文做DNat记录,并通过传输接口记录后执行步骤C,否则直接执行步骤C;C.数据报文进入第二检测点,判断是否需要做SNat记录,是则对所述数据报文做SNat记录,并通过传输接口记录后执行步骤D,否则直接执行步骤D;D.内核防火墙将数据报文通过Netlink发送到用户层。本发明减少了数据的拷贝,以及系统调用的次数,提高了日志系统性能,使系统更加快速、准确,足够处理大流量的Nat环境需求。【专利说明】—种基于Linux的Nat日志记录方法与装置【
技术领域
】[0001]本发明涉及日志系统【
技术领域
】,尤其涉及一种基于Linux的Nat日志记录方法与装置。【
背景技术
】[0002]基于Linux的Nat服务器,一般使用NetfiIter来实现其Nat功能,根据NetfiIter的五个钩子和三个表的工作模式,在Nat服务器下要记录日志,一般会记录一个数据报文经过Netfilter的Nat模块作地址转换前后的信息,并输出到用户层以使应用程序能接收并作特定用途。Nat日志系统的数据流如下:1.数据报文到达网卡;2.数据报文进入Netfilter;3.进行Nat前记录一次信息;4.进行Nat后记录一次信息;4.数据报文离开Netfilter;5.应用程序接收两次信息并处理。[0003]现有的基于Linux的Nat日志系统,一般使用iptables规则配合printk把数据包信息输出到用户层的应用程序。如图1所示,工作流程如下(以SNat为例):1)在Netfilter的FORWARD钩子的mangle表处设置一个规则,修改数据包的TOS属性;2)在Netfilter的FORWARD钩子的filter表处设置一个规则,记录经过的数据包信息并输出到用户层;3)插入一个Netfilter处理模块在P0STR0UTING最后位置,判断数据包的TOS属性,如符合则记录此数据包信息并输出到用户层;4)用户层程序接收到一前一后的数据包信息,处理并发送到远端syslog日志服务器。[0004]现有的Nat日志系统是使用printk输出信息到用户层的,printk由于效率低下,性能欠佳,所以此系统会占用过多的CPU,处理不了大流量的Nat环境。【
发明内容】[0005]本发明实施例提供一种基于Linux的Nat日志记录,旨在解决现有技术中日志记录数据拷贝多,数据流经路程长,系统占用过多CPU的问题。[0006]本发明实施例是这样实现的,一种基于Linux的Nat日志记录方法,所述方法包括:[0007]A.数据报文到达网卡,并进入内核防火墙;[0008]B.数据报文到达第一检测点,判断是否需要做DNat记录,是则对所述数据报文做DNat记录,并通过传输接口记录后执行步骤C,否则直接执行步骤C;C.数据报文进入第二检测点,判断是否需要做SNat记录,是则对所述数据报文做SNat记录,并通过传输接口记录后执行步骤D,否则直接执行步骤D;[0009]D.内核防火墙将数据报文通过Netlink发送到用户层。[0010]本发明实施例还提供一种基于Linux的Nat日志记录装置,所述装置包括:[0011]数据报文入口单元,用于数据报文到达网卡,并进入内核防火墙;[0012]DNat记录判断单元,用于数据报文到达第一检测点,判断是否需要做DNat记录,是则对所述数据报文做DNat记录,并通过传输接口记录后发送执行指令到SNat记录判断单元,否则直接发送执行指令到SNat记录判断单元;[0013]SNat记录判断单元,用于数据报文进入第二检测点,判断是否需要做SNat记录,是则对所述数据报文做SNat记录,并通过传输接口记录后发送执行指令到数据报文发送单元,否则直接发送执行指令到数据报文发送单元;[0014]数据报文发送单元,用于内核防火墙将数据报文通过Netlink发送到用户层。[0015]本发明在数据报文进入防火墙后,分别进行DNat记录和SNat记录,通过传输接口记录数据报文,使用Netlink传输信息到用户层,减少了数据的拷贝,以及系统调用的次数,缩短了数据流经的路程,提高了日志系统性能,使系统更加快速、准确,足够处理大流量的Nat环境需求。【专利附图】【附图说明】[0016]图1表示本发明实施例提供的现有技术工作原理图;[0017]图2表示本发明实施例提供的一种基于Linux的Nat日志记录方法流程图;[0018]图3表示本发明实施例提供的一种基于Linux的Nat日志记录方法流程图;[0019]图4表示本发明实施例提供的一种基于Linux的Nat日志记录方法流程图;[0020]图5表示本发明实施例提供的基于Linux的Nat日志系统的整体结构图;[0021]图6表示本发明实施例提供的一种基于Linux的Nat日志记录装置结构图。【具体实施方式】[0022]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。[0023]图2示出了本发明实施例提供的一种基于Linux的Nat日志记录方法流程图,详述如下:[0024]在步骤SlOl中,数据报文到达网卡,并进入内核防火墙;[0025]在步骤S102中,数据报文到达第一检测点;[0026]在步骤S103中,判断是否需要做DNat记录,是则执行步骤S104,否则执行步骤S105;[0027]在步骤S104中,对数据报文做DNat记录,并通过传输接口记录,继续执行步骤S105;[0028]在步骤S105中,数据报文进入第二检测点,判断是否需要做SNat记录,是则执行步骤S106,否则执行步骤S107;[0029]在步骤S106中,对数据报文做SNat记录,并通过传输接口记录,继续执行步骤S107;[0030]在步骤S107中,内核防火墙将数据报文通过Netlink发送到用户层。[0031]在本发明实施例中,Netfilter防火墙的五个钩子分别为PREROUTING、L0CAL-1N、FORWARD、LOCAL-OUT、P0STR0UTING,本例中的第一检测点与第二检测点分别为PRER0UTING和P0STR0UTING,分别实现Dnat(DestinationNetworkAddressTranslation,目的地址转换)功能和Snat(sourcenetworkaddresstranslation,源地址目标转换)功能,并且通过nf_log_packet接口记录数据报文,最后通过Netfilter防火墙把两次记录的数据报文信息,通过Netlink发送到用户层。使用Netlink传输数据报文不会经过任何中间环节,直接从内核传输到用户的程序中。[0032]图3示出了本发明实施例提供的一种基于Linux的Nat日志记录方法流程图,详述如下:[0033]在步骤S201中,数据报文到达网卡,并进入内核防火墙;[0034]在步骤S202中,数据报文进入第一检测点之前,判断是否需要做DNat记录,是则执行步骤S203,否则执行步骤S203;[0035]在步骤S203中,对数据报文做DNat记录,并通过传输接口记录,继续步骤S204;[0036]在步骤S204中,数据报文进入第一检测点;[0037]在步骤S205中,数据报文离开第一检测点,判断是否需要做DNat记录,是则执行步骤S206,否则执行步骤S207;[0038]在步骤S206中,对数据报文做DNat记录,并通过传输接口记录,继续步骤S207;[0039]在步骤S207中,数据报文进入第二检测点之前,判断是否需要做SNat记录,是则执行步骤S208,否则执行步骤S209;[0040]在步骤S208中,对数据报文做SNat记录,并通过传输接口记录,继续步骤S209;[0041]在步骤S209中,数据报文进入第二检测点,继续步骤S210;[0042]在步骤S210中,数据报文离开第二检测点,判断是否需要做SNat记录,是则执行步骤S211,否则执行步骤S212;[0043]在步骤S211中,对数据报文做SNat记录,并通过传输接口记录,继续步骤S212;[0044]在步骤S212中,内核防火墙将数据报文通过Netlink发送到用户层。[0045]在本发明实施例中,一般的Nat服务器要么提供SNat服务,要么提供DNat服务,本实施例中,将Nat日志两个配成一对,DNat前后组成一对,SNat前后组成一对,并通过nf_log_packet接口记录数据报文,最后通过Netfilter防火墙把两次记录的数据报文信息,通过Netlink发送到用户层,省去了中间环节,直接从内核传输到用户程序中。[0046]图4示出了本发明实施例提供的一种基于Linux的Nat日志记录方法流程图,详述如下:[0047]在步骤S301中,数据报文到达网卡,并进入内核防火墙;[0048]在步骤S302中,数据报文进入第一检测点之前,判断是否需要做DNat记录,是则执行步骤S303,否则执行步骤S303;[0049]在步骤S303中,对所述数据报文做DNat记录,并通过传输接口记录,继续步骤S304;[0050]在步骤S304中,数据报文进入第一检测点;[0051]在步骤S305中,数据报文离开第一检测点,判断是否需要做DNat记录,是则执行步骤S306,否则执行步骤S307;[0052]在步骤S306中,对所述数据报文做DNat记录,并通过传输接口记录,继续步骤S307;[0053]在步骤S307中,数据报文进入第二检测点之前,判断是否需要做SNat记录,是则执行步骤S308,否则执行步骤S309;[0054]在步骤S308中,对所述数据报文做SNat记录,并通过传输接口记录,继续步骤S309;[0055]在步骤S309中,数据报文进入第二检测点,继续步骤S310;[0056]在步骤S310中,数据报文离开第二检测点,判断是否需要做SNat记录,是则执行步骤S311,否则执行步骤S312;[0057]在步骤S311中,对数据报文做SNat记录,并通过传输接口记录,继续步骤S312;[0058]在步骤S312中,内核防火墙将数据报文通过Netlink发送到用户层;[0059]在步骤S313中,用户层日志记录模块收到数据报文之后,将数据报文放进Nat内存池;[0060]在步骤S314中,线程池从Nat内存池获取数据报文,处理并发送到远端日志服务器。[0061]在本发明实施例中,如图5所示,在Nat日志系统使用Netfilter防火墙提供的用户层日志处理工具ULog,配合在Netfilter防火墙中使用Netlink的模块,处理数据报文日志信息,线程池获取数据报文后,加入一些日期等信息,组成一条标准的syslog信息发送到远端syslog服务器,使用Netlink和ULog共同实现Nat日志系统,性能提升十倍以上,更加快速、更加准确,足够处理大流量的Nat环境需求。[0062]图6示出了本发明实施例提供的一种基于Linux的Nat日志记录装置结构图,详述如下:[0063]数据报文入口单元41数据报文到达网卡,并进入内核防火墙。[0064]DNat记录判断单元42数据报文到达第一检测点,判断是否需要做DNat记录,是则对数据报文做DNat记录,并通过传输接口记录后发送执行指令到SNat记录判断单元43,否则直接发送执行指令到SNat记录判断单元43。[0065]其中,DNat记录第一判断模块421数据报文进入第一检测点之前,判断是否需要做DNat记录,是则对数据报文做DNat记录,并通过传输接口记录后数据报文进入第一检测点,否则数据报文直接进入第一检测点;[0066]DNat记录第二判断模块422数据报文离开第一检测点,判断是否需要做DNat记录,是则对数据报文做DNat记录,并通过传输接口记录后发送执行指令到SNat记录判断单元43,否则直接发送执行指令到SNat记录判断单元43。[0067]SNat记录判断单元43数据报文进入第二检测点,判断是否需要做SNat记录,是则对数据报文做SNat记录,并通过传输接口记录后发送执行指令到数据报文发送单元44,否则直接发送执行指令到数据报文发送单元44。[0068]其中,SNat记录第一判断模块431数据报文进入第二检测点之前,判断是否需要做SNat记录,是则对数据报文做SNat记录,并通过传输接口记录后数据报文进入第二检测点,否则数据报文直接进入第二检测点;[0069]SNat记录第二判断模块432数据报文离开第二检测点,判断是否需要做SNat记录,是则对数据报文做SNat记录,并通过传输接口记录后发送执行指令到数据报文发送单元44,否则直接发送执行指令到数据报文发送单元44。[0070]数据报文发送单元44内核防火墙将数据报文通过Netlink发送到用户层。[0071]在本发明实施例中,将Nat日志两个配成一对,DNat前后组成一对,SNat前后组成一对,并通过1^_1(^_口301^1:接口记录数据报文,最后通过他丨;^1丨61'防火墙把两次记录的数据报文信息,通过Netlink发送到用户层。[0072]数据报文处理单元45用户层日志记录模块收到数据报文之后,将数据报文放进Nat内存池;线程池从Nat内存池获取数据报文,处理并发送到远端日志服务器。[0073]在本发明实施例中,在Nat日志系统使用Netfilter防火墙提供的用户层日志处理工具ULog,配合在Netfilter防火墙中使用Netlink的模块,处理数据报文日志信息。[0074]本发明在数据报文进入防火墙后,分别进行DNat记录和SNat记录,通过传输接口记录数据报文,使用Netlink传输信息到用户层,减少了数据的拷贝,以及系统调用的次数,缩短了数据流经的路程,提高了日志系统性能,使系统更加快速、准确,足够处理大流量的Nat环境需求。[0075]以上所述仅是本发明的优选实施方式,应当指出,对于本【
技术领域
】的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。【权利要求】1.一种基于Linux的Nat日志记录方法,其特征在于,所述方法包括:A.数据报文到达网卡,并进入内核防火墙;B.数据报文到达第一检测点,判断是否需要做DNat记录,是则对所述数据报文做DNat记录,并通过传输接口记录后执行步骤C,否则直接执行步骤C;C.数据报文进入第二检测点,判断是否需要做SNat记录,是则对所述数据报文做SNat记录,并通过传输接口记录后执行步骤D,否则直接执行步骤D;D.内核防火墙将数据报文通过Netlink发送到用户层。2.如权利要求1所述的方法,其特征在于,所述步骤B具体包括:数据报文进入第一检测点之前,判断是否需要做DNat记录,是则对所述数据报文做DNat记录,并通过传输接口记录后数据报文进入第一检测点,否则数据报文直接进入第一检测点;数据报文离开第一检测点,判断是否需要做DNat记录,是则对所述数据报文做DNat记录,并通过传输接口记录后执行步骤C,否则直接执行步骤C。3.如权利要求1所述的方法,其特征在于,所述步骤C具体包括:数据报文进入第二检测点之前,判断是否需要做SNat记录,是则对所述数据报文做SNat记录,并通过传输接口记录后数据报文进入第二检测点,否则所述数据报文直接进入第二检测点;数据报文离开第二检测点,判断是否需要做SNat记录,是则对所述数据报文做SNat记录,并通过传输接口记录后执行步骤D,否则直接执行步骤D。4.如权利要求1所述的方法,其特征在于,所述步骤C之后还包括:用户层日志记录模块收到数据报文之后,将所述数据报文放进Nat内存池;线程池从Nat内存池获取所述数据报文,处理并发送到远端日志服务器。5.一种基于Linux的Nat日志记录装置,其特征在于,所述装置包括:数据报文入口单元,用于数据报文到达网卡,并进入内核防火墙;DNat记录判断单元,用于数据报文到达第一检测点,判断是否需要做DNat记录,是则对所述数据报文做DNat记录,并通过传输接口记录后发送执行指令到SNat记录判断单元,否则直接发送执行指令到SNat记录判断单元;SNat记录判断单元,用于数据报文进入第二检测点,判断是否需要做SNat记录,是则对所述数据报文做SNat记录,并通过传输接口记录后发送执行指令到数据报文发送单元,否则直接发送执行指令到数据报文发送单元;数据报文发送单元,用于内核防火墙将数据报文通过Netlink发送到用户层。6.如权利要求5所述的装置,其特征在于,所述DNat记录判断单元具体包括:DNat记录第一判断模块,用于数据报文进入第一检测点之前,判断是否需要做DNat记录,是则对所述数据报文做DNat记录,并通过传输接口记录后数据报文进入第一检测点,否则数据报文直接进入第一检测点;DNat记录第二判断模块,用于数据报文离开第一检测点,判断是否需要做DNat记录,是则对所述数据报文做DNat记录,并通过传输接口记录后发送执行指令到SNat记录判断单元,否则直接发送执行指令到SNat记录判断单元。7.如权利要求5所述的装置,其特征在于,所述SNat记录判断单元具体包括:SNat记录第一判断模块,用于数据报文进入第二检测点之前,判断是否需要做SNat记录,是则对所述数据报文做SNat记录,并通过传输接口记录后数据报文进入第二检测点,否则所述数据报文直接进入第二检测点;SNat记录第二判断模块,用于数据报文离开第二检测点,判断是否需要做SNat记录,是则对所述数据报文做SNat记录,并通过传输接口记录后发送执行指令到数据报文发送单元,否则直接发送执行指令到数据报文发送单元。8.如权利要求5所述的装置,其特征在于,所述装置还包括:数据报文处理单元,用于用户层日志记录模块收到数据报文之后,将所述数据报文放进Nat内存池;线程池从Nat内·存池获取所述数据报文,处理并发送到远端日志服务器。【文档编号】H04L29/12GK103581360SQ201310573865【公开日】2014年2月12日申请日期:2013年11月15日优先权日:2013年11月15日【发明者】梁润强,曾宪力,李坤祥,黄衍博申请人:广东睿江科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1