在终端设备上同时实现远程访问控制和隔离区应用的方法
技术领域
本发明涉及一种宽带接入终端设备上的访问控制方法,尤其涉及的是一种利用Linux内核的Netfilter机制,通过配置iptables规则,同时实现远程访问控制功能和DMZ(Demilitarized Zone,隔离区)应用方法。
背景技术
现有技术中,远程访问控制(Remote Access Control,以下简称RA)功能指的是在被管理设备上实现对于管理员通过远程操作的方式访问设备,读写设备信息行为的控制。具体的讲,管理员可能通过多种方式远程访问设备,如HTTP方式、TELNET方式、SNMP方式、TFTP方式等,每种方式访问所使用的网络端口都是可以灵活配置的。由此,在被管理设备上对于每种方式的访问提供使能和禁用的设置选项,并且允许用户对各种方式访问的端口号进行设置,这样的设备就具备了RA功能。
上述各种远程访问方式的主要区别在于,根据通讯协议不同,在设备上实现不同的服务器功能,如HTTP方式需要设备实现HTTP服务器功能,TELNET方式需要实现TELNET服务器,等等。而针对各种远程访问方式,设备的RA技术原理是类似的,因此限于篇幅,本发明主要以HTTP方式的远程访问为例展开说明,下文所提到的远程访问方式也主要以HTTP方式为例,但其它方式的RA实现技术也在本发明的保护范围内。
图1是现有技术HTTP方式RA的原理示意图。从图中可以看到,设备支持HTTP方式RA的前提是已经实现了HTTP服务器功能,该服务器在HTTP协议规定的标准端口(80端口)上监听和处理来访HTTP报文。当设备开启了RA功能后,RA模块会根据用户设置的端口号(如8080端口),将该端口的远程来访HTTP报文重定向到标准端口,以便设备的HTTP服务器能够处理该报文,从而满足远程用户通过特定端口以HTTP方式远程访问设备的要求。
DMZ(Demilitarized Zone)即俗称的隔离区或非军事区,与军事区和信任区相对应,作用是把WEB,e-mail等允许外部访问的服务器单独接在该区端口,使整个需要保护的内部网络接在信任区端口后,不允许任何访问,实现内外网分离,从而达到用户需求。
DMZ可以理解为一个不同于外网或内网的特殊网络区域,DMZ内通常放置一些不合机密信息的公用服务器,比如Web、Mail、FTP等。这样来自外网的访问者可以访问DMZ中的服务,但不可能接触到存放在内网中的公司机密或私人信息等,即使DMZ中服务器受到破坏,也不会对内网中的机密信息造成影响。
如图2所示是现有技术外网用户通过DMZ访问内网主机上提供的HTTP服务的原理示意图。从图中可以看到,终端设备实现DMZ功能的原理就是让用户设置DMZ主机的IP地址,然后根据用户的设置,将外网用户的访问报文全部重定向转发到内网主机上。对于外网用户而言,他们是以终端设备的网络侧地址为目标地址发起HTTP请求,而实际提供HTTP服务的是内网主机上的HTTP服务器。
RA和DMZ功能的实现很大程度上依托了Linux内核的Netfilter机制。Linux从2.4内核版本开始将包筛选功能分解为两大块:Netfilter钩子函数和iptables包处理模块。前者提供了方便的方式来在数据包通过Linux内核的不同位置上截获和操纵处理过的IP包;而后者实现了三个规则列表分别用于IP数据包的过滤、转发和处理。
如图3所示是现有技术Netfilter机制的原理示意图,显示了一个IP数据包通过Netfilter系统的全过程。从图中可以看到,整个系统主要工作在网络层,当前主要的网络层协议是IPv4,Linux为IPv4定义了五个Netfilter钩子函数,分别为:NF_IP_PRE_ROUTING、NF_IP_LOCAL_IN、NF_IP_FORWARD、NF_IP_LOCAL_OUT和NF_IP_POST_ROUTING。
对于进入系统的IP数据包,经过第一个钩子函数NF_IP_PRE_ROUTING进行处理;然后交给路由代码进行路由选择,判断该数据包是需要转发还是发给本机的;若是发给本机的,则该数据包经过钩子函数NF_IP_LOCAL_IN处理以后,传递给本机的上层协议处理;若该数据包应该被转发,则它被NF_IP_FORWARD处理;经过转发的数据包经过最后一个钩子函数NF_IP_POST_ROUTING处理以后,再交由下层协议传输到网络上。
对于本地系统产生的外发数据包,经过钩子函数NF_IP_LOCAL_OUT处理后,交给路由选择代码处理,然后经过NF_IP_POST_ROUTING处理以后交给下层协议外发。
iptables作为一个包处理模块,主要实现了三个IP规则列表(table):filter表、nat表和mangle表,分别用于IP包的过滤、转发和处理;每个规则表中可以包含若干条规则链(chain);每条规则链中又可以包含若干条规则(rule),因此可以将iptables模块的处理机制理解为一个table-chain-rule的层次关系。
iptables定义了五种预定义规则链,依次为PREROUTING链、INPUT链、FORWARD链、OUTPUT链和POSTROUTING链,分别对应于图3中的五个Netfilter钩子函数所在的检查点,这些规则链中定义的规则将作为各检查点报文处理的依据。iptables还支持用户自定义链(user-defined chains),自定义链的好处在于可以针对各种业务分别定义规则链,从而使得各种业务的iptables处理规则分类清晰,易于管理员维护。
iptables的规则匹配原则是:五种预定义规则链都有自己默认的报文处理方式,报文的匹配按照顺序匹配的原则从规则链的第一条规则开始进行,当没有规则得到匹配时就使用默认的处理方式;自定义链必须基于预定义规则链创建,预定义链中可以包含跳转到自定义链的规则,隶属于同一个预定义链的自定义链之间也可以相互跳转,但是不同检查点上的规则链是不能相互跳转的;如果某个自定义链的规则都没有得到匹配,则返回指向这条自定义链的那条规则所在规则链的下一条规则继续匹配。
在目前的宽带接入应用中,运营商出于运营和维护的需要,希望终端设备提供RA功能,以便管理员以远程登录的方式查看设备信息、完成相关配置任务,这样可以节省下不菲的人工上门服务费用。另一方面,宽带用户,特别是企业用户希望终端设备的防火墙提供对企业内部网络安全防护的同时,也开放一些内部网络服务供外部网络客户使用,如企业Web服务器、FTP服务器和论坛等。这就要求终端设备也具备DMZ的功能。
现有的RA和DMZ技术的实现流程图如图4a和图4b所示。从图4a中可以看到,RA技术主要涉及到iptables的PREROUTING链和INPUT链,DMZ技术主要涉及到iptables的PREROUTING链和FORWARD链,两者的处理规则可能发生冲突的地方是在PREROUTING链中。在图4a中可知,当RA的端口为非标准端口(如8080端口)时,RA在PREROUTING链中增加的规则是重定向8080端口报文到80端口,并且丢弃80端口来访报文;从图4b中可知,DMZ在PREROUTING链中的操作是将80端口的来访报文转发给内网主机上的HTTP服务器。
这样就带来了两个问题:
首先,RA的设置和DMZ的设置是两个独立的操作,设备自身没有办法约束用户的操作次序,因此在同一个链中添加的规则往往是后添加的生效(假设各个模块添加规则的原则都是将该规则添到规则链的头部)。如果用户先设置RA,那么DMZ在PREROUTING链中将80端口的报文都转发了,RA就不生效了;反之也是一样,如果用户先设置DMZ,那么RA在PREROUTING链中将80端口的来访报文都丢弃了,DMZ的转发操作无法实现。同样的,用户在操作上完全可能将一个正生效的功能禁用,即使RA和DMZ已经同时生效了,用户做出了禁用RA的操作,那么按照RA模块通常的做法,是应该删除丢弃80端口报文的规则的,但是实际上这条规则并不存在,否则DMZ是不可能生效的,这样删除一条不存在的规则,会给系统带来不必要的开销。
其次,RA和DMZ的设置都会在PREROUTING链中添加规则,随着设置条目的增加,PREROUTING链中的规则会越来越多,给设备的维护带来了很大的困难,管理员要花费一定的精力来区分属于不同应用的规则,特别是如果由于人为的原因造成配置错误引起业务冲突的情况下,排除故障查找原因的工作难度也会相应增大。
虽然目前基于Linux系统的终端设备一般都支持上述两方面的功能,但是两者同时生效的实现却很少。主要原因在于,Linux的网络实现中,上述功能都是通过设置iptables规则来实现的,同时实现两方面的功能不可避免的会遭遇在同一个规则链中两种应用的处理规则冲突情况下的报文匹配优先次序问题。因此现有技术一般情况下,DMZ应用的优先级都是最低的,无法确保RA功能生效的前提下,DMZ应用也工作正常;另一方面,当用户手动取消DMZ设置后,又不能保证RA功能仍然正常工作。这两方面的现有技术问题都需要在设计上做出相应的考虑,因此,现有技术还有待于改进和发展。
发明内容
本发明的目的在于提供一种在终端设备上同时实现远程访问控制和隔离区应用的方法,作为终端设备上的访问控制策略,同时实现RA和DMZ应用,既满足运营商远程管理运营和维护的需要,也确保运营商可以顺利提供DMZ应用服务。
本发明的技术方案包括:
一种在终端设备上同时实现远程访问控制和隔离区应用的方法,其包括以下步骤:
A、利用Linux的Netfilter包筛选机制,在iptables模块初始化的过程中在可能发生冲突的预定义链中优先加载跳转远程访问控制自定义链的规则;
B、在远程访问控制的实现中增加对隔离区是否使能的判断,同时在隔离区的实现中保证对远程访问控制规则链进行处理。
所述的方法,其中,所述步骤A中还包括:设置所述远程访问控制和隔离区应用采用不同的端口。一般情况下,远程访问控制使用非标准协议端口,隔离区应用采用标准协议端口。
所述的方法,其中,以HTTP访问方式为例,所述远程访问控制采用8080端口;所述隔离区应用采用80端口。也即,隔离区端口为标准协议端口。
所述的方法,其中,所述步骤B还包括对于远程访问控制的实现步骤:
B1、判断用户的操作指令,如果是启用远程访问,则在远程访问控制自定义链中增加规则,将远程访问控制端口来访的报文重定向到隔离区端口;如果是禁用远程访问,则在远程访问控制自定义链中删除规则,取消将远程访问控制端口来访报文重定向到隔离区端口的操作。
所述的方法,其中,所述步骤B1还包括:
B11、在启用远程访问时,判断系统是否还启用了隔离区服务,如果启用,不做任何处理;否则在远程访问控制自定义链中增加规则,丢弃隔离区端口来访的报文。
所述的方法,其中,所述步骤B1还包括:
B12、在禁用远程访问时,判断系统是否启用了隔离区服务,如果启用,不做任何处理;否则删除远程访问控制自定义链中的规则,取消丢弃隔离区端口来访报文的操作。
所述的方法,其中,所述步骤B还包括对于隔离区应用的实现具体步骤:
B2、判断用户的操作指令,如果是启用隔离区应用,则修改来访报文的目的地址,重定向该报文到内网主机的相同端口上继续执行;如果是禁用隔离区应用,则删除将来访报文重定向到内网主机隔离区端口的处理规则。
所述的方法,其中,所述步骤B2还包括:
B21、在启用隔离区应用时,判断系统是否启用了远程访问控制,如果未启用,不做任何处理;否则在远程访问控制的自定义链中删除丢弃隔离区端口来访报文的处理规则。
所述的方法,其中,所述步骤B2还包括:
B22、在禁用隔离区应用时,判断系统是否启用了远程访问控制服务,如果未启用,不做任何处理;否则在远程访问控制的自定义链中恢复丢弃隔离区端口来访报文的处理规则。
所述的方法,其中,所述步骤A还包括:定义远程访问控制在PREROUTING链中的自定义规则链RAPRE,隔离区应用的自定义规则链DMZPRE,并在iptables模块初始化时,在PREROUTING链的头部前两条规则分别定义为无条件跳转RAPRE链和无条件跳转DMZPRE链。
本发明所提供的一种在终端设备上同时实现远程访问控制和隔离区应用的方法,由于引入了自定义链的概念,以自定义链的方式约定了RA和DMZ两种应用的优先级关系,从而达到了两者同时生效的目的,彼此不会因为对方功能的生效与失效而影响自身的正常工作;且在实现上简单方便,开销较小,对系统的性能影响很小。
附图说明
图1是现有技术的HTTP方式中RA功能实现的原理示意图;
图2是现有技术的DMZ功能实现的原理示意图;
图3是现有技术的Netfilter机制原理示意图;
图4a是现有技术中RA技术功能实现的流程图;
图4b是现有技术中DMZ技术功能实现的流程图;
图5a是本发明方法RA和DMZ同时生效情况下RA功能实现的流程图;
图5b是本发明方法RA和DMZ同时生效情况下DMZ功能实现的流程图。
具体实施方式
以下结合附图,将对本发明的较佳实施例进行更为详细的说明。
本发明在终端设备上同时实现远程访问控制和隔离区应用的方法利用了Linux的Netfilter包筛选机制,以iptables自定义链的方式区分远程访问控制RA功能实现需要的规则和DMZ功能实现需要的规则。
首先,在iptables模块初始化的过程中,设置在可能发生冲突的预定义链中优先加载跳转RA自定义链的规则,以满足RA优先级高于DMZ的要求。
此外,由于RA的优先级高于DMZ,因此要保证两者同时生效,RA的端口号应该和DMZ有所区分,如果DMZ使用标准端口(如HTTP为80端口),则RA应该设置成其它端口(如HTTP的RA改为8080端口访问)。
然后,在RA的实现中增加对DMZ是否使能的判断,同时在DMZ的实现中考虑对RA规则链进行处理。以下将分别描述RA和DMZ的实现步骤。按照前文背景技术的远程访问控制一节中的约定,主要以HTTP方式为例进行说明,但显然本发明应用于其他协议方式是等同的处理方式。
如图5a所示,本发明在终端设备上同时实现远程访问控制和隔离区应用的方法中,对于远程访问控制RA的实现,具体包括如下步骤:
步骤A、判断用户的操作指令,如果是启用8080端口上的HTTP方式远程访问,则继续执行步骤B;如果是禁用8080端口上的HTTP方式远程访问,则跳到步骤D;
步骤B、在RA自定义链中增加规则,将8080端口来访的TCP报文重定向到80端口;
步骤C、判断系统是否启用了DMZ服务,如果启用,不做任何处理;否则在RA自定义链中增加规则,丢弃80端口来访的TCP报文;
步骤D、在RA自定义链中删除规则,取消将8080端口来访TCP报文重定向到80端口的操作;
步骤E、判断系统是否启用了DMZ服务,如果启用了,不做任何处理;否则删除RA自定义链中的规则,取消丢弃80端口来访的TCP报文的操作。
对于DMZ功能的实现,具体包括如下步骤:
步骤F、判断用户的操作指令,如果是启用DMZ,则继续执行步骤G;如果是禁用DMZ,则跳到步骤I;
步骤G、修改来访TCP报文的目的地址,重定向该报文到内网主机的相同端口上;
步骤H、判断系统是否启用了RA,如果未启用,不做任何处理;否则在RA的自定义链中删除丢弃80端口来访的TCP报文的处理规则;
步骤I、删除将来访TCP报文重定向到内网主机80端口的处理规则;
步骤J、判断系统是否启用了RA服务,如果未启用,不做任何处理;否则在RA的自定义链中恢复丢弃80端口来访的TCP报文的处理规则。
本发明在终端设备上同时实现远程访问控制和隔离区应用的方法,首先是针对RA和DMZ两种应用分别定义了各自的自定义链,从RA和DMZ现有技术的实现原理可以看出:RA的实现,在底层iptables规则链中的处理主要涉及PREROUTING链和INPUT链;而DMZ的实现,在底层主要涉及PREROUTING链和FORWARD链。由此可见,两种应用的冲突主要体现在PREROUTING链中相应规则的处理顺序上。因此,本发明方法定义RA在PREROUTING链中的自定义规则链RAPRE,DMZ的自定义规则链DMZPRE,在iptables模块初始化的时候,在PREROUTING链的头部前两条规则分别定义为无条件跳转RAPRE链和无条件跳转DMZPRE链。
在自定义链定义完成后,就可以分别实现RA功能和DMZ功能了。由于在PREROUTING链中定义了自定义链RAPRE和DMZPRE,且前者优先得到匹配,因此,通过HTTP方式的RA访问所使用的端口号和访问DMZ内网主机HTTP服务器的端口号必须有所区别,否则,只有RA才能生效。这里本发明各较佳实施例中设置所述远程访问控制和隔离区应用采用不同的端口,一般情况下,远程访问控制使用非标准协议端口,隔离区应用采用标准协议端口。以HTTP访问方式为例,所述远程访问控制采用8080端口;所述隔离区应用采用80端口,也即,隔离区端口为标准协议端口。
不妨假设了RA使用的是8080端口,DMZ使用的是标准80端口;但显然,技术实际应用中并不仅限于上述端口的选择,可以选择其他端口。
如图5a所示,本发明具体实施例的在终端设备上同时实现远程访问控制和隔离区应用的方法中,RA的实现具体实施例过程主要包括如下几个步骤:
步骤11、判断用户的操作指令,如果是启用8080端口上的HTTP方式远程访问,则继续执行步骤12;如果是禁用8080端口上的HTTP方式远程访问,则跳到步骤14;
步骤12、在RAPRE链中增加8080端口来访的TCP报文重定向到80端口的处理规则;
步骤13、判断系统是否启用了DMZ服务,如果启用了,不做任何处理,直接跳到步骤16;否则在RAPRE链中增加丢弃80端口来访的TCP报文处理规则;然后,跳到步骤16;
步骤14、在RAPRE链中删除8080端口来访TCP报文重定向到80端口的处理规则;
步骤15、判断系统是否启用了DMZ服务,如果启用,不做任何处理,直接跳到步骤17;否则在RAPRE链中删除丢弃80端口来访TCP报文的处理规则,然后跳到步骤17。
步骤16、在INPUT链中增加规则,接受80端口上收到的TCP报文,流程结束。
步骤17、在INPUT链中删除规则,不再接受80端口上收到的TCP报文,流程结束。
本发明方法对于现有RA实现技术的主要改进就在于步骤3和步骤5。
步骤13的作用是:正常情况下,当用户设置RA时,如果选择了8080端口远程访问,那么就不能允许用户通过80端口远程访问,需要在RAPRE链中增加规则,丢弃80端口上收到的来访报文;而此时如果DMZ已经启用,如果仍然按正常情况增加该规则,由于RAPRE链先于DMZPRE链被执行,则80端口的来访报文都先被RA模块丢弃了,导致访问DMZ内网主机的报文没有办法被DMZ模块转发处理。
因此判断DMZ启用的时候,RA只要不做操作即可,访问80端口的报文都会被DMZ模块处理,DMZ生效,RA同时工作正常。
步骤15的作用是:当禁用RA时,如果发现DMZ已启用,说明RAPRE链中本来就不存在丢弃80端口来访报文的规则,因此也就不需要做任何删除操作了。
如图5b所示,本发明方法实现DMZ功能的主要步骤包括:
步骤21、判断用户的操作指令,如果是启用DMZ,则继续执行步骤22;如果是禁用DMZ,则跳到步骤24;
步骤22、在DMZRPE链中增加一条处理规则,修改来访TCP报文的目的地址,重定向报文到内网主机的80端口上;
步骤23、判断系统是否在非80端口上启用了RA,如果未启用,不做任何处理,直接跳到步骤26;否则在RAPRE链中删除丢弃80端口来访的TCP报文的处理规则,然后跳到步骤26。
步骤24、在DMZPRE链中删除将来访TCP报文重定向到内网主机80端口的处理规则;
步骤25、判断系统是否在非80端口上启用了RA服务,如果未启用,不做任何处理,直接跳到步骤27;否则在RAPRE链中增加丢弃80端口来访TCP报文的处理规则,然后跳到步骤27;
步骤26、在FORWARD链中增加规则,接受发往内网主机地址的报文,流程结束。
步骤27、在FORWARD链中删除规则,不再接受发往内网主机地址的报文,流程结束。
本发明对于现有DMZ实现技术的主要改进就在于步骤23和步骤25。
步骤23的作用是:正常情况下,当用户设置RA时,如果用户选择从非80端口远程访问设备(如8080端口),那么就不再允许用户通过80端口远程访问,需要在RAPRE链中添加一条规则,丢弃80端口上收到的从外网来访的TCP报文;而由于RAPRE链先于DMZPRE链被执行,则80端口的来访报文都被RA模块丢弃了,导致访问DMZ内网主机的报文没有办法被DMZ模块转发处理,因此在用户启用DMZ的时候,如果发现RA已经处于启用生效状态,就需要由DMZ模块来删除RAPRE链中的这条规则,这样既没有影响到RA的正常工作,DMZ也能正常生效.
步骤25的作用是:当禁用DMZ时,如果发现用户已经在非80端口上启用了RA,说明之前DMZ和RA同时生效的情形下,RAPRE链中已不存在丢弃80端口来访TCP报文的这条规则,因此DMZ模块需要在RAPRE链中恢复这条规则,以确保RA的功能符合用户的需求:外网用户只能从其设定的非80端口访问该设备,而无法从80端口访问。
综上,本发明方法引入了自定义链的概念,在PREROUTING链中定义了RA的自定义链RAPRE,DMZ的自定义链DMZPRE,并且在PREROUTING链初始化的时候优先添加跳转RAPRE链的规则,这样,以自定义链的方式约定了RA和DMZ两种应用的优先级关系:在RA的所有规则在PREROUTING链中都得到匹配后才有可能进行DMZ的规则匹配。此外,管理员在维护配置条目规则的时候也更加一目了然,在PREROUTING链中只有跳转各个业务自定义链的规则,具体的处理规则都在自定义链中定义,条理分明,便于维护。
其次,在RA和DMZ各自的处理流程中分别增加了对于对方功能是否启用的判断以及对于对方自定义链规则的操作,从而达到了两者同时生效的目的,彼此不会因为对方功能的生效与失效而影响自身的正常工作,在实现上简单方便,开销较小,对系统的性能影响很小。
应当理解的是,上述针对本发明较佳实施例的描述较为详细,并不能因此而认为是对本发明专利保护范围的限制,本发明的专利保护范围应以所附权利要求为准。