一、访问控制列表介绍:
访问控制列表(ACL,access control list)是应用在路由器的接口上的指令列表(即规则).这些规则告诉路由器,哪些数据包需要被拒绝,哪些被允许.
访问控制列表的基本原理是:ACL使用包过滤技术,在路由器上读取OSI七层模型中的第3层和第4层包头的信息,如源IP、目的IP、源端口、目的端口等,根据预先定义好的规则,对包进行过滤,从而达到访问控制的目的.
ACL可分为两种基本类型:
>标准访问控制列表:检查数据包的源地址,其结果基于源网路/子网/主机IP地址,来决定允许还是拒绝,使用1-99之间的数字作为表号.
>扩展访问列表:对数据包的源地址与目的地址均检查,它也能检查特定的协议、端口号以及其他参数.使用100-199之间的数字作为表号.
二、访问控制列表的工作原理
访问控制列表是一组规则的集合,它应用在路由器的接口上,有进和出2个方向.
出:已经经过路由器的处理,正离开路由器接口的数据包.
入:已到达路由器接口的数据包,将被路由器处理.
如果对路由器的接口应用的ACL,也就是说该接口应用了一组规则,那么路由器将对数据包按照顺序进行检查.
>如果第一条规则被匹配了,则不往下检查,直接决定数据包是被丢弃还是转发
>如果第一条不匹配,则向下检查,直到有一条规则被匹配,决定该数据包是被丢弃还是转发
>如果最后没有任何一条规则被匹配,则路由器根据默认的规则来决定是丢掉还是转发
访问控制列表对路由器本身产生的数据包不起作用
由此可见,在ACL中,规则的顺序很重要,一旦匹配了规则,就不再向下检查.
三、访问控制列表的类型:
1.标准访问控制列表
标准访问控制列表根据数据包的源IP地址来决定数据包是丢弃还是转发,表号1-99
2.扩展访问控制列表
扩展访问控制列表根据数据包的源IP地址、目的IP地址、协议、端口号来允许或者拒绝数据包,表号100-199
3.命名访问控制列表:
允许在标准和扩展访问控制列表中使用名称代替表号.
4.定时访问控制列表
定时访问控制列表提供基于时间的附加控制特性,定义在什么时间允许或者拒绝数据包.
四、访问控制列表的配置
4.1.标准访问控制列表的配置
1.创建ACL
Router(config)#access-list access-list-number { permit | deny } source [source-wildcard]
access-list-number:访问控制列表表号,范围1-99
permit | deny :允许 | 拒绝
source :数据包的源地址,可以值主机地址,也可以是网络地址,也就是网段或者具体的IP地址
source-wildcard:通配符掩码,也叫反掩码,在用二进制0和1表示时,如果某位为1,表明这一位不需要进行匹配,为0,则表明这一位需要严格匹配.
例:
Router(config)#access-list 1 permit 192.168.1.0 0.0.0.255
192.168.1.0/24的子网掩码是255.255.255.0,反掩码可以通过255.255.255.255减去255.255.255.0得到
Router(config)#access-list 1 permit 192.168.2.2 0.0.0.0
192.168.2.2的子网掩码是255.255.255.255,反掩码就是0.0.0.0
1)每个ACL都有一个隐含的拒绝语句,如下:
Router(config)#access-list 1 deny 0.0.0.0 255.255.255.255
2)关键字host/any
如:192.168.2.2 0.0.0.0 就可以用host代替
Router(config)#access-list 1 permit host 192.168.2.2
0.0.0.0 255.255.255.255 可以使用关键字any代替
Router(config)#access-list 1 deny any
3)删除已建立的标准ACL
Router(config)#no access-list access-list-number
对于标准访问控制列表,不能删除单条ACL语句,只能删除整个ACL,这意味着如果要改变一条或者几条ACL语句,必须先删除整个ACL,然后再添加想要的ACL语句
2.将ACL应用于接口
创建ACL之后,只有将ACL应用到接口,ACL才会生效
Router(config)#ip access-group acess-list-number { in | out}
参数in | out 用来表示是应用到入站接口还是出站接口
要取消接口上的ACL,在前面加no
Router(config)#no ip access-group access-list-number { in | out }
3.标准ACL配置实例
如图:要求配置标准ACL实现,禁止PC1访问PC2,而允许所有其他流量
步骤如下:
1)分析是在入站接口/出站接口上应用ACL
路由器对于in的数据包,先查看访问控制列表,通过后才查看路由表.对于out的数据包是先查看路由表,确定目标后才查看访问控制列表,因此尽量把ACL应用到入站接口上,因为它比出站接口效率要高.将要丢弃的数据包在进行路由表查询处理之前就拒绝掉.
2)应用在哪台路由器上
因为标准访问控制列表只能根据源IP地址过滤,如果在R1/R2上配置ACL,PC1不仅不能访问PC2,而且不能访问192.168.2.0/24.所以应该把标准ACL配置在离目的最近的路由器上.
3)配置ACL
R3(config)#access-list 1 deny 192.168.1.1 0.0.0.255
或者
R3(config)#access-list 1 deny host 192.168.1.1
R3(config)#access-list 1 permit any
R3(config)#int f0/0
R3(config-if)#ip access-group 1 in
使用show access-lists命令查看ACL配置
4.2扩展访问控制列表
1.创建ACL
Router(config)#access-list access-list-number { permit | deny } protocol { source source source-wildcard destination destination-wildcard } [ operator operan ]
access-list-number:访问控制列表表号,对于扩展ACL来说,范围是100-199
permit | deny :允许 | 拒绝
protocol : 协议,如IP/TCP/UDP/ICMP等
source destination :源地址/目的地址
source-wildcard destination-wildcard :反掩码,分别和源地址和目的地址对应
operator operan : lt (小于) 、gt(大于)、eq(等于)、neq(不等于)和一个端口号
例1:允许192.168.1.0/24访问192.168.2.0/24的IP流量通过,拒绝其他流量通过
Router(config)#access-list 100 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
Router(config)#access-list 100 deny ip any any
例2:拒绝192.168.1.0/24访问FTP服务器192.168.2.2/24的流量通过,而允许其他任何流量
Router(config)#access-list 100 deny tcp 192.168.1.0 0.0.0.255 192.168.2.2 0.0.0.255
Router(config)#access-list 100 permit ip any any
删除扩展ACL和删除标准ACL一样
Router(config)#no access-list access-list-number
扩展ACL与标准ACL一样,也不能删除单独的ACL语句,只能删除整个ACL
2.将ACL应用于接口
和标准ACL一样,需要将ACL应用到接口上,ACL才会生效
命令和标准ACL一样
Router(config-if)#ip access-group 100 in | out
取消的命令
Router(config-if)#no ip access-group 100 in | out
3.扩展ACL配置实例
步骤:
1)分析将ACL应用在入站接口还是出站接口
和标准ACL一样,尽量将ACL应用在入站接口上
2)该应用在哪台路由器上
由于扩展ACL可以根据源IP/目的IP/协议/端口,因此尽量将ACL应用到离源IP最近的路由器上,这样避免经过过多的路由器占用不要的资源.
3)配置ACL,并应用到接口上
R1(config)#access-list 100 permit tcp 192.168.1.1 0.0.0.255 192.168.3.1 0.0.0.255 eq 80 (www)
R1(config)#access-list 100 deny ip 192.168.1.1 0.0.0.255 192.168.3.1 0.0.0.255
R1(config)#access-list 100 permit ip 192.168.1.1 0.0.0.255 192.168.2.0 0.0.0.255
R1(config)#int f0/0
R1(config-if)#ip access-group 100 in
4.3命名访问控制列表的配置
1.创建ACL
Router(config)#ip access-list { standard | extended } access-list-name
参数access-list-name 可以使用一个由字母、数字组合的字符串
如果是标准ACL,命令:
Router(config)#[Sequence-number] { permit | deny } source [ source-wildcard ]
如果是扩展ACL,命令:
Router(config-ext-nacl)#[ Sequence-Number ] { permit | deny } protocol { source source-wildcard destination destination-wildcard } [ operator operan]
无论是标准命名ACL还是扩展命名ACL,都有一个可选参数Sequence-Number,Sequence-Number表明配置此ACL语句在ACL中所处的位置,默认情况下,第一条为10,第二条为20,以此类推.
Sequence-Number可以很方便的将新添加的ACL语句插入到指定位置,如果不选择Sequence-Number,那么ACL语句就会被添加到列表末尾,并且序列号加10.
例:允许来自主机192.168.1.1/24的流量通过,而拒绝其他流量,标准命名ACL命令为:
Router(config)#ip access-list standard cisco
Router(config-std-nacl)#permit 192.168.1.1 0.0.0.255
Router(config-std-nacl)#deny any
例:拒绝192.168.1.0/24访问FTP服务器192.168.2.2/24的流量通过,而允许其他任何流量.扩展命名ACL:
Router(config)#ip access-list extended cisco1
Router(config-ext-nacl)#deny tcp 192.168.1.0 0.0.0.255 host 192.168.2.2 eq 21
Router(config-ext-nacl)#permit ip any any
删除已建立的命名ACL:
Router(config)#no ip access-list { standard | extended } access-list-name
对于命名ACL来说,可以删除单条的ACL语句,而不必删除整个ACL,而且命令ACL可以有选择性的插入到指定位置,是ACL配置更加方便.
如果要删除一条ACL语句,可以使用"no Sequence-Number"或者"no acl语句"两种方式.
例如:
Router(config)#ip access-list standard cisco
Router(config-std-nacl)#no 10
2.将ACL应用于接口
创建命令ACL后,也必须将ACL应用于接口才会生效.
Router(config-if)#ip access-group access-list-name { in | out }
取消在接口应用的ACL:
Router(config-if)#no ip access-group access-list-name { in | out }
4.4 定时访问控制列表的配置
配置定时ACL,需要建立一个时间范围,然后使用扩展ACL或者命名扩展ACL引用这个时间范围.
1.定义时间范围的名称
Router(config)#time-range time-range-name
2.指定该时间范围何时生效
指定该时间范围何时生效有二种方式:定义一个时间周期或者定义一个绝对的时间.
1).定义一个时间周期
Router(config-time-range)#periodic days-of-the-week hh:mm to [ days-of-the-week ] hh:mm
Router(config-time-range)#absolute [ start hh:mm day month year ] [ end hh:mm day month year ]
2).在扩展ACL中引入时间范围
Router(config)#access-list access-list-number { permit | deny } protocol { source source-wildcard destination destination-wildcard } [ operaor operan ] time-range time-range-name
3).将ACL应用于接口
Router(config-if)#ip access-group access-list-number { in | out }
例:在每周的正常工作时间(周一到周五的每天8:30-17:30),允许所有的IP流量通过网络,命令如下:
Router(config)#time-range time
Router(config-time-range)#periodic weekdays 8:30 to 17:30
Router(config-time-range)#exit
Router(config)#access-list 101 permit ip any any time-range time
Router(config)#int f0/0
Router(config-if)#ip access-group 101 in