一、以太网访问控制列表
主要作用:在整个网络中分布实施接入安全性 访问控制列表ACL(Access Control List)为网络设备提供了基本的服务安全性。对某个服务而言,安全管理员首先应该考虑的是:该服务是否有必要运行在当前环境中;如果必要,又有哪些用户能够享用该服务。 如果该服务不必要,则应当禁止该服务。因为运行一个不必要的服务,不仅会浪费网络等资源,而且会给当前的网络环境带来安全隐患。 如果是部分用户需要,则应当为该服务规划权限,禁止无权限的用户使用该服务。 如果某个服务仅仅在网络内部需要,则还需尽力避免该服务被网络外部访问。 同样,如果某个服务仅在网络外部是必须的,则管理员还应将该服务限制在网络外部。 对于某些服务来说,即使用户能使用该服务,安全管理员也应该能监管该服务的使用情况,比如控制某服务只能在某段时间内使用,对该服务的使用量进行统计等等。 在使用访问控制列表之前,安全管理员必须非常清楚当前网络环境的安全规划,和潜在的安全问题。1.访问控制列表?
访问列表: +对到达端口的数据包进行分类,并打上不同的动作标记 +访问列表作用与交换机的所有端口 +访问列表的主要用途 包过滤 镜像 流量限制 流量统计 分配队列优先级访问控制列表被创建后,既可以用于拒绝某些数据包经过某个交换机接口,也可用于拒绝某些数据包经过交换机的所有接口。访问控制列表是否支持在单个接口上的应用要根据交换机型号而定。
默认情况下,交换机将允许所有的数据包经过所有接口,即不做任何转发限制。而采用访问控制列表,则交换机在转发某个数据包之前,将会参考访问控制列表中的内容以确定是否转发。 最初,访问控制列表的作用仅限于决定是否转发数据包(如转发或丢弃)。管理员只能对值得怀疑的数据包作出丢弃决定,但不能监控那些存在安全隐患的数据包。 包过滤(Packet Filtering):对每个数据包按照用户所定义的项目进行过滤,如比较数据包的源地址、目的地址是否符合规则等。包过滤不涉及会话的状态,也不分析数据,只分析数据包的包头信息。如果配置的规则合理,在这一层能够过滤掉很多有安全隐患的数据包。 报文监控(Packet Monitoring):一般一台设备需要一个监控端口就可以监控设备的所有端口。监控端口一般接报文/协议分析仪,用于报文/协议分析。管理员事先确定要监控的报文类型,如ICMP报文。这时进入或离开交换机的所有ICMP报文都会被拷贝到监控端口,连接到该端口的网络分析仪能同时收到该报文进行分析。 流量限制(CAR):管理员可以限制某一源与目的对之间的平均报文流量。既可以是IP地址对,也可以是MAC地址对。流量限制将在两个方向上同时进行。 报文统计(Packet Gathering):管理员确定要统计的报文流向,即从何处而来(报文的源地址),准备去往哪里(报文的目的地址)。这里的地址既可以是MAC地址,也可以是IP地址。而且可以统计双向的报文流量。统计结果可以是报文的字节数,也可以是报文的包数。 这里主要介绍ACL在包过滤方面的应用,实际上ACL在QOS等方面也有相当广泛的应用 大多数访问控制列表在数据本身上不做任何事,不能基于数据流的实际内容作出操作决定。对报文过滤而言,访问控制列表只能实现: 不让任何人从外界使用Telnet登录。 让每个人经由SMTP向我们发送电子邮件。 那台机器经由NNTP能把新闻发给我们,但是没有其它机器能这样做。 然而,访问控制列表不能实现如下的一些需求: 某个特定用户能从外部远程登录,但是其它用户不能这样做。因为“用户” 不是数据包过滤系统所能辨认的。 可以发送这些文件而不是那些文件。因为“文件”也不是数据包过滤系统所能辨认的。2.流分类介绍
+通常选择数据包的包头信息作为流分类项 +2层流分类项 以太网帧承载的数据类型 源/目的MAC地址 以太网封装格式 VLAN ID 入/出端口 +3/4层流分类项 协议类型 源/目的IP地址 源/目的端口号 DSCP流(flow),即业务流。流分类,就是根据分类项将数据包划分成不同类型。对于访问控制列表ACL来说,在实现包过滤或QOS等应用之前,要做的的第一件事就是对通过网络设备的业务流进行分类。
流分类的结果是对每一种数据包类型采取不同的操作,也可能是几种不同的数据包类型采取相同的操作。 在三层交换机中,访问控制列表不仅可以应用于以太网帧,还可以应用于IP数据包。而二层交换机,就只能应用于以太网帧。 数据包到达端口后,如果是可以直接在链路层交换的以太网帧,则先获取以太网帧头信息,包括以太网帧承载的协议类型(如IP、ARP或RARP协议)、以太网帧封装类型(Ethernet II、SNAP或802.3封装等等)、源MAC地址、目的MAC地址,以太网帧的入/出端口,然后和设定的2层流规则进行比较,根据比较结果做下一步操作。 如果是需要三层转发的数据包,则先获取包头信息,包括IP层所承载的上层协议类型(ICMP、TCP、UDP、IGMP),数据包的源IP地址、目的IP地址、4层源端口、目的端口或者是DSCP优先级标记,然后和设定的规则进行比较。IP数据报过滤
对IP数据包实现过滤,通常用到的属性如上图所示(图中IP所承载的上层协议为TCP),即: IP的源、目的地址及协议域 TCP或UDP的源、目的端口 可以用这些域的各式各样的组合形成不同的规则。比如,要禁止从主机1.1.1.1到主机 2.2.2.2的FTP连接,管理员可以创建这样的规则用于丢弃相应的报文: IP目的地址 = 2.2.2.2 IP源地址 = 1.1.1.1 IP协议域 = 6 (TCP) 目的端口 = 21 (FTP)3.访问控制列表构成
+Rule(访问控制列表的子规则) +Time-range(时间段机制) +ACL=rules[+time-range] (访问控制列表由一系列规则组成,有必要时会和时间段结合) 访问控制列表由一条条安全策略构成,每一条策略(Access Control List,简称ACL)由一系列的规则(rule)组成。规则(rule)用于划分数据包类型,并定义动作用于决定对数据包的下一步操作,常用的动作有permit(允许)和deny(丢弃)。 根据工作模式的不同,访问控制列表可以分为两类: 基于MAC层的访问控制列表,主要使用2层流规则 基于IP层的访问控制列表,主要使用3/4层流规则 ACL可以带上时间段,表示使某一条ACL在特定的时间段内起作用。 ACL可以用名字标识,也可以用数字进行标识。二、以太网访问控制列表的配置
1.时间段的相关配置 对时间段的配置有如下内容:配置每天的时分范围、周期范围和日期范围。配置日期范围采用的是年、月、日、时、分的形式,配置周期范围采用的是每周的周几的形式,配置每天的时分范围采用的是每天的几点、几分的形式。 如果不配置起始时分和结束时分,时间范围就是一天内所有的时间。 如果不配置结束日期,时间范围就是从配置生效之日起到系统可以表示的最大时间为止。 对于时间段的配置是在系统视图下进行的,在完成时间段的配置之后,我们就可以在配置ACL的规则时指定该条规则在什么时间段内有效。+系统视图下,配置时间段
time-range time-name [ start-time to end-time ] [days-of-the-week ] [from start-date][ to end-date ] +系统视图下,删除时间段 undo time-range time-name [start-time to end-time ][ days-of-the week ][ from start-date ][ to end-date ] 假设管理员需要在从2002年12月1日上午8点到2003年1月1日下午18点的时间段内实施安全策略,可以定义时间段名为denytime,具体配置如下: time-range denytime from 8:00 12-01-2002 to 18:00 01-01-20032.定义访问控制列表
在系统视图下,可以通过ACL命令来定义一条访问控制列表并进入访问控制列表视图。 如果用名字,必须由从a到z的英文字母组成,长度不能超过32个字母。 如果用数字进行标识,取值范围为1~1999。 访问控制列表分为四类:基本访问控制列表(basic)、高级访问控制列表(advanced)、接口访问控制列表(interface)和基于二层的访问控制列表(link)。在定义访问控制列表时,我们也必须定义其类型。如果是用数字对访问控制列表进行标识,我们则可以通过不同的数字范围来表示不同的列表类型: 1~99:基本访问控制列表(basic) 100~199:高级访问控制列表(advanced) 1000~1999:接口访问控制列表(interface) 200~299:基于二层的访问控制列表(link) 在进入访问控制列表视图之后,我们就可以用rule命令来为ACL定义规则。在定义ACL的子规则时,我们可以多次使用rule命令给同一个访问控制列表定义多条规则。这样在多条规则之间,就存在一个匹配顺序match order的问题。在定义ACL时,我们也可以同时定义规则之间的匹配顺序:config或auto。 对于不同类型的访问控制列表,其规则的配置也不尽相同+系统视图下,定义ACL并进入访问控制列表视图:
acl {number acl-number | name acl-name basic | advanced | interface | link}[ match-order {config | auto }] +系统视图下,删除ACL: undo acl {number acl-number | name acl-name | all}3.基本访问控制列表的规则配置
基本访问控制列表的特点是只用IP数据包的源地址信息来定义规则,并以此来对通过交换机的业务流进行分类。 相关的参数: rule-id:指定访问控制列表的子规则ID,取值范围为0~127。 permit:表明允许满足条件的报文通过。 deny:表明禁止满足条件的报文通过。 time-range time-range-name:时间段的名称,可选参数,表示该规则在此时间段内有效。 source source-addr source-wildcard | any:source-addr source-wildcard表示源IP地址和源地址通配位,点分十进制表示;any表示所有源地址。 fragment:表示此条规则仅对分片报文有效,而对非分片报文忽略此规则。+基本访问控制列表视图下,配置相应的规则
rule [rule-id]{ permit | deny}[ source source-addr source-wildcard | any ][ fragment][ time-range time-range-name ] +在基本访问控制列表视图下,删除一条子规则 undo rule rule-id [source][fragment][time-range]4.高级访问控制列表的规则配置
高级访问控制列表与基本访问控制列表的区别在于,高级访问控制列表使用更多的信息来定义规则。除了IP数据包的源地址之外,高级访问控制列表还使用目的地址和协议号,而对于使用TCP、UDP 协议传输的数据包还可以同时使用目的端口号来对数据包做出区分。 特有的一些参数: protocol:本参数用来指定协议类型。协议类型可以使用名字表示,也可以使用数字表示。在使用名字表示时,该参数可以取值icmp、igmp、tcp、udp、ip、gre、ospf、ipinip等。如果本参数取值为IP,表示所有的IP协议。在使用数字表示时,数字的取值范围为1~255。 source source-addr source-wildcard | any:source-addr source-wildcard表示源IP地址和源地址通配位,点分十进制表示;any表示所有源地址。 destination dest-addr dest-wildcard | any:dest-addr dest-wildcard表示目的IP地址和目的地址通配位,点分十进制表示;any表示所有目的地址。 source-port operator port1 [ port2 ]:表示报文使用的源TCP或者UDP端口号。其中operator表示端口操作符,包括eq(等于)、gt(大于)、lt(小于)、neq (不等于)、range(在某个范围内)。注:本参数在protocol参数取值为TCP或UDP时才可用。port1 [ port2 ]:报文使用的TCP或者UDP源端口号,用字符或数字表示。数字的取值范围为0~65535,字符取值请参看端口号助记符表。只有操作符为range时才会同时出现port1 port2两个参数,其它操作符只需port1。 destination-port operator port1 [ port2 ]:表示报文使用的目的TCP或者UDP端口号。具体描述同source-port operator port1 [ port2 ]。 icmp-type icmp-type icmp-code:当protocol参数取值icmp时出现。icmp-type icmp-code指定一ICMP报文。icmp-type代表ICMP报文类型,用字符或数字表示,数字取值范围为0~255;icmp-code代表ICMP码,在协议为icmp且没有使用字符表示ICMP报文类型时出现,取值范围是0~255。 established:表示此条规则仅对TCP建立连接的第一个SYN报文有效,可选参数,当protocol参数取值tcp时出现。 precedence precedence:可选参数,表示IP优先级,取值为0~7的数值或名字。 dscp dscp:可选参数,数据包可以根据DSCP值来分类,取值为0~63的数值或名字。 tos tos:可选参数,数据包可以根据TOS值来分类,取值为0~15的数值或名字。 fragment:表示此条规则仅对分片报文有效,而对非分片报文忽略此规则。5.端口操作符及语法
+TCP/UDP协议支持的端口操作符及语法 应用高级访问控制列表时,对于使用TCP、UDP 协议传输的数据包还可以同时使用目的端口号来对数据包做出区分。6.接口访问控制列表的规则配置
在三层交换机中,接口访问控制列表是一种比较特殊的访问控制列表。它主要用来在三层交换机上区分来自不同VLAN的业务流,并对不同的业务流进行不同的处理(permit或deny)。 特有的参数: interface { interface-name | interface-type interface-num | any }:三层接口名,其中interface-name为接口名,等于interface-type加上interface-num,用来表示一个接口,在交换机中三层接口只能是VLAN接口,即interface-type只能取值VLAN Interface;any表示所有三层接口。 在配置接口访问控制列表时要注意的是:在以太网交换机中,不存在三层物理接口,只存在三层Vlan虚接口,因此当命令行提示用户输入接口类型时,只能选择Vlan-interface型的接口,选择了其他类型的接口类型,命令行将会提示失败。另外只有当交换机上已经配置了Vlan-interface的时候,在配置才能够选择相应的VLAN-interface。 +接口访问控制列表视图下,删除一条子规则 undo rule rule-id7.二层访问控制列表的规则配置
与路由器不同的是,在交换机产品中我们除了可以配置基于三层即IP数据包的访问控制列表,还可以配置基于二层即MAC地址的访问控制列表。在二层访问控制列表中,我们主要根据源MAC地址、源VLAN ID、二层协议类型、报文二层接收端口、报文二层转发端口、目的MAC地址等二层信息制定规则,对数据进行相应处理。 实际上所谓的“二层流规则”主要用于区分同一个VLAN内部的数据流。同一个VLAN内的数据流主要在2层转发,因为2层流规则信息是附属于MAC-PORT转发表的。因此硬件接口收到数据包后,能提取出以太网首部信息作为流分类依据。 二层访问控制列表特有的参数: protocol:为以太网帧承载的协议类型,可选参数,取值范围为ip、arp、rarp、pppoe-control和pppoe-data。 cos vlan-pri:802.1p优先级,取值范围为0~7。 ingress { { [ source-vlan-id ] [ source-mac-addr source-mac-wildcard ] [ interface { interface-name | interface-type interface-num } ] } | any }:数据包的源信息,[ source-vlan-id ]表示的是数据包的源VLAN,[ source-mac-addr source-mac-wildcard ]表示的是数据包的源MAC地址和MAC地址的通配符,这两个参数共同作用可以得到用户感兴趣的源MAC地址的范围,比如source-mac-wildcard取值为0.0.ffff,则表示用户只对源MAC地址的前32个bit(即通配符中数字0对应的比特位)感兴趣,interface { interface-name | interface-type interface-num }表示的是接收该报文的二层端口,any表示从所有端口接收到的所有报文。 egress { { [ dest-mac-addr dest-mac-wildcard ] [ interface { interface-name | interface-type interface-num } ] } | any }:数据包的目的信息,dest-mac-addr dest-mac-wildcard表示该报文的目的MAC地址和目的MAC地址通配符,这两个参数共同作用可以得到用户感兴趣的目的MAC地址的范围,比如dest-mac-wildcard取值为0.0.ffff,则表示用户只对目的MAC地址的前32个bit(即通配符中数字0对应的比特位)感兴趣,interface { interface-name | interface-type interface-num }表示转发该报文的二层端口,any表示从所有端口转发的所有报文。 +在二层访问控制列表视图下,删除一条子规则 undo rule rule-id8.自定义访问控制列表的规则配置
实际上在某些型号的以太网交换机上,还支持另外一种访问控制列表的类型,即用户自定义型的访问控制列表。用户自定义访问控制列表的好处在于,用户可以根据实际的需求来定义访问控制列表的类型,以实现比较灵活的应用。 用户自定义访问控制列表根据用户的定义对二层数据帧的前64个字节中的任意字节进行匹配,对数据报文作出相应的处理。正确使用用户自定义访问控制列表需要用户对二层数据帧的构成有深入的了解。下图为二层数据帧的前64个字节的示意图(每个字母代表一个16进制数,每两个字母代表一个字节)。 各个字母的含义及偏移量取值如下表所示: 上表中各个字段的偏移量是它们在SNAP+tag的802.3数据帧中的偏移量。在用户自定义访问控制列表中,用户可以使用规则掩码和偏移量两个参数共同从数据帧中提取前64个字节中的任意字节,然后和用户定义的规则比较,从而过滤出匹配的数据帧,作相应的处理。用户定义的规则可以是数据的某些固定属性,比如用户要将所有的TCP报文过滤出来,可以将规则定义为“06”,规则掩码定义为“FF”,偏移量定义为35,此时规则掩码和偏移量共同作用,把接收到的数据帧中的TCP协议号字段的内容提取出来,和规则比较,匹配出所有的TCP报文。 用户自定义访问控制列表特有的参数: { rule-string rule-mask offset }&<1-20>:rule-string是用户自定义的规则字符串,必须是16进制数组成,字符必须是偶数个;rule-mask offset用于提取报文的信息,rule-mask是规则掩码,用于和数据包作“与”操作,offset是偏移量,它以数据包的头部为基准,指定从第几个字节开始进行“与”操作,rule-mask offset共同作用,将从报文提取出来的字符串和用户定义的rule-string比较,找到匹配的报文,然后进行相应的处理。&<1-20>表示则一次最多可以定义20这样的规则。此参数用于用户自定义的访问控制列表。9.规则匹配原则
由于在一条访问控制列表中,往往会配置多条规则,而每一条规则指定的数据包的范围大小有别,这样在匹配一个访问控制规则的时候就存在匹配顺序的问题。访问控制列表子规则的匹配顺序有如下两种: config:指定匹配该规则时按用户的配置顺序。 auto:指定匹配该规则时系统自动排序。(按“深度优先”的顺序) 缺省情况下匹配顺序为按用户的配置排序,即“config”。用户一旦指定某一条访问控制规则的匹配顺序,就不能再更改该顺序,除非把该规则的内容全部删除,再重新指定其匹配顺序。 auto所用的“深度优先”的原则是指:把指定数据包范围最小的语句排在最前面。这一点可以通过比较地址的通配符来实现,通配符越小,则指定的主机的范围就越小。比如129.102.1.1 0.0.0.0指定了一台主机:129.102.1.1,而129.102.1.1 0.0.255.255则指定了一个网段:129.102.1.1~129.102.255.255,显然前者在访问控制规则中排在前面。具体标准为:对于基本访问控制规则的语句,直接比较源地址通配符,通配符相同的则按配置顺序;对于基于接口过滤的访问控制规则,配置了“any”的规则排在后面,其它按配置顺序;对于高级访问控制规则,首先比较源地址通配符,相同的再比较目的地址通配符,仍相同的则比较端口号的范围,范围小的排在前面,如果端口号范围也相同则按配置顺序。10.激活访问控制列表
访问控制列表定义好之后,还必须激活之后才能使之生效。 参数: user-group { acl-number | acl-name }:表示激活用户自定义的港问控制列表。acl-number:访问控制列表序号,300到399之间的一个数值。acl-name:访问控制列表名字,字符串参数,必须以英文字母(即[ a~z,A~Z])开头,而且中间不能有空格和引号。 ip-group { acl-number | acl-name }:表示激活IP访问控制列表,包括基本、高级和基于接口的访问控制列表。acl-number:访问控制列表序号,1到199之间和1000到1999之间的一个数值。acl-name:访问控制列表名字,字符串参数,必须以英文字母(即[ a~z,A~Z])开头,而且中间不能有空格和引号。 link-group { acl-number | acl-name }:表示激活二层访问控制列表。acl-number:访问控制列表序号,200到299之间的一个数值。acl-name:访问控制列表名字,字符串参数,必须以英文字母(即[ a~z,A~Z])开头,而且中间不能有空格和引号。 rule rule:可选参数,指定激活访问列表中的哪个子项,取值范围为0~127,如果不指定则表示要激活访问列表中的所有子项。11.配置ACL进行包过滤的步骤
交换机上配置ACL进行包过滤的步骤: 配置时间段(可选,系统视图模式下进行):时间段的配置不是必须的,通常当我们需要访问控制列表在一段特殊的时间内有效时,才需要用到时间段的配置。定义访问控制列表(系统视图模式下进行):在交换机上有五类访问控制列表,分别是基本、高级、基于接口、基于二层和用户自定义。在定义访问控制列表并进入ACL配置模式之后,我们还需要根据不同的类型来定义访问控制列表规则rule,以对通过交换机的业务流进行分类和执行相应的动作(permit或deny)。在一条访问控制列表下可以配置多条规则,而且可以用config和auto两种顺序进行规则匹配。激活访问控制列表(系统视图模式下进行):在访问控制列表定义好之后,还必须激活之后才能使之生效。12.访问控制列表配置举例
图表示的是一个公司的内部网络,该网络通过一台S3526以太网交换机的百兆端口实现各部门之间的互连。财务部门的工资查询服务器由Ethernet2/1端口接入(子网地址129.110.1.2)。现在的要求是在交换机上正确配置访问控制列表ACL,限制其它部门在上班时间8:00至12:00访问工资服务器,而总裁办公室(IP地址:129.111.1.2)不受限制,可以随时访问。 具体配置: (1)定义上班时间段: time-range worktime 8:00 to 12:00 daily daily表示在每一天都有效。其他的时间参数如working-day、off-day等 (2)定义到公司服务器的ACL name traffic-to-salaryserver advanced //进入基于名字的高级访问控制列表视图,命名为traffic-to-salaryserver。 rule 1 deny ip source any destination 129.110.1.2 0.0.0.0 time-range worktime //定义其它部门到工资服务器的访问规则 rule 2 permit ip source 129.111.1.2 0.0.0.0 destination 129.110.1.2 0.0.0.0 //定义总裁办公室到工资服务器的访问规则 (3)激活ACL packet-filter ip-group traffic-to-salaryserver //将名为traffic-to- salaryserver 的ACL激活。13.访问控制列表的维护和调试
+显示时间段状况 display time-range [all | time-range-name ] +显示访问控制列表的详细配置信息 display acl config { all | acl-number | acl-name } +显示访问控制列表的下发应用信息 display acl runtime all 显示所有访问控制列表的下发应用信息,即访问控制列表是否被激活生效等信息。 +清除访问控制列表的统计信息 reset acl counter { all | acl-number | acl-name }www.huawei.com