3.4 访问控制列表(ACL)
随着Internet网络的迅速发展,网络中的一些攻击和病毒也在逐渐增多,为了增强网络的安全性,网络设备需要具备控制某些访问或某些数据的能力。访问控制列表(ACL)是一种被广泛使用的网络安全技术。它根据数据包中的一些特征信息来决定是转发还是丢弃数据包。访问控制列表被广泛应用在网络中,用于进行一些特殊的访问控制。
3.4.1 ACL的基本概念
随着网络规模和网络中的流量不断扩大,网络管理员面临一个问题:如何在保证合法访问的同时拒绝非法访问。这就需要对路由器转发的数据包做出区分,哪些是合法的流量,哪些是非法的流量,通过这种区分来对数据包进行过滤并达到有效控制的目的。这种包过滤技术是在路由器上实现访问控制的一种主要方式。而实现包过滤技术最核心内容就是使用访问控制列表。
访问控制列表(Access Control List,ACL)是指根据预先定义好的访问控制规则对通过该网络节点的数据包进行一一匹配,只有符合访问控制规则的数据包,才允许通过该节点转发到相应的输出接口,从而对数据的访问进行控制。
如图3-13所示,在路由器R部署ACL后,Internet中未授权的用户不能访问公司总部的内部服务器,而经过授权的办事处则可以访问公司总部内部网络,从而达到过滤网络流量和保护内部网络的目的。
图3-13 部署ACL对数据流量进行过滤
访问控制列表是一种流量控制技术。流量管理的目的是阻止不需要的流量通过,同时允许合法用户流量能够访问相应的服务。建立访问控制列表后,可以限制网络流量,提高网络性能,对通信流量进行控制,这也是对网络访问的基本安全手段。在路由器的接口上配置访问控制列表后,可以对入站接口、出站接口以及通过路由器中继的数据包进行安全检测。
访问控制列表是控制流入、流出路由器数据包的一种方法。它在数据包流入或流出路由器时对其进行检查、过滤,从而达到流量管理的目的。
访问控制列表不但可以起到控制网络流量、流向的作用,而且在很大程度上起到保护网络设备、服务器的作用。作为外网进入企业内网的关卡,路由器上的访问控制列表成为保护内网安全的有效手段。
此外,在路由器的许多其他配置任务中都需要使用访问控制列表,如网络地址转换(Network Address Translation,NAT)、按需拨号路由(Dial on Demand Routing,DDR)、路由重分布(Routing Redistribution,RR)、策略路由(Policy-Based Routing,PBR)等很多场合都需要使用访问控制列表。
3.4.2 ACL判别规则
访问控制列表ACL使用网际层和传输层中头部信息的源IP地址、目的IP地址、协议类型(IP、UDP、TCP、ICMP)、源端口号、目的端口号等作为判别数据特征的依据。ACL可以根据这5个元素中的一个或多个的组合来作为判别的标准。匹配第3层及第4层的头部信息特征的数据包,将执行该条规则规定的允许或者拒绝通过,对于允许通过的数据包则进行转发,对于拒绝的数据包则直接丢弃,如图3-14所示。
图3-14 ACL判别标准
3.4.3 ACL的工作原理
在路由器中使用访问控制列表时,访问控制列表必须部署在路由器的某个接口的某个方向上。因此,对于路由器来说存在入口(Inbound)和出口(Outbound)两个方向。在路由器中,从某个接口进入路由器的方向称为入口方向,离开路由器的方向称为出口方向。在同一个路由器的两个接口之间转发数据,没有方向区别。如图3-15所示,数据包从gei_0/1和gei_0/2进入路由器,属于Inbound,数据包从gei_0/1和gei_0/2离开路由器,属于Outbound,而数据包从gei_0/1转发到gei_0/2口,就没有Inbound和Out bound的概念。
1.ACL的工作流程
ACL可被应用在路由器的入口或出口方向上,并且一台路由器上可以设置多个ACL。但对于一台路由器的某个特定接口的特定方向上,针对某一个协议,如IP,只能同时应用一个ACL。
图3-15 路由器接口的出口和入口方向
如图3-16所示,ACL应用在路由器出口方向时,首先查找路由表,找到转发接口(如果路由表中没有相应的路由条目,路由器会直接丢弃此数据包,并给源主机发送目的不可达消息),确定出口后需要检查是否在出接口上配置了ACL。如果没有配置ACL,路由器将做与出接口数据链路层协议相同的二层封装,并转发数据,如果在出接口上配置了ACL,则要根据ACL制定的规则对数据包进行判断。如果匹配了某一条ACL的判断语句并且这条语句的关键字是Permit,则转发数据包;如果匹配了某一条ACL的判断语句并且这条语句的关键字是Deny,则丢弃数据包。
由此可知,如果ACL是应用在路由器的出口方向时,在路由器中的处理流程为先进行路由选择,然后进行ACL判断。相反,如果ACL是应用在路由器的入口方向时,则先判断ACL,然后再进行路由选择。
图3-16 ACL的工作流程
2.ACL的内部处理过程
一个ACL可以由多条语句(规则)组成,如图3-17所示。当一个数据包要通过ACL的检查时,首先检查ACL中的第一条语句。如果匹配其判别条件,则依据这条语句所配置的关键字对数据包进行操作。如果关键字是Permit,则转发数据包;如果关键字是Deny,则直接丢弃此数据包。
如果没有匹配第一条语句的判别条件,则进行下一条语句的匹配。同样,如果匹配其判别条件,则依据这条语句所配置的关键字对数据包进行操作。如果关键字是Permit,则转发数据包;如果关键字是Deny,则直接丢弃此数据包。
图3-17 ACL的内部处理过程
这样的过程一直进行。一旦数据包匹配了某条语句的判别语句,则根据这条语句所配置的关键字执行转发或丢弃操作。如果一个数据包没有匹配上ACL中的任何一条语句,则会被丢弃掉。因为默认情况下,每一个ACL在最后都有一条隐含的匹配所有数据包的条目,其关键字是Deny。
综上所述,ACL内部的处理过程是自顶向下顺序执行,根据找到的匹配规则来决定转发或丢弃。
对于标准ACL,由于它只能过滤源IP。为了不影响源主机的通信,一般将标准ACL放在离目的端比较近的地方。扩展ACL可以精确地定位某一类的数据流。为了不让无用的流量占据网络带宽,一般将扩展ACL放在离源端比较近的地方。