本发明专利技术涉及网络设备技术领域,具体为一种网络设备的基于Linux内核哈希表的域名过滤方法:步骤1,用户通过命令或函数,将需要过滤的域名发送给Linux内核,Linux内核将用户下发的配置信息在Linux内核中建立一张哈希表,再将用户配置的域名存入该哈希表中;步骤2,请求的DNS数据包到达Linux内核的网络层,对该DNS数据包进行解析,接着查找哈希表,根据能否匹配决定是否过滤,稳定性高、域名过滤的功能和效率兼顾又更灵活、快速、便捷。
【技术实现步骤摘要】
本专利技术涉及网络设备
,具体为一种网络设备的基于Linux内核哈希表的域名过滤方法。
技术介绍
现有的网络设备,尤其是家用的路由器、交换机等,一般会有个叫做“家长控制”的功能,当然,不同产品,可能名称会不一样,路由器管理员可以针对某台设备,设置允许或禁止它上某些网站,这里,就可能会用到域名过滤的功能,举例:禁止192.168.2.100这台设备访问baidu.com,现有的方案,有三种:第一,通过在/etc/hosts文件中设置,格式为:“192.168.2.1phicomm.me”,这样,dnsmasq进程会截取局域网的用户访问phicomm.me这个网址,将其解析为192.168.2.1这个IP地址;第二,通过配置iptables命令,利用开源网站提供的xt_webstr,它可以匹配指定的url,对其进行过滤或放通操作;第三,有些公司会觉得上述两种办法功能受限,所以干脆自己开发了一个类似于xt_webstr的一个匹配模块,如:xt_domain,也是通过iptables进行配置匹配规则,xt_domain模块解析DNS数据包,跟已配置的规则进行匹配,进而决定是否放通,第一种方案,通过在/etc/hosts文件中,添加域名跟IP地址的二元组,来进行域名劫持,这里只能把该功能说成是域名劫持,不具备过滤(丢弃数据包)的功能,并且不支持通配符匹配,如对“*.baidu.com”格式,无能为力;第二种方案,利用xt_webstr匹配模块,实现域名过滤的功能,准确地说,该模块是针对http数据包进行匹配。它是对http包的URL进行匹配,一般情况下,URL格式为http://www.baidu.com/a/b/c/d/e.html,xt_webstr可以对该URL的任一段进行匹配。由于是对URL进行匹配,因此,匹配的内容就会增多,并且对https或ssh等也同样用到域名的应用,无法进行匹配;第三种方案,可以在xt_domain模块中,独自开发出弥补前两种方案的大多数短板,只对DNS包(协议:UDP,端口号:53)进行解析,把得到的域名跟iptables实现写入的规则进行匹配即可,但是,对于家用设备,如果iptables规则较多,会非常影响数据包的转发性能,这是由iptables的规则特定决定的,因为iptables只能链上查找。即,如果有500条规则,最差的情况下,一个数据包会进行500次匹配查找。当然,这种缺点也同样适用于第二种方案,因为第二种方案也是通过iptables规则实现的,如公开号为CN101707619A的专利公开的报文过滤方法、装置及网络设备,其中方法包括:获取接收报文的源IP地址、目的IP地址和协议类型;通过哈希运算生成的流表索引值将报文映射到数据流表中;在目标流记录中,根据所述报文的IP地址信息和所述目标流记录中的IP地址信息生成目标地址信息,并将所述报文的IP地址信息与所述目标地址信息进行匹配;当未匹配成功时,为该报文创建与所述流表索引值对应的新的流记录;当匹配成功时,根据匹配到的流记录中的连接状态信息对所述报文进行合法性判断,并对所述报文进行过滤处理,其过滤方法就存在上述的缺陷和不足。
技术实现思路
本专利技术的目的是提供一种稳定性高、域名过滤的功能和效率兼顾又更灵活、快速、便捷的基于Linux内核哈希表的域名过滤方法。本专利技术的上述技术目的是通过以下技术方案得以实现的:一种基于Linux内核哈希表的域名过滤方法,具体步骤如下:步骤1,用户通过命令或函数,将需要过滤的域名发送给Linux内核,Linux内核将用户下发的配置信息在Linux内核中建立一张哈希表,再将用户配置的域名存入该哈希表中;步骤2,请求的DNS数据包到达Linux内核的网络层,对该DNS数据包进行解析,接着查找哈希表,根据能否匹配决定是否过滤。上述技术方案中,为基于Linux内核的网络设备提供了一种域名过滤的方法,可实现更加复杂的业务逻辑,提高业务逻辑处理效率,系统的稳定性更高,数据流通信也更加顺利,域名过滤的功能和效率兼顾又更灵活、快速、便捷。作为对本专利技术的优选,用户与Linux内核之间的通信通过netlink机制实现。作为对本专利技术的优选,网络设备启动时,Linux内核创建netlink。作为对本专利技术的优选,用户所在的应用层也创建netlink。作为对本专利技术的优选,用户进程将用户希望过滤的域名通过netlink传送到Linux内核,内核将获取到该配置,存储到哈希表中。作为对本专利技术的优选,网络设备转发DNS数据包若经过Linux网络层的NF_IP_FORWARD点,则将此点挂在挂在一个dns_filter钩子函数上,每当DNS数据包经过此点时,均会触发dns_filter函数。作为对本专利技术的优选,在dns_filter函数中,对DNS数据包进行解析,判断是否为DNS报文,如果是则对该DNS数据包继续解析,获取到要访问的域名,然后根据该域名查找哈希表,如果匹配,则丢弃,否则放通。作为对本专利技术的优选,DNS报文采用UDP协议且端口为53。作为对本专利技术的优选,在查找哈希表时,如果支持通配符,则需要进行两轮查找。作为对本专利技术的优选,所述的两轮查找为:第一轮,完全匹配查找,即完整的字符串匹配,一个字符都不能错;第二轮,如果第一轮没有查找到,则进行通配符查找,匹配通配符的hashkey对应的域名配置。本专利技术基于Linux内核哈希表的域名过滤方法具有稳定性高、域名过滤的功能和效率兼顾又更灵活、快速、便捷等优点。附图说明图1是本专利技术一种优选实施例的用户与设备交互时的流程示意图。图2是本专利技术一种优选实施例的数据包经过通过Linux内核网络层时流程示意。具体实施方式下面结合附图对本专利技术优选实施例作详细描述,但本专利技术的保护范围并不限于此。如图1、2所示,本实施例一种基于Linux内核哈希表的域名过滤方法,其具体步骤如下所述:步骤1,用户通过命令或函数,将需要过滤的域名发送给Linux内核,Linux内核将用户下发的配置信息在Linux内核中建立一张哈希表,再将用户配置的域名存入该哈希表中;步骤2,请求的DNS数据包到达Linux内核的网络层,对该DNS数据包进行解析,接着查找哈希表,根据能否匹配决定是否过滤。用户与Linux内核之间的通信通过netlink机制实现,netlink是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC),也是网络应用程序与内核通信的最常用的接口,netlink包含于头文件linux/netlink.h中。网络设备启动时,Linux内核创建netlink。用户所在的应用层也创建netlink。用户进程将用户希望过滤的域名通过netlink传送到Linux内核,内核将获取到该配置,存储到哈希表中。网络设备转发DNS数据包若经过Linux网络层的NF_IP_FORWARD点,则将此点挂在挂在一个dns_filter钩子函数上,每当DNS数据包经过此点时,均会触发dns_filter函数。在dns_filter函数中,对DNS数据包进行解析,判断是否为DNS报文,如果是则对该DNS数据包继续解析,获取到要访问的域名,然后根据该域名查找哈希表,如果匹配,则丢弃,否则放通。DN本文档来自技高网...
【技术保护点】
一种基于Linux内核哈希表的域名过滤方法,其特征在于按如下步骤进行:步骤1,通过命令或函数,将需要过滤的域名发送给Linux内核,Linux内核将下发的配置信息在Linux内核中建立哈希表,再将配置的域名存入哈希表中;步骤2,请求的DNS数据包到达Linux内核的网络层,对该DNS数据包进行解析,查找哈希表,根据能否匹配决定是否过滤。
【技术特征摘要】
1.一种基于Linux内核哈希表的域名过滤方法,其特征在于按如下步骤进行:步骤1,通过命令或函数,将需要过滤的域名发送给Linux内核,Linux内核将下发的配置信息在Linux内核中建立哈希表,再将配置的域名存入哈希表中;步骤2,请求的DNS数据包到达Linux内核的网络层,对该DNS数据包进行解析,查找哈希表,根据能否匹配决定是否过滤。2.根据权利要求1所述的一种基于Linux内核哈希表的域名过滤方法,其特征在于:用户与Linux内核之间的通信通过netlink机制实现。3.根据权利要求2所述的一种基于Linux内核哈希表的域名过滤方法,其特征在于:网络设备启动时,Linux内核创建netlink。4.根据权利要求3所述的一种基于Linux内核哈希表的域名过滤方法,其特征在于:用户所在的应用层也创建netlink。5.根据权利要求4所述的一种基于Linux内核哈希表的域名过滤方法,其特征在于:用户进程将用户希望过滤的域名通过netlink传送到Linux内核,内核将获取到该配置,存储到哈希表中。6.根据权利要求5所述的一种基于Linux内核哈希表的域...
【专利技术属性】
技术研发人员:赵冲,
申请(专利权)人:上海斐讯数据通信技术有限公司,
类型:发明
国别省市:上海;31
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。