,欢迎光临!
加入收藏设为首页请您留言
您当前位置:网站首页 >> 西北地区 >> 域名过滤器的研究应用-上海联兵环保免费电话:400-600-5030

域名过滤器的研究应用-上海联兵环保免费电话:400-600-5030

2011-09-13 14:05:32 来源:中国过滤器网 浏览:1

[摘 要]DNS服务的设计初衷是为了完成域名和地址的对应转换,但是在中大型的企业内部网络结构中,为了减少垃圾流量,有时候并不需要对所有的域名都进行解析,而是希望服务器能够有选择、有限制地对客户端的域名查询做出反应。在DNS条件转发技术的基础上,本文提出了域名过滤器概念并进行了一些初步的研究工作。
[关键词]域名;过滤器;DNS
[中图分类号]TP393·07   [文献标识码]A   [文章编号]1671-5330(2007)05-0057-04
前言
随着税务系统网络建设的不断发展,新的问题也在不断产生。DNS服务器分级设置,从下至上分别为县区级、地市级、省级服务器以及总局的根服务器。按照规划,它们只负责也只能解析系统网络内部的域名。但是时间一长,难免有些对外部地址的域名解析在内网传播,其结果是增加了DNS服务器的负荷,造成没有必要的垃圾流量,浪费网络带宽,降低工作效率。
根据相关的文献研究[1],网络中相当高比率的不正常DNS查询(bogus DNS query)主要是由于使用MS-Windows平台所造成[2]。如果能实现域名过滤,让DNS服务器有限制、有选择地进行域名解析,那么对建设一个干净、稳定、高效的网络系统大有裨益。
1 域名过滤器研究
1.1 域名过滤器的提出
虽然现在的条件转发器能够对特定的域名查询实现转发或不转发,间接达到域名过滤的目的,但是和设想中真正的过滤器还不太一样,主要体现在以下两点:
1)当一个查询被送到DNS服务器时,服务器首先在自己的本地区域(权威区)中查找,如果没有则再到本地缓存中查找,如果还没有才开始判断是否进行条件转发。我们可以看到,对于一个我们本来就明确不允许进行解析的查询来说,DNS服务器还是要在权威区和缓存中找一下,然后才利用条件转发器将它过滤掉。这样做不但浪费了时间,而且增加了服务器的负担。
2)如果不允许解析的域名只是少量,而允许查询的域名又很多,就不得不逐个设置每个允许通过域名的条件转发器,增加了工作量。因此条件转发器比较适合对少量的特定域名进行设定,在访问保护和查询分流上能起到一定的作用。
在此基础上,经过仔细分析,提出了域名过滤器这个概念。它能实现如下基本功能:①可以在DNS服务器本身设置条件过滤的功能,并且根据实际需要启用或停用之;②如果启用,服务器在接收到一个域名查询请求之后,首先判断是否满足过滤器的内容,然后根据定义好的规则来决定是否将它过滤掉;③如果过滤掉则直接向客户端返回失败信息,否则按照传统的解析过程继续进行。
1.2 改造后的解析流程
结合传统的DNS工作原理和解析过程,添加了过滤器部分以后形成下面一个完整的查询解析工作流程:
1)客户端发出一个域名解析的查询;
2)客户端解析器在客户端的本地缓存中查找,如果有答案则直接返回答案并结束本次查询,否则继续下一步;
3)客户端解析器将查询发送到指定的DNS服务器;
4)服务器检查过滤器是否启用,如果启用则执行下列动作,否则继续下一步;
5)在本地区域文件中查找答案,有则返回并结束,否则继续下一步;
6)在本地缓存文件中查找答案,有则返回并结束,否则继续下一步;
7)检查是否启用转发器,如果启用则执行下列动作,否则继续下一步;
8) DNS服务器按照根目录提示做递归查询或客户端根据服务器返回的提示做迭代查询,直到找到答案或超时失败,结束本次查询。
它和传统流程最主要的区别就是第四步在这里增加了一个过滤器,一个查询到达DNS服务器后,首先要做的就是和过滤器中的条件相比较,根据结果来判断下一步的动作。比如,某个查询符合过滤条件,那么服务器直接返回一个信息给客户端,明确告诉它查询被禁止或被屏蔽掉了;还可以反过来,即只有那些符合特定条件的查询可以通过,其它的都过滤掉。和转发器一样,过滤器也是一个可选项,可以随时选择启动或停用之。
1.3 过滤器算法描述
过滤器设计及实现的主要思路:①服务器接收到客户端发来的查询请求后,首先将分组格式中Questions段中被查询的域名取出来;②然后就其后缀依次和过滤器中设置的域名作比较;③最后再根据比较结果来决定将查询屏蔽掉或允许通过。

图1大致反映了过滤器的工作流程,当过滤规则中添加了多个域名时,过滤器就按照顺序依次将它们和要查询的域名进行比较,只要发现匹配成功就中止解析,将查询请求屏蔽掉,同时返回客户端解析一个错误信息,告知对方这个查询被DNS服务器禁止解析,从而结束本次查询;如果匹配不成功则过滤器什么也不做,只是将查询继续向下转发,然后服务器按照传统的解析流程转到权威区域文件中去寻找答案。
图1中判断要查询的域名后缀(假设为name1)和过滤器中的规则域名(假设为name2,有时不止只有一个域名)是否匹配是过滤器的核心内容。它的工作原理是:串name1先和第一个规则域名作比较,如果匹配则中止比较,根据两个分支判断通过还是结束;否则继续和第二个规则域名作比较,依此类推直至匹配成功或没有规则域名可比较。注意:判断域名后缀和过滤器内容是否相等包括了工作原理中所描述的整个匹配过程,根据过滤器中规则域名的多少来确定比较次数,并不一定只比较一次。
下面是初步实现过滤器的算法描述。
1)首先定义一个字符串的静态存储结构:
#define maxlen 50000
typedef struct{
char ARRAY[maxlen];
long Curlen;
}strtp;
也可以定义动态存储结构或堆结构,由于在串的实际应用中所需存储空间都比较大,并且以静态结构存储串值时容易实现串的基本操作,因此在多数情况下,串值的存储采用顺序存储方式。
2)定义一个允许查询通过的pass过程:int PASS()
{
DNS;//{进行传统解析流程}
return(1);
}
3)定义一个禁止查询解析的block过程:
int block()
{
fprintf(stderr,“Sorry,your query is deniedby the filter. \ n”);
return(-1);
}
ENDP;
4)定义一个比较查询域名和过滤器中域名后缀是否匹配的match函数:
int match(str1,str2)
strtp str1,str2;
{
int n1,n2,I,j;
if ((str1 - > Curlen)! = (str2 - >Curlen))
{
return(-1);
}
return(strncmp(str1->ARRAY,str2->ARRAY,str1->Curlen));
}
5)过滤器部分的主程序如下:
int main(int argc, char **argv)
{
strtp name1,name2;
int I,num;
int i_char=0;
extern char *optarg;
memset(name1->ARRAY, 0x00, sizeof(name1->ARRAY));
memset(name2->ARRAY, 0x00, sizeof(name2->ARRAY));
while((i_char = getopt(argc, argv,”Au:Tu:D:M:p:f:?”)) ! = EOF)
switch(i_char) {
case‘p’:
strcpy(name1->ARRAY, optarg);
name1->Curlen=strlen(name2->ARRAY);
break;
}
if (filter)//???
{
return(PASS());//如果没有激活过滤器则通过  }
Num=filter->count;//统计过滤器中规则域名的个数
if (! Num)
{
return(PASS());//如果过滤器为空则通过
}
i=0;
//当过滤器中的规则域名还没有比较完毕
while (I {
i++;
name2=filter->dns[i];//将过滤器中的第i条规则域名赋值给name2
strcpy(name2->ARRAY,filter->dns[i],strlen(filter->dns[i]));
name2->Curlen=strlen(name2->AR-RAY)
if (match(name1,name2)==0)
{
if (Include)//???
{
return(block());
}else
{
return(PASS());
}
}
}
//I=num,全部比较完毕
if (Exclude)//???
{
return(block());
}else
{
return(PASS());
}
}
通过这个算法在Linux环境下编写了一个过滤器函数,它和原来的DNS代码一起组成新的DNS服务器,可以实现对域名解析的灵活控制。
1.4 初步结果
过滤器可以简单有效地来实现对域名有选择、有限制的过滤,而且不用考虑权威区域以及根目录提示等参数的设置,因为过滤器在它们之前工作,不会影响后面的流程。如果查询不能通过,过滤器直接向客户端返回失败信息并结束本次查询,查询通过后才能继续后面的流程。
例如在具体应用中,希望只对内部域名进行解析,对外部域名如sohu.com、163.com等全部屏蔽。可以这样来配置DNS服务器:首先激活过滤器,然后在过滤器屏蔽栏中添加sohu.com、163.com等域名后缀即可完成配置。和传统方法相比,这样就不再需要配置转发器,根目录也不需要清空,可以按照常规添加上级根服务器。DNS服务器的过滤器设定好之后,在客户端进行正常和非正常域名的查询测试,会有明显不同的结果。
如果是正常查询,则过滤器不参与工作,解析过程和传统过程一样,返回主机的IP地址;如果是非正常查询,则过滤器发挥作用,直接将查询屏蔽或禁止掉,并向客户端返回一个失败信息,结束本次查询解析过程。图2是在模拟环境中进行不同域名查询时的返回结果。

在客户端运行nslookup解析程序,首先输入www.henan-n.tax.cn,后缀为tax.cn,经过比较不符合过滤器内容,因此允许该域名查询通过,服务器返回解析地址10.16.16.1。同样,输入www.anyang.henan-n.tax.cn,解析地址为10.40.16.10。然后再输入不允许通过的域名如www.sohu.com,则过滤器发挥屏蔽作用,禁止对该域名进行解析,并向客户端返回失败信息“Sorry,your queryis denied by the filter.”,然后结束本次查询。
2 结束语
受条件转发器的启发,我们对DNS的过滤功能进行了深入的分析研究,提出了域名过滤器概念并进行了一些初步的研究工作包括改造流程和算法设计等,给出了一个阶段性的结果,为进一步扩充DNS服务功能打下基础。
域名过滤器有着明显的优点:
1)配置简单,设置灵活。因为过滤器是直接针对相关需求设计出来的,因此很容易理解和配置,可以通过设置过滤器屏蔽内容来灵活决定哪些域名查询被禁止。
2)响应时间快,运行效率高。理论上来讲,过滤器并不会带来响应上的延迟,反而会提高对不允许查询域名的响应时间。另外如果不需要过滤器,完全可以不激活它。
3)安全稳定,运行可靠。有了过滤器,对于那些不希望服务器做出响应的查询,可以直接将它们屏蔽掉并返回一个错误信息,然后结束本次查询。解析过程不再继续,只有那些允许通过的查询才能进入后面的流程。

 

上海联兵环保科技有限公司
地址:上海市松江区工业区茸北分区茸阳路69号
总机:021-51691929
传真:021-57784244
免费电话:400-600-5030
技术支持:13641659499
E-mail:zhanglianbing@126.com
http://www.shlbhb.com

发表评论
网名:
评论:
验证:
共有0人对本文发表评论查看所有评论(网友评论仅供表达个人看法,并不表明本站同意其观点或证实其描述)
赞助商链接
关于我们 - 联系我们 - 咨询联兵