访问控制列表(Access Control List,ACL) 是路由器接口的指令列表,用来控制端口进出的数据包。ACL适用于所有的被路由协议,如IP、IPX、AppleTalk等。 ACL的定义也是基于每一种协议的。如果路由器接口配置成为支持三种协议(IP、AppleTalk以及IPX)的情况。
(一)ACL的执行过程
一个端口执行哪条ACL,这需要按照列表中的条件语句执行顺序来判断。如果一个数据包的报头跟表中某个条件判断语句相匹配,那么后面的语句就将被忽略,不再进行检查。
数据包只有在跟第一个判断条件不匹配时,它才被交给ACL中的下一个条件判断语句进行比较。如果匹配(假设为允许发送),则不管是第一条还 是最后一条语句,数据都会立即发送到目的接口。如果所有的ACL判断语句都检测完毕,仍没有匹配的语句出口,则该数据包将视为被拒绝而被丢弃。
这里要注意,ACL不能对本路由器产生的数据包进行控制。
(二)ACL的分类
目前有两种主要的ACL:标准ACL和扩展ACL。
这两种ACL的区别是,标准ACL只检查数据包的源地址; 扩展ACL既检查数据包的源地址,也检查数据包的目的地址,同时还可以检查数据包的特定协议类型、端口号等。
网络管理员可以使用标准ACL阻止来自某一网络的所有通信流量,或者允许来自某一特定网络的所有通信流量,或者拒绝某一协议簇(比如IP)的所有通信流量。
扩展ACL比标准ACL提供了更广泛的控制范围。例如,网络管理员如果希望做到“允许外来的Web通信流量通过,拒绝外来的FTP和Telnet等通信流量”,那么,他可以使用扩展ACL来达到目的,标准ACL不能控制这么精确。
1
扩展的IP访问控制列表
顾名思义,扩展的IP访问表用于扩展报文过滤能力。一个扩展的IP访问表允许用户根据如下内容过滤报文:源和目的地址、协议、源和目的端口以及在特定报文字段中允许进行特殊位比较等等。一个扩展的IP访问表的一般语法格或如下所示:
下面简要介绍各个关键字的功能:
1.list number----表号范围
扩展IP访问表的表号标识从l00到199。
2.protocol-----协议
协议项定义了需要被过滤的协议,例如IP、TCP、UDP、1CMP等等。协议选项是很重要的,因为在TCP/IP协议栈中的各种协议之间有很密切的关系,如果管理员希望根据特殊协议进行报文过滤,就要指定该协议。
另外,管理员应该注意将相对重要的过滤项放在靠前的位置。如果管理员设置的命令中,允许IP地址的语句放在拒绝TCP地址的语句前面,则后一个语句根本不起作用。但是如果将这两条语句换一下位置,则在允许该地址上的其他协议的同时,拒绝了TCP协议。
3.源端口号和目的端口号
源端口号可以用几种不同的方法来指定。它可以显式地指定,使用一个数字或者使用一个可识别的助记符。例如,我们可以使用80或者http来指定Web的超文本传输协议。对于TCP和UDP,读者可以使用操作符 "<"(小于)、">"(大于)"="(等于)以及""(不等于)来进行设置。
目的端口号的指定方法与源端口号的指定方法相同。读者可以使用数字、助记符或者使用操作符与数字或助记符相结合的格式来指定一个端口范围。
下面的实例说明了扩展IP访问表中部分关键字使用方法:
access-list 101 permit tcp any host 198.78.46.8 eq smtp
access-list 101 permit tcp any host 198.78.46.3 eq www
第一个语句允许来自任何主机的TCP报文到达特定主机198.78.46.8的smtp服务端口(25);第二个语句允许任何来自任何主机的TCP报文到达指定的主机198.78.46.3的www或http服务端口(80)。
4.选项
扩展的IP访问表支持很多选项。其中一个常用的选项有log,它已在前面讨论标准访问表时介绍过了。另一个常用的选项是fistahlishfid,该选项只用于TCP协议并且只在TCP通信流的一个方向上来响应由另一端发起的会话。为了实现该功能,使用estab1ished选项的访问表语句检查每个 TCP报文,以确定报文的ACK或RST位是否已设置。
例如,考虑如下扩展的IP访问表语句:
access-list 101 permit tcp any host 198.78.46.8 established
该语句的作用是:只要报文的ACK和RST位被设置,该访问表语句就允许来自任何源地址的TCP报文流到指定的主机198.78.46.8。这意味着主机198.78.46.8此前必须发起TCP会话。
5.其他关键字
deny/permit、源地址和通配符屏蔽码、目的地址和通配符屏蔽码以及host/any的使用均与标准IP访问表中的相同。
表2是对部分关键字的具体解释。
表 2:
管理和使用访问表
在一个接口上配置访问表需要三个步骤:
(1)定义访问表;
(2)指定访问表所应用的接口;
(3)定义访问表作用于接口上的方向。
我们已经讨论了如何定义标准的和扩展的IP访问表,下面将讨论如何指定访问表所用的接口以及接口应用的方向。
一般地,采用interface命令指定一个接口。例如,为了将访问表应用于串口0,应使用如下命令指定此端口:
interface serial0
类似地,为将访问表应用于路由器的以太网端口上时,假定端口为Ethernet0,则应使用如下命令来指定此端口:
interface ethernet0
在上述三个步骤中的第三步是定义访问表所应用的接口方向,通常使用ip access-group命令来指定。其中,列表号标识访问表,而关键字in或out则指明访问表所使用的方向。方向用于指出是在报文进入或离开路由器接口时对其进行过滤。如下的实例将这三个步骤综合在一起: 54ne.com
intface serial0
ip access-group 107 in
access-list 107 remark allow traffic to tom's pc
access-list 107 ip any host 198.78.46.8
access-list 107 remark allow only web traffic to webserver
access-list 107 tcp any host 198.78.46.12 eq 80
access-list 107 remark block everything else
access-list 107 deny any any
在本例中,先使用interface命令指定串行端口0,并使用ipaccess-group命令来将访问表l07中的语句应
用于串行接口的向内方向上。最后,输入6个访问表语句,其中三条访问表语句使用关键字rema